Contract 0x24129a6c5b700435cc0d1bd3500796f3fb9ebd49 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9bcf148b4e69c308d54a5cc45ae452e7f3f31e0d115139992480fd1b6a9868ceTransfer2122573822024-05-17 17:39:225 days 22 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00000058 0.01014
0x9dcf08b137dca3f2b13a6624dda6dab30b992d9080ff0f884d13f8f91fad25f2Transfer1878401342024-03-07 1:05:2277 days 15 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00011997 0.1
0x9acb8b97019b03d3b82ef01dbf3c9fdc1e5e6c62532ec7895ebe40ecf6ea7903Transfer1838529462024-02-24 2:27:2189 days 13 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00004421 0.1
0x40a6b235ae2ab6729e22f9eeb44b8d10e0b2026f8d294f20104efb490f073a9cTransfer1837318772024-02-23 17:23:0089 days 22 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00010166 0.1
0x7780162058495709ecaebd0b19165c54b82e465994f82769475a4f9a421a25e5Transfer1820607562024-02-18 16:57:3694 days 23 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00006336 0.1
0xb8aeee650b6dcfbc61391e2f36e291153cb43e39984c818884a26c824dfcc57eTransfer1818139242024-02-17 23:10:2095 days 17 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00004273 0.1
0x0fe3a259db1091b85095352683994e4fe3dec052eff7d8800b45c05375a67d8dTransfer1804809762024-02-13 23:26:4499 days 16 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00004818 0.1
0xb68602bb58aa4c33ec4c86b74b37d5384233a2601f3b0a1e6e9150b1c4e98859Transfer1712341522024-01-17 4:17:14127 days 11 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00006416 0.1
0x1cfed3c6240ff8210413ef6bd1078992a20abb86ba6abb663e2b532dfa43b5dbApprove1578485862023-12-07 19:39:43167 days 20 hrs ago0xab94ebe13ae9fe1ddb6bea0e92f6a15184fa89c7 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00010253 0.1
0x3a40a989733c88c8a977ff76f925953d946f71388484bffa33466953432b4062Transfer1569038492023-12-04 20:30:37170 days 19 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00011004 0.1
0xcbe4a5c22fca6f43ccd3c3adeb1c1d156d71955a5f2e3e1d0deedd69a512614fTransfer1529959702023-11-22 16:28:56182 days 23 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00011856 0.1
0x7ccf9be46880c0dee1cf0b40e5dbc94eb8faba8608d28f57f2a415a26990d7e8Approve1508717982023-11-16 4:30:39189 days 11 hrs ago0xadc031616771ecb503c65e607c13dde152d459df IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00006725 0.1
0xca7a3d405b01e7057f9aa256b10c5c2cdd7a83249fe7bc403f5b33dee8fc604eTransfer1500359992023-11-13 15:04:38192 days 1 hr ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00014558 0.1
0x7ca98e44c06a63c871a0d88efc1cc5ce6d6d8be1c6e2eaaf79bfe6ef24a23140Transfer1494171862023-11-11 16:36:49193 days 23 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.0000947 0.1
0xe15c04be9660075d911fbeddf70d8d9227d2a868b9feb75ca551aca028d628e3Transfer1492004302023-11-11 1:15:51194 days 14 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00006928 0.1
0xff320f466be501ffd5491abad801503cdf6db160af48bc930fa1d8cb757cfe75Approve1466276392023-11-03 6:39:23202 days 9 hrs ago0xadc031616771ecb503c65e607c13dde152d459df IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00003080.1
0x5bd5ccf7c02bb78762a36c8ae1978ef8623b19445a5dfdba5c93f5e16f7729d4Transfer1458411212023-10-31 21:03:31204 days 19 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00006367 0.1
0x2dd525cde5de6b37d63557b60ebb99520a66eb1b7f28b2e9fc37e8530dee8268Transfer1458409422023-10-31 21:02:40204 days 19 hrs ago0x21f4dd6c491e04874f19f6bc4fc1a3d0e661ca39 IN  0x24129a6c5b700435cc0d1bd3500796f3fb9ebd490 ETH0.00006415 0.1
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x3c916c4e484314b470200da39bc8a38ef6026a146cbdbffd30eec00dc9b8935a1444800472023-10-27 10:52:10209 days 5 hrs ago 0x3e40739d8478c58f9b973266974c58998d4f9e8b  Contract Creation0 ETH
[ Download CSV Export 
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xc052BE9C4eBE223DF9b63709B25D76337A3046d3
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
DexSwapPair

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 10 : Constants.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;

abstract contract Constants {
    uint256 public constant DIVIDER = 10000;
}

File 2 of 10 : DexSwapERC20.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;

import "./interfaces/IDexSwapERC20.sol";

contract DexSwapERC20 is IDexSwapERC20 {
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

    string public constant name = "DexSwap LPs";
    string public constant symbol = "DexSwap-LP";
    uint8 public constant decimals = 18;

    bytes32 public override DOMAIN_SEPARATOR;

    uint256 public totalSupply;

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

    constructor() {
        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 + value;
        balanceOf[to] = balanceOf[to] + value;
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint256 value) internal {
        balanceOf[from] = balanceOf[from] - value;
        totalSupply = totalSupply - 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] - value;
        balanceOf[to] = balanceOf[to] + 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] != type(uint256).max) {
            allowance[from][msg.sender] = allowance[from][msg.sender] - 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, "DexSwapERC20: 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, "DexSwapERC20: INVALID_SIGNATURE");
        _approve(owner, spender, value);
    }
}

File 3 of 10 : DexSwapPair.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;

import "./DexSwapERC20.sol";
import "./abstracts/Constants.sol";

import "./interfaces/IERC20.sol";
import "./interfaces/IDexSwapPair.sol";
import "./interfaces/IDexSwapFactory.sol";
import "./interfaces/IDexSwapCallee.sol";

import "./libraries/Math.sol";
import "./libraries/UQ112x112.sol";

contract DexSwapPair is IDexSwapPair, DexSwapERC20, Constants {
    using UQ112x112 for uint224;

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

    uint256 public fee;
    uint256 public protocolShare;
    address public factory;
    address public token0;
    address public token1;

    uint256 public price0CumulativeLast;
    uint256 public price1CumulativeLast;
    uint256 public kLast;

    uint256 internal decimals0;
    uint256 internal decimals1;

    uint256 private blockTimestampLast;
    uint112 private reserve0;
    uint112 private reserve1;
    uint256 private unlocked = 1;

    function getAmountIn(uint256 amountOut, address tokenIn, address caller) public view returns (uint256 amountIn) {
        (uint256 _reserve0, uint256 _reserve1, ) = getReserves();
        require(amountOut > 0, "DexSwapPair: INSUFFICIENT_INPUT_AMOUNT");
        require(_reserve0 > 0 && _reserve1 > 0, "DexSwapPair: INSUFFICIENT_LIQUIDITY");
        if (tokenIn == token1) (_reserve0, _reserve1) = (_reserve1, _reserve0);
        uint256 fee_ = IDexSwapFactory(factory).feeWhitelistContains(caller) ? 0 : fee;
        uint256 numerator = _reserve0 * amountOut * DIVIDER;
        uint256 denominator = (_reserve1 - amountOut) * (DIVIDER - fee_);
        amountIn = (numerator / denominator) + 1;
    }

    function getAmountOut(uint256 amountIn, address tokenIn, address caller) public view returns (uint256 amountOut) {
        (uint256 _reserve0, uint256 _reserve1, ) = getReserves();
        require(amountIn > 0, "DexSwapPair: INSUFFICIENT_INPUT_AMOUNT");
        require(_reserve0 > 0 && _reserve1 > 0, "DexSwapPair: INSUFFICIENT_LIQUIDITY");
        uint256 fee_ = IDexSwapFactory(factory).feeWhitelistContains(caller) ? 0 : fee;
        if (tokenIn == token1) (_reserve0, _reserve1) = (_reserve1, _reserve0);
        uint amountInWithFee = amountIn * (DIVIDER - fee_);
        uint numerator = amountInWithFee * _reserve1;
        uint denominator = (_reserve0 * DIVIDER) + amountInWithFee;
        amountOut = numerator / denominator;
    }

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

    constructor() {
        factory = msg.sender;
    }

    function burn(address to) external lock returns (uint256 amount0, uint256 amount1) {
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves();
        address _token0 = token0;
        address _token1 = token1;
        uint256 balance0 = IERC20(_token0).balanceOf(address(this));
        uint256 balance1 = IERC20(_token1).balanceOf(address(this));
        uint256 liquidity = balanceOf[address(this)];
        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _totalSupply = totalSupply;
        amount0 = (liquidity * balance0) / _totalSupply;
        amount1 = (liquidity * balance1) / _totalSupply;
        require(amount0 > 0 && amount1 > 0, "DexSwapPair: 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 = uint256(reserve0) * reserve1;
        emit Burn(msg.sender, amount0, amount1, to);
    }

    function initialize(address _token0, address _token1) external onlyFactory {
        token0 = _token0;
        token1 = _token1;
        decimals0 = 10 ** IERC20(_token0).decimals();
        decimals1 = 10 ** IERC20(_token1).decimals();
    }

    function mint(address to) external lock returns (uint256 liquidity) {
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves();
        uint256 balance0 = IERC20(token0).balanceOf(address(this));
        uint256 balance1 = IERC20(token1).balanceOf(address(this));
        uint256 amount0 = balance0 - _reserve0;
        uint256 amount1 = balance1 - _reserve1;
        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _totalSupply = totalSupply;
        if (_totalSupply == 0) {
            liquidity = Math.sqrt(amount0 * amount1) - MINIMUM_LIQUIDITY;
            _mint(address(0), MINIMUM_LIQUIDITY);
        } else {
            liquidity = Math.min((amount0 * _totalSupply) / _reserve0, (amount1 * _totalSupply) / _reserve1);
        }
        require(liquidity > 0, "DexSwapPair: INSUFFICIENT_LIQUIDITY_MINTED");
        _mint(to, liquidity);
        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint256(reserve0) * reserve1;
        emit Mint(msg.sender, amount0, amount1);
    }

    function skim(address to) external onlyFactory lock {
        address _token0 = token0;
        address _token1 = token1;
        _safeTransfer(_token0, to, IERC20(_token0).balanceOf(address(this)) - reserve0);
        _safeTransfer(_token1, to, IERC20(_token1).balanceOf(address(this)) - reserve1);
    }

    function sync() external lock {
        _update(IERC20(token0).balanceOf(address(this)), IERC20(token1).balanceOf(address(this)), reserve0, reserve1);
    }

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external {
        _swap(amount0Out, amount1Out, to, address(0), data);
    }

    function swapFromPeriphery(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        address caller,
        bytes calldata data
    ) external {
        require(
            IDexSwapFactory(factory).peripheryWhitelistContains(msg.sender),
            "DexSwapPair: Caller is not periphery"
        );
        _swap(amount0Out, amount1Out, to, caller, data);
    }

    function updateFee(uint256 fee_) external onlyFactory returns (bool) {
        require(fee_ <= MAX_FEE, "DexSwapFactory: Fee gt MAX_FEE");
        fee = fee_;
        emit FeeUpdated(fee_);
        return true;
    }

    function updateProtocolShare(uint256 share) external onlyFactory returns (bool) {
        require(share <= MAX_PROTOCOL_SHARE, "DexSwapFactory: Share gt MAX_PROTOCOL_SHARE");
        protocolShare = share;
        emit ProtocolShareUpdated(share);
        return true;
    }

    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IDexSwapFactory(factory).feeTo();
        feeOn = feeTo != address(0) && protocolShare > 0;
        uint256 _kLast = kLast;
        if (feeOn) {
            if (_kLast != 0) {
                uint256 rootK = Math.sqrt(uint256(_reserve0) * _reserve1);
                uint256 rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint256 numerator = (totalSupply * (rootK - rootKLast)) * protocolShare;
                    uint256 denominator = (rootK * (MAX_PROTOCOL_SHARE - protocolShare)) + (rootKLast * protocolShare);
                    uint256 liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    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))), "DexSwapPair: TRANSFER_FAILED");
    }

    function _swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        address caller,
        bytes calldata data
    ) private lock {
        IDexSwapFactory factory_ = IDexSwapFactory(factory);
        require(
            factory_.contractsWhitelistContains(address(0)) ||
                msg.sender == tx.origin ||
                factory_.contractsWhitelistContains(msg.sender),
            "DexSwapPair: Caller is invalid"
        );
        require(amount0Out > 0 || amount1Out > 0, "DexSwapPair: INSUFFICIENT_OUTPUT_AMOUNT");
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves();
        require(amount0Out < _reserve0 && amount1Out < _reserve1, "DexSwapPair: INSUFFICIENT_LIQUIDITY");
        uint256 balance0;
        uint256 balance1;
        {
            address _token0 = token0;
            address _token1 = token1;
            require(to != _token0 && to != _token1, "DexSwapPair: INVALID_TO");
            if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out);
            if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out);
            if (data.length > 0) IDexSwapCallee(to).dexSwapCall(msg.sender, amount0Out, amount1Out, data);
            balance0 = IERC20(_token0).balanceOf(address(this));
            balance1 = IERC20(_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, "DexSwapPair: INSUFFICIENT_INPUT_AMOUNT");
        {
            uint256 fee_ = (caller != address(0) && factory_.feeWhitelistContains(caller)) ? 0 : fee;
            uint256 balance0Adjusted = (balance0 * DIVIDER) - (amount0In * fee_);
            uint256 balance1Adjusted = (balance1 * DIVIDER) - (amount1In * fee_);
            require(
                balance0Adjusted * balance1Adjusted >= (uint256(_reserve0) * _reserve1) * DIVIDER ** 2,
                "DexSwapPair: K"
            );
        }
        _update(balance0, balance1, _reserve0, _reserve1);
        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);
    }

    function _update(uint256 balance0, uint256 balance1, uint112 _reserve0, uint112 _reserve1) private {
        require(balance0 <= type(uint112).max && balance1 <= type(uint112).max, "DexSwapPair: OVERFLOW");
        uint256 blockTimestamp = block.timestamp % 2 ** 32;
        uint256 timeElapsed = blockTimestamp - blockTimestampLast;
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            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);
    }

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

    modifier onlyFactory() {
        require(msg.sender == factory, "DexSwapPair: Caller is not factory");
        _;
    }
}

File 4 of 10 : IDexSwapCallee.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;

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

File 5 of 10 : IDexSwapERC20.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;

interface IDexSwapERC20 {
    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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external view returns (bytes32);

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

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

File 6 of 10 : IDexSwapFactory.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;

interface IDexSwapFactory {
    event ContractsWhitelistAdded(address[] contracts);
    event ContractsWhitelistRemoved(address[] contracts);
    event FeeUpdated(uint256 fee);
    event ProtocolShareUpdated(uint256 share);
    event FeePairUpdated(address indexed token0, address indexed token1, uint256 fee);
    event ProtocolSharePairUpdated(address indexed token0, address indexed token1, uint256 share);
    event FeeWhitelistAdded(address[] accounts);
    event FeeWhitelistRemoved(address[] accounts);
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);
    event PeripheryWhitelistAdded(address[] periphery);
    event PeripheryWhitelistRemoved(address[] periphery);
    event Skimmed(address indexed token0, address indexed token1, address to);

    function INIT_CODE_PAIR_HASH() external view returns (bytes32);

    function contractsWhitelistList(uint256 offset, uint256 limit) external view returns (address[] memory output);

    function contractsWhitelist(uint256 index) external view returns (address);

    function contractsWhitelistContains(address contract_) external view returns (bool);

    function contractsWhitelistCount() external view returns (uint256);

    function protocolShare() external view returns (uint256);

    function fee() external view returns (uint256);

    function feeWhitelistList(uint256 offset, uint256 limit) external view returns (address[] memory output);

    function feeWhitelist(uint256 index) external view returns (address);

    function feeWhitelistContains(address account) external view returns (bool);

    function feeWhitelistCount() external view returns (uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function peripheryWhitelistList(uint256 offset, uint256 limit) external view returns (address[] memory output);

    function peripheryWhitelist(uint256 index) external view returns (address);

    function peripheryWhitelistContains(address account) external view returns (bool);

    function peripheryWhitelistCount() external view returns (uint256);

    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 addContractsWhitelist(address[] memory contracts) external returns (bool);

    function addFeeWhitelist(address[] memory accounts) external returns (bool);

    function addPeripheryWhitelist(address[] memory periphery) external returns (bool);

    function removeContractsWhitelist(address[] memory contracts) external returns (bool);

    function removeFeeWhitelist(address[] memory accounts) external returns (bool);

    function removePeripheryWhitelist(address[] memory periphery) external returns (bool);

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

    function updateFee(uint256 fee_) external returns (bool);

    function updateProtocolShare(uint256 share) external returns (bool);

    function updateFeePair(address token0, address token1, uint256 fee_) external returns (bool);

    function updateProtocolSharePair(address token0, address token1, uint256 share) external returns (bool);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function skim(address token0, address token1, address to) external returns (bool);
}

File 7 of 10 : IDexSwapPair.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;

import "./IDexSwapERC20.sol";

interface IDexSwapPair is IDexSwapERC20 {
    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event FeeUpdated(uint256 fee);
    event ProtocolShareUpdated(uint256 share);
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external view returns (uint256);

    function MAX_FEE() external view returns (uint256);

    function MAX_PROTOCOL_SHARE() external view returns (uint256);

    function factory() external view returns (address);

    function fee() external view returns (uint256);

    function protocolShare() external view returns (uint256);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getAmountOut(uint256 amountIn, address tokenIn, address caller) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, address tokenIn, address caller) external view returns (uint256 amountIn);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint256 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to) external returns (uint256 amount0, uint256 amount1);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function swapFromPeriphery(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        address caller,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;

    function updateFee(uint256 fee_) external returns (bool);

    function updateProtocolShare(uint256 share) external returns (bool);
}

File 8 of 10 : IERC20.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;

interface IERC20 {
    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 9 of 10 : Math.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;

// 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 10 of 10 : UQ112x112.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;

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

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

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"share","type":"uint256"}],"name":"ProtocolShareUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DIVIDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"caller","type":"address"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"caller","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint256","name":"_blockTimestampLast","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"caller","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swapFromPeriphery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee_","type":"uint256"}],"name":"updateFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"share","type":"uint256"}],"name":"updateProtocolShare","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x6080604052600436101561001257600080fd5b6000803560e01c8063022c0d9f14611dc657806306fdde0314611d825780630902f1ac14611d31578063095ea7b314611d0a5780630a9a2b7214611bb55780630dfe168114611b8c5780631103f31514611b6e57806318160ddd14611b5057806323b872dd14611aaf57806330adf81f14611a74578063313ce56714611a585780633644e51514611a3b578063485cc955146119285780635909c0d51461190a5780635a3d5493146118ec5780635e1e63251461179b57806362043bd81461177e5780636a6278421461146857806370a082311461142f5780637464fc3d146114115780637ecebe00146113d857806389afcb44146110755780639012c4a814610fc457806395d89b4114610f7d578063a9059cbb14610f4b578063a931208f146107d3578063b2396832146107f5578063ba9a7a56146107d8578063bc063e1a146107d3578063bc25cf771461067d578063c45a015514610654578063c98ec7a41461058f578063d21220a714610566578063d505accf14610355578063dd62ed3e14610306578063ddca3f43146102e85763fff6cae9146101b457600080fd5b346102e557806003193601126102e5576101d26001601154146125be565b60118190556008546040516370a0823160e01b808252306004830152916020916001600160a01b039183908290602490829086165afa9182156102da57839186936102a9575b50600954169360246040518096819382523060048301525afa91821561029e578492610267575b5061025f9250601054916001600160701b03808460701c169316916129ce565b600160115580f35b90915082813d8311610297575b61027e8183612329565b810103126102925761025f9151903861023f565b600080fd5b503d610274565b6040513d86823e3d90fd5b8281939294503d83116102d3575b6102c18183612329565b81010312610292578290519138610218565b503d6102b7565b6040513d87823e3d90fd5b80fd5b50346102e557806003193601126102e5576020600554604051908152f35b50346102e55760403660031901126102e557610320612283565b604061032a612299565b9260018060a01b03809316815260036020522091166000526020526020604060002054604051908152f35b50346102e55760e03660031901126102e55761036f612283565b610377612299565b604435906064356084359060ff8216809203610562574281106105255785546001600160a01b0386811680895260046020526040892080549195929492906000198314610511576001830190556040519260208401927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98452876040860152868916606086015289608086015260a085015260c084015260c0835260e083019383851067ffffffffffffffff8611176104fb57848b94610122608095602098604052825190209161010081019461190160f01b86526101028201520152604281526104618161230d565b519020906040519182528482015260a435604082015260c435606082015282805260015afa156102da578551169081151591826104f1575b5050156104ac576104a9926123e5565b80f35b60405162461bcd60e51b815260206004820152601f60248201527f4465785377617045524332303a20494e56414c49445f5349474e4154555245006044820152606490fd5b1490503880610499565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b8b52601160045260248bfd5b60405162461bcd60e51b815260206004820152601560248201527411195e14ddd85c115490cc8c0e8811561412549151605a1b6044820152606490fd5b8580fd5b50346102e557806003193601126102e5576009546040516001600160a01b039091168152602090f35b50346102e55760203660031901126102e5576004356105b960018060a01b03600754163314612600565b606481116105fb576020817fd82bf55fab0a06d972b148305a6b58062e33e048f53695742fc3e9f07585259292600655604051908152a1602060405160018152f35b60405162461bcd60e51b815260206004820152602b60248201527f44657853776170466163746f72793a205368617265206774204d41585f50524f60448201526a544f434f4c5f534841524560a81b6064820152608490fd5b50346102e557806003193601126102e5576007546040516001600160a01b039091168152602090f35b50346102e5576020806003193601126107cf57610698612283565b6007546001600160a01b039291906106b39084163314612600565b6106c16001601154146125be565b836011558260085416926009541691604051936370a0823160e01b908186523060048701528286602481845afa9586156107c4578796610793575b5061071f90846107196001600160701b039889601054169061243c565b91612832565b6040519081523060048201528181602481875afa918215610788578692610758575b50506107199061025f9460105460701c169061243c565b90809250813d8311610781575b61076f8183612329565b81010312610292575183610719610741565b503d610765565b6040513d88823e3d90fd5b9095508281813d83116107bd575b6107ab8183612329565b8101031261029257519461071f6106fc565b503d6107a1565b6040513d89823e3d90fd5b5080fd5b6123c9565b50346102e557806003193601126102e55760206040516103e88152f35b50346102e55760a03660031901126102e55761080f61226d565b606435906001600160a01b03821682036102925760843567ffffffffffffffff8111610f47576108439036906004016122af565b60075460405163effe8ce160e01b81523360048201526001600160a01b039091169290602081602481875afa9081156107c4578791610f28575b5015610ed7576108916001601154146125be565b856011556040516304ad971560e21b808252876004830152602082602481885afa918215610c45578892610eb6575b508115610eac575b8115610e61575b5015610e1c576004351580158091610e11575b15610dbc576010546001600160701b03607082901c811693911691600435831180610da8575b6109119061251b565b6008546009546001600160a01b0391821696908216939091891687141580610d95575b15610d50578a92610d3e575b602435610d2c575b81610c85575b505050604051936020856024816370a0823160e01b948582523060048301525afa948515610bf1578995610c50575b5060209060246040518094819382523060048301525afa908115610c45578891610c13575b506109b86004356001600160701b03841661243c565b841115610c0c576109dd6109d76004356001600160701b03851661243c565b8561243c565b965b6109f46024356001600160701b03861661243c565b821115610c0557610a19610a136024356001600160701b03871661243c565b8361243c565b955b8815801590610bfc575b610a2e906124c0565b6001600160a01b03821615159182610b81575b505015610b7957875b846127108102046127101485151715610b6557610a74610a6a828a61258b565b612710870261243c565b90612710830290838204612710148415171561051157610aa89291610a9c610aa2928a61258b565b9061243c565b9061258b565b610acf610ac76001600160701b0386166001600160701b03861661258b565b610aa2612984565b11610b2f57610add936129ce565b60405192835260208301526004356040830152602435606083015260018060a01b0316907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82260803392a3600160115580f35b60405162461bcd60e51b815260206004820152600e60248201526d44657853776170506169723a204b60901b6044820152606490fd5b634e487b7160e01b89526011600452602489fd5b600554610a4a565b604051631e45990d60e31b81526001600160a01b0390911660048201529150602090829060249082905afa908115610bf1578991610bc2575b503880610a41565b610be4915060203d602011610bea575b610bdc8183612329565b810190612573565b38610bba565b503d610bd2565b6040513d8b823e3d90fd5b50861515610a25565b8895610a1b565b87966109df565b90506020813d602011610c3d575b81610c2e60209383612329565b810103126102925751386109a2565b3d9150610c21565b6040513d8a823e3d90fd5b9094506020813d602011610c7d575b81610c6c60209383612329565b81010312610292575193602061097d565b3d9150610c5f565b6001600160a01b0389163b15610d28578160a484926040519485938492631a64faf160e11b84523360048501526004356024850152602435604485015260806064850152816084850152848401378181018301859052601f01601f19168101030181836001600160a01b038d165af18015610d1d57610d05575b8061094e565b610d0e906122dd565b610d19578738610cff565b8780fd5b6040513d84823e3d90fd5b8280fd5b610d396024358a86612832565b610948565b610d4b6004358a89612832565b610940565b60405162461bcd60e51b815260206004820152601760248201527f44657853776170506169723a20494e56414c49445f544f0000000000000000006044820152606490fd5b506001600160a01b038916841415610934565b506001600160701b03841660243510610908565b60405162461bcd60e51b815260206004820152602760248201527f44657853776170506169723a20494e53554646494349454e545f4f555450555460448201526617d05353d5539560ca1b6064820152608490fd5b5060243515156108e2565b60405162461bcd60e51b815260206004820152601e60248201527f44657853776170506169723a2043616c6c657220697320696e76616c696400006044820152606490fd5b9050604051908152336004820152602081602481875afa9081156107c4578791610e8d575b50386108cf565b610ea6915060203d602011610bea57610bdc8183612329565b38610e86565b33321491506108c8565b610ed091925060203d602011610bea57610bdc8183612329565b90386108c0565b60405162461bcd60e51b8152602060048201526024808201527f44657853776170506169723a2043616c6c6572206973206e6f742070657269706044820152636865727960e01b6064820152608490fd5b610f41915060203d602011610bea57610bdc8183612329565b3861087d565b8380fd5b50346102e55760403660031901126102e557610f72610f68612283565b6024359033612456565b602060405160018152f35b50346102e557806003193601126102e557610fc0604051610f9d816122f1565b600a8152690446578537761702d4c560b41b60208201526040519182918261234b565b0390f35b50346102e55760203660031901126102e557600435610fee60018060a01b03600754163314612600565b60648111611030576020817f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c7692600555604051908152a1602060405160018152f35b60405162461bcd60e51b815260206004820152601e60248201527f44657853776170466163746f72793a20466565206774204d41585f46454500006044820152606490fd5b50346102e557602090816003193601126102e557611091612283565b906110a06001601154146125be565b6011819055601054600f546001600160701b038083169260701c1690506008546009546040516370a0823160e01b8082523060048301529794966001600160a01b039384169690949192841686846024818b5afa938415610d1d5782946113a9575b5060405199808b523060048c0152878b602481855afa98891561139e578a9b849b9a61136b575b50308452600289526111656111438660408720549c6126d7565b9661115961115e8d61115960015494859261258b565b61259e565b9d8d61258b565b998b151580611362575b1561130a576024939291858b923082526002845261119181604084205461243c565b3083526002855260408320556111a98160015461243c565b600155604051908152600080516020612bda833981519152843092a36111d08d8b83612832565b6111db8c8b86612832565b604051948580928582523060048301525afa92831561029e5790899185946112d9575b5060246040518094819382523060048301525afa9283156112cd5792611297575b509861122e929160409a6129ce565b611274575b855191858352848484015216907fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496863392a360016011558351928352820152f35b61128f6010546001600160701b03808260701c16911661258b565b600c55611233565b929150988683813d83116112c6575b6112b08183612329565b810103126102925791519198909190604061121f565b503d6112a6565b604051903d90823e3d90fd5b8281939295503d8311611303575b6112f18183612329565b810103126102925788905192386111fe565b503d6112e7565b60405162461bcd60e51b8152600481018b9052602a60248201527f44657853776170506169723a20494e53554646494349454e545f4c495155494460448201526912551657d0955493915160b21b6064820152608490fd5b508a151561116f565b8980929c50819b503d8311611397575b6113858183612329565b81010312610292578a98519938611129565b503d61137b565b6040513d85823e3d90fd5b9093508681813d83116113d1575b6113c18183612329565b8101031261029257519238611102565b503d6113b7565b50346102e55760203660031901126102e5576020906040906001600160a01b03611400612283565b168152600483522054604051908152f35b50346102e557806003193601126102e5576020600c54604051908152f35b50346102e55760203660031901126102e5576020906040906001600160a01b03611457612283565b168152600283522054604051908152f35b50346102e55760203660031901126102e557611482612283565b906114916001601154146125be565b60118190556010546008546040516370a0823160e01b80825230600483015290946001600160701b03607085901c811695941693926001600160a01b03906020908890602490829085165afa96871561029e578497611749575b50602090600954169260246040518095819382523060048301525afa91821561139e578392611715575b506001600160701b0384169461152b868861243c565b946001600160701b03821693611541858261243c565b9561154c84846126d7565b95600154998a156000146116de57505061156e611569888a61258b565b612b2b565b6103e7198101919082116116ca5750976103e8810181116116b4576103e8016001556000805260026020526040600020546103e8810181116116b4576103e89060008052600260205201604060002055600080600080516020612bda83398151915260206040516103e88152a35b871561165c576020986115f2896115f796612681565b6129ce565b611639575b604051918252838201527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f60403392a26001601155604051908152f35b6116546010546001600160701b03808260701c16911661258b565b600c556115fc565b60405162461bcd60e51b815260206004820152602a60248201527f44657853776170506169723a20494e53554646494349454e545f4c495155494460448201526912551657d3525395115160b21b6064820152608490fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b81526011600452602490fd5b906111596116f56116fc936111598e979e8e61258b565b948a61258b565b90508082101561170e57505b966115dc565b9050611708565b9091506020813d602011611741575b8161173160209383612329565b8101031261029257519038611515565b3d9150611724565b9096506020813d602011611776575b8161176560209383612329565b8101031261029257519560206114eb565b3d9150611758565b50346102e557806003193601126102e55760206040516127108152f35b50346102e5576117aa36612394565b9091926117cb601054906001600160701b038083169260701c1690600f5490565b506001600160701b039182169591169384906117e88315156124c0565b861515806118e3575b6117fa9061251b565b600754604051631e45990d60e31b81526001600160a01b03968716600482015290602090829060249082908a165afa9081156102da5785916118c5575b50156118bc5783945b80600954169116146118b3575b506127109283039083821161189f57611870916118699161258b565b938461258b565b938281029281840414901517156116ca576020611897856118918686612449565b9061259e565b604051908152f35b634e487b7160e01b83526011600452602483fd5b9493503861184d565b60055494611840565b6118dd915060203d8111610bea57610bdc8183612329565b38611837565b508515156117f1565b50346102e557806003193601126102e5576020600b54604051908152f35b50346102e557806003193601126102e5576020600a54604051908152f35b50346102e55760403660031901126102e557611942612283565b61194a612299565b6007546001600160a01b039283916119659083163314612600565b16916bffffffffffffffffffffffff60a01b91838360085416176008551680916009541617600955604051809263313ce56760e01b9081835282600460209687935afa9182156102da5784926119c2918791611a1e575b50612670565b600d5560046040518094819382525afa90811561139e576119eb9284926119f1575b5050612670565b600e5580f35b611a109250803d10611a17575b611a088183612329565b810190612657565b38806119e4565b503d6119fe565b611a359150843d8611611a1757611a088183612329565b386119bc565b50346102e557806003193601126102e55760209054604051908152f35b50346102e557806003193601126102e557602060405160128152f35b50346102e557806003193601126102e55760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346102e55760603660031901126102e557611b0b611acc612283565b611ad4612299565b6044359160018060a01b038116808652602095600387526040812033600052875260001960406000205403611b14575b5050612456565b60405160018152f35b80826040925260038852818120336000528852611b3586836000205461243c565b92815260038852203360005286526040600020553880611b04565b50346102e557806003193601126102e5576020600154604051908152f35b50346102e557806003193601126102e5576020600654604051908152f35b50346102e557806003193601126102e5576008546040516001600160a01b039091168152602090f35b50346102e557611bc436612394565b6010546001600160701b03607082901c8116939116919083611be78615156124c0565b83151580611d01575b611bf99061251b565b6009546001600160a01b0392831690831614611cf7575b50600754604051631e45990d60e31b8152928216600484015260209183916024918391165afa9081156102da578591611cd9575b5015611ccc57611c5583859261258b565b926127109283850294808604851490151715611cb85790611c759161243c565b908203918211611ca457611c8d92916118919161258b565b90600182018092116116ca57602082604051908152f35b634e487b7160e01b84526011600452602484fd5b634e487b7160e01b86526011600452602486fd5b611c55836005549261258b565b611cf1915060203d8111610bea57610bdc8183612329565b38611c44565b9293506020611c10565b50841515611bf0565b50346102e55760403660031901126102e557610f72611d27612283565b60243590336123e5565b50346102e557806003193601126102e5576060611d62601054906001600160701b038083169260701c1690600f5490565b9091604051926001600160701b0380921684521660208301526040820152f35b50346102e557806003193601126102e557610fc0604051611da2816122f1565b600b81526a44657853776170204c507360a81b60208201526040519182918261234b565b50346102e55760803660031901126102e557611de061226d565b60643567ffffffffffffffff8111610d2857611e009036906004016122af565b91611e0f6001601154146125be565b60118490556007546040516304ad971560e21b808252600482018790526001600160a01b039492851690602083602481855afa928315610c4557889361224c575b508215612242575b82156121f5575b505015610e1c5760043515801580916121ea575b15610dbc576010546001600160701b038082169660709290921c16906004358711806121d6575b611ea39061251b565b856008541692866009541694848888161415806121ca575b15610d505789916121b8575b6024356121a6575b82612121575b505050604051916020836024816370a0823160e01b948582523060048301525afa928315610c455788936120ec575b5060209060246040518096819382523060048301525afa9283156107c45787936120b8575b50611f3f6004356001600160701b03881661243c565b8211156120b157611f5e610a136004356001600160701b03891661243c565b955b611f756024356001600160701b03841661243c565b8411156120aa57611f946109d76024356001600160701b03851661243c565b935b87158015906120a1575b611fa9906124c0565b881561209957885b84612710810204612710148515171561208557611fd1610a6a828b61258b565b90612710830290838204612710148415171561207157611ff99291610a9c610aa2928a61258b565b612018610ac76001600160701b0386166001600160701b03861661258b565b11610b2f57612026936129ce565b60405193845260208401526004356040840152602435606084015216907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82260803392a3600160115580f35b634e487b7160e01b8c52601160045260248cfd5b634e487b7160e01b8a52601160045260248afd5b600554611fb1565b50841515611fa0565b8793611f96565b8695611f60565b9092506020813d6020116120e4575b816120d460209383612329565b8101031261029257519138611f29565b3d91506120c7565b9092506020813d602011612119575b8161210860209383612329565b810103126102925751916020611f04565b3d91506120fb565b8787163b156107cf5760a483916040519485938492631a64faf160e11b84523360048501526004356024850152602435604485015260806064850152816084850152848401378181018301859052601f01601f1916810103018183898b165af18015610c4557612193575b8781611ed5565b61219f909791976122dd565b953861218c565b6121b36024358888612832565b611ecf565b6121c56004358887612832565b611ec7565b50858888161415611ebb565b506001600160701b03821660243510611e9a565b506024351515611e73565b602091925060246040518094819382523360048301525afa908115610788578691612223575b503880611e5f565b61223c915060203d602011610bea57610bdc8183612329565b3861221b565b3332149250611e58565b61226691935060203d602011610bea57610bdc8183612329565b9138611e50565b604435906001600160a01b038216820361029257565b600435906001600160a01b038216820361029257565b602435906001600160a01b038216820361029257565b9181601f840112156102925782359167ffffffffffffffff8311610292576020838186019501011161029257565b67ffffffffffffffff81116104fb57604052565b6040810190811067ffffffffffffffff8211176104fb57604052565b6080810190811067ffffffffffffffff8211176104fb57604052565b90601f8019910116810190811067ffffffffffffffff8211176104fb57604052565b6020808252825181830181905290939260005b82811061238057505060409293506000838284010152601f8019910116010190565b81810186015184820160400152850161235e565b606090600319011261029257600435906001600160a01b03906024358281168103610292579160443590811681036102925790565b3461029257600036600319011261029257602060405160648152f35b909160207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259160018060a01b03809416938460005260038352604060002095169485600052825280604060002055604051908152a3565b919082039182116116b457565b919082018092116116b457565b90916020600080516020612bda8339815191529160018060a01b03809416936000958587526002845261248d83604089205461243c565b868852600285526040882055169485815260406124ad8382842054612449565b91878152600285522055604051908152a3565b156124c757565b60405162461bcd60e51b815260206004820152602660248201527f44657853776170506169723a20494e53554646494349454e545f494e5055545f604482015265105353d5539560d21b6064820152608490fd5b1561252257565b60405162461bcd60e51b815260206004820152602360248201527f44657853776170506169723a20494e53554646494349454e545f4c495155494460448201526249545960e81b6064820152608490fd5b90816020910312610292575180151581036102925790565b818102929181159184041417156116b457565b81156125a8570490565b634e487b7160e01b600052601260045260246000fd5b156125c557565b60405162461bcd60e51b815260206004820152601360248201527211195e14ddd85c14185a5c8e881313d0d2d151606a1b6044820152606490fd5b1561260757565b60405162461bcd60e51b815260206004820152602260248201527f44657853776170506169723a2043616c6c6572206973206e6f7420666163746f604482015261727960f01b6064820152608490fd5b90816020910312610292575160ff811681036102925790565b60ff16604d81116116b457600a0a90565b600080516020612bda83398151915260206000926126a185600154612449565b60015560018060a01b031693848452600282526126c2816040862054612449565b858552600283526040852055604051908152a3565b600754604051622fcfcb60e31b8152919392906001600160a01b03906020908490600490829085165afa928315612826576000936127e8575b508216151590816127dc575b600c54919485156127cb5782612733575b50505050565b61156961275091612756936001600160701b03809116911661258b565b91612b2b565b808211612764575b8061272d565b612774600154610aa2838561243c565b91612782600654809461258b565b9183606403606481116116b4576127af946127a36127a9926118919561258b565b9261258b565b90612449565b806127bb575b8061275e565b6127c491612681565b38806127b5565b505090506127d557565b6000600c55565b6006541515915061271c565b6020939193813d821161281e575b8161280360209383612329565b810103126107cf57519083821682036102e557509138612710565b3d91506127f6565b6040513d6000823e3d90fd5b9060405192612840846122f1565b601984527f7472616e7366657228616464726573732c75696e74323536290000000000000060209485015260405163a9059cbb60e01b8186019081526001600160a01b0390931660248201526044808201929092529081526128a18161230d565b600092839283809351925af1903d1561297c573d67ffffffffffffffff811161296857604051906128db601f8201601f1916860183612329565b81528091843d92013e5b81612938575b50156128f45750565b6064906040519062461bcd60e51b82526004820152601c60248201527f44657853776170506169723a205452414e534645525f4641494c4544000000006044820152fd5b80518015925083908315612950575b505050386128eb565b6129609350820181019101612573565b388281612947565b634e487b7160e01b82526041600452602482fd5b5060606128e5565b61271060016002815b8082116129a5575050816000190481116116b4570290565b9092806000190481116116b4578184166129c5575b800292811c9061298d565b809202916129ba565b91926001600160701b03908184111580612b21575b15612ae457816040947f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad19663ffffffff421693612a22600f548661243c565b80151580612ad9575b80612ace575b612a75575b505050169283601054916001600160701b0360701b9060701b169163ffffffff60e01b1617179081601055600f55835192835260701c166020820152a1565b612ac392612abb926001600160e01b0391612aa59190612aa090612ab3612aab878787858789612b85565b612bbb565b1661258b565b600a54612449565b600a55612b85565b600b54612449565b600b55388080612a36565b508482161515612a31565b508483161515612a2b565b60405162461bcd60e51b815260206004820152601560248201527444657853776170506169723a204f564552464c4f5760581b6044820152606490fd5b50818311156129e3565b9060006003831115612b7857508160019080821c8281018091116116b45791905b848310612b5857505050565b90919350612b6f84612b6a818461259e565b612449565b821c9190612b4c565b91612b7f57565b60019150565b6dffffffffffffffffffffffffffff60701b607082901b16906001600160701b0316808204600160701b14901517156116b45790565b906001600160701b03169081156125a8576001600160e01b0316049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209f1fdca42a8725a51d5b2cd836e4bef00e01923ae8a46129dfa01bcae8a9db1a64736f6c63430008130033

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