ETH Price: $2,630.72 (-5.26%)

Contract

0x7D3caD2EF18689625231Fc793Ac11c1676FdeDCC
 
Transaction Hash
Method
Block
From
To
Make Liquidity D...217274672025-01-29 3:21:5910 days ago1738120919IN
0x7D3caD2E...676FdeDCC
0 ETH0.000515541.86085996
Make Liquidity217062122025-01-26 4:09:4713 days ago1737864587IN
0x7D3caD2E...676FdeDCC
0.001 ETH0.000948763.79012094
Make Liquidity217061932025-01-26 4:05:5913 days ago1737864359IN
0x7D3caD2E...676FdeDCC
0.003 ETH0.000900153.80681104
Make Liquidity217028652025-01-25 16:58:3513 days ago1737824315IN
0x7D3caD2E...676FdeDCC
0.000011 ETH0.002550610.52915491
Make Liquidity213818062024-12-11 20:59:4758 days ago1733950787IN
0x7D3caD2E...676FdeDCC
0.001 ETH0.0075218428.54232008
Make Liquidity D...213574572024-12-08 11:25:1162 days ago1733657111IN
0x7D3caD2E...676FdeDCC
0 ETH0.002172498.03070108
Make Liquidity D...213546552024-12-08 2:02:1162 days ago1733623331IN
0x7D3caD2E...676FdeDCC
0 ETH0.0026184410.49978504
Make Liquidity209832612024-10-17 5:41:35114 days ago1729143695IN
0x7D3caD2E...676FdeDCC
0.014 ETH0.002213588.09697887
Make Liquidity D...209190172024-10-08 6:18:47123 days ago1728368327IN
0x7D3caD2E...676FdeDCC
0 ETH0.0030705312.2
Make Liquidity D...208603592024-09-30 2:04:35131 days ago1727661875IN
0x7D3caD2E...676FdeDCC
0 ETH0.001761277
Make Liquidity D...208595812024-09-29 23:28:11131 days ago1727652491IN
0x7D3caD2E...676FdeDCC
0 ETH0.001684916.69555385
Make Liquidity D...208595662024-09-29 23:25:11131 days ago1727652311IN
0x7D3caD2E...676FdeDCC
0 ETH0.001681846.68334802
Make Liquidity D...208595512024-09-29 23:22:11131 days ago1727652131IN
0x7D3caD2E...676FdeDCC
0 ETH0.001716726.15104721
Make Liquidity D...208595392024-09-29 23:19:47131 days ago1727651987IN
0x7D3caD2E...676FdeDCC
0 ETH0.001696795.87242461
Make Liquidity D...208595242024-09-29 23:16:47131 days ago1727651807IN
0x7D3caD2E...676FdeDCC
0 ETH0.002069746.46055248
Make Liquidity D...208341802024-09-26 10:26:11135 days ago1727346371IN
0x7D3caD2E...676FdeDCC
0 ETH0.000430313.68883183
Make Liquidity D...208341762024-09-26 10:25:23135 days ago1727346323IN
0x7D3caD2E...676FdeDCC
0 ETH0.0034825713.83914552
Make Liquidity D...207825442024-09-19 5:27:11142 days ago1726723631IN
0x7D3caD2E...676FdeDCC
0 ETH0.000972449.92830758
Make Liquidity D...207756662024-09-18 6:23:11143 days ago1726640591IN
0x7D3caD2E...676FdeDCC
0 ETH0.001158284.15140907
Make Liquidity D...207601512024-09-16 2:17:47145 days ago1726453067IN
0x7D3caD2E...676FdeDCC
0 ETH0.00055622.03839565
Make Liquidity207374792024-09-12 22:21:47148 days ago1726179707IN
0x7D3caD2E...676FdeDCC
0.007913 ETH0.001279715.11645742
Make Liquidity D...207049702024-09-08 9:22:47153 days ago1725787367IN
0x7D3caD2E...676FdeDCC
0 ETH0.000225271.86579531
Make Liquidity D...207049642024-09-08 9:21:35153 days ago1725787295IN
0x7D3caD2E...676FdeDCC
0 ETH0.000153331.27
Make Liquidity D...207038782024-09-08 5:43:47153 days ago1725774227IN
0x7D3caD2E...676FdeDCC
0 ETH0.000106620.88769226
Make Liquidity D...207038742024-09-08 5:42:59153 days ago1725774179IN
0x7D3caD2E...676FdeDCC
0 ETH0.000106620.88769226
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
217062122025-01-26 4:09:4713 days ago1737864587
0x7D3caD2E...676FdeDCC
0.001 ETH
217061932025-01-26 4:05:5913 days ago1737864359
0x7D3caD2E...676FdeDCC
0.003 ETH
217028652025-01-25 16:58:3513 days ago1737824315
0x7D3caD2E...676FdeDCC
0.000011 ETH
213818062024-12-11 20:59:4758 days ago1733950787
0x7D3caD2E...676FdeDCC
0.001 ETH
209832612024-10-17 5:41:35114 days ago1729143695
0x7D3caD2E...676FdeDCC
0.014 ETH
207374792024-09-12 22:21:47148 days ago1726179707
0x7D3caD2E...676FdeDCC
0.007913 ETH
207038472024-09-08 5:37:35153 days ago1725773855
0x7D3caD2E...676FdeDCC
0.000764 ETH
207038372024-09-08 5:35:35153 days ago1725773735
0x7D3caD2E...676FdeDCC
0.000293 ETH
206942072024-09-06 21:22:11154 days ago1725657731
0x7D3caD2E...676FdeDCC
0.01 ETH
206933012024-09-06 18:20:11154 days ago1725646811
0x7D3caD2E...676FdeDCC
0.005 ETH
206743422024-09-04 2:50:47157 days ago1725418247
0x7D3caD2E...676FdeDCC
0.0005 ETH
206542092024-09-01 7:24:23160 days ago1725175463
0x7D3caD2E...676FdeDCC
0.008 ETH
206503492024-08-31 18:29:35160 days ago1725128975
0x7D3caD2E...676FdeDCC
0.04 ETH
205679882024-08-20 6:15:59172 days ago1724134559
0x7D3caD2E...676FdeDCC
0.001 ETH
205003922024-08-10 19:45:47181 days ago1723319147
0x7D3caD2E...676FdeDCC
0.01 ETH
205003412024-08-10 19:35:35181 days ago1723318535
0x7D3caD2E...676FdeDCC
0.0001 ETH
204366352024-08-01 22:18:59190 days ago1722550739
0x7D3caD2E...676FdeDCC
0.020534 ETH
203962082024-07-27 6:51:47196 days ago1722063107
0x7D3caD2E...676FdeDCC
0.01532 ETH
203909602024-07-26 13:15:47197 days ago1721999747
0x7D3caD2E...676FdeDCC
0.003 ETH
203475122024-07-20 11:42:11203 days ago1721475731
0x7D3caD2E...676FdeDCC
0.0001 ETH
203048832024-07-14 12:56:35209 days ago1720961795
0x7D3caD2E...676FdeDCC
0.020449 ETH
203001532024-07-13 21:04:59209 days ago1720904699
0x7D3caD2E...676FdeDCC
0.004186 ETH
202858902024-07-11 21:15:23211 days ago1720732523
0x7D3caD2E...676FdeDCC
0.02347 ETH
202716062024-07-09 21:25:47213 days ago1720560347
0x7D3caD2E...676FdeDCC
0.009909 ETH
202713832024-07-09 20:40:23213 days ago1720557623
0x7D3caD2E...676FdeDCC
0.010312 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LiquidityMaker

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 999999 runs

Other Settings:
cancun EvmVersion
File 1 of 9 : LiquidityMaker.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

import "./IWETH.sol";
import "./ISwapsPair.sol";
import "./ISwapsRouter.sol";
import "./ISwapsFactory.sol";
import "./LiquidityHelper.sol";

contract LiquidityMaker is LiquidityHelper {

    address immutable WETH_ADDRESS;
    address immutable ROUTER_ADDRESS;

    IWETH public immutable WETH;
    ISwapsRouter public immutable ROUTER;
    ISwapsFactory public immutable FACTORY;

    event SwapResults(
        address tokenIn,
        address tokenOut,
        uint256 amountIn,
        uint256 amountOut
    );

    event LiquidityAdded(
        uint256 tokenAmountA,
        uint256 tokenAmountB,
        uint256 tokenAmountLP,
        address indexed tokenA,
        address indexed tokenB,
        address indexed addedTo
    );

    event CleanUp(
        uint256 tokenAmount,
        ISwapsERC20 indexed tokenAddress
    );

    constructor(
        ISwapsRouter _router,
        ISwapsFactory _factory
    ) {
        ROUTER_ADDRESS = address(
            _router
        );

        ROUTER = _router;
        FACTORY = _factory;

        WETH_ADDRESS = ROUTER.WETH();

        WETH = IWETH(
            WETH_ADDRESS
        );
    }

    /**
     * @dev
     * Optimal one-sided supply using ETH
     * 1. Swaps optimal amount from ETH to ERC20
     * 2. Adds liquidity for ETH and Token pair
    */
    function makeLiquidity(
        address _tokenAddress,
        uint256 _expectedTokenAmount,
        uint256 _minimumLiquidityEther,
        uint256 _minimumLiquidityToken
    )
        external
        payable
        returns (uint256)
    {
        _wrapEther(
            msg.value
        );

        return _makeLiquidity(
            WETH_ADDRESS,
            _tokenAddress,
            msg.value,
            _expectedTokenAmount,
            _minimumLiquidityEther,
            _minimumLiquidityToken,
            msg.sender
        );
    }

    /**
     * @dev
     * Optimal one-sided supply using ERC20
     * 1. Swaps optimal amount from ERC20-A to ERC20-B
     * 2. Adds liquidity for _tokenA and _tokenB pair
    */
    function makeLiquidityDual(
        address _tokenA,
        address _tokenB,
        uint256 _initialAmountA,
        uint256 _expectedAmountB,
        uint256 _minimumLiquidityA,
        uint256 _minimumLiquidityB
    )
        external
    {
        _safeTransferFrom(
            _tokenA,
            msg.sender,
            address(this),
            _initialAmountA
        );

        _makeLiquidity(
            _tokenA,
            _tokenB,
            _initialAmountA,
            _expectedAmountB,
            _minimumLiquidityA,
            _minimumLiquidityB,
            msg.sender
        );
    }

    function _makeLiquidity(
        address _tokenA,
        address _tokenB,
        uint256 _initialAmountA,
        uint256 _expectedAmountB,
        uint256 _minimumLiquidityA,
        uint256 _minimumLiquidityB,
        address _beneficiaryAddress
    )
        internal
        returns (uint256)
    {
        ISwapsPair pair = _getPair(
            _tokenA,
            _tokenB
        );

        (
            uint256 reserve0,
            uint256 reserve1,
        ) = pair.getReserves();

        uint256 swapAmount = pair.token0() == _tokenA
            ? getSwapAmount(reserve0, _initialAmountA)
            : getSwapAmount(reserve1, _initialAmountA);

        uint256[] memory swapResults = _swapTokens(
            _tokenA,
            _tokenB,
            swapAmount,
            _expectedAmountB
        );

        emit SwapResults(
            _tokenA,
            _tokenB,
            swapResults[0],
            swapResults[1]
        );

        _addLiquidity(
            _tokenA,
            _tokenB,
            swapResults[0],
            swapResults[1],
            _minimumLiquidityA,
            _minimumLiquidityB,
            _beneficiaryAddress
        );

        return swapAmount;
    }

    /**
     * @dev
     * Uses swapExactTokensForTokens to split provided value
     * 1. Swaps optimal amount from _tokenIn to _tokenOut
     * return swap amounts as a result (input and ouput)
    */
    function _swapTokens(
        address _tokenIn,
        address _tokenOut,
        uint256 _swapAmountIn,
        uint256 _expectedAmountOut
    )
        private
        returns (uint256[] memory)
    {
        if (ISwapsERC20(_tokenIn).allowance(address(this), ROUTER_ADDRESS) == 0) {
            _forceApprove(
                IERC20(_tokenIn),
                ROUTER_ADDRESS,
                MAX_VALUE
            );
        }

        return ROUTER.swapExactTokensForTokens(
            _swapAmountIn,
            _expectedAmountOut,
            _makePath(
                _tokenIn,
                _tokenOut
            ),
            address(this),
            block.timestamp
        );
    }

    /**
     * @dev
     * Adds liquidity for _tokenA and _tokenB pair
     * can send LP tokens to _beneficiary address
    */
    function _addLiquidity(
        address _tokenA,
        address _tokenB,
        uint256 _amountA,
        uint256 _amountB,
        uint256 _minTokenA,
        uint256 _minTokenB,
        address _beneficiary
    )
        private
    {
        _forceApprove(
            IERC20(_tokenB),
            ROUTER_ADDRESS,
            _amountB
        );

        (
            uint256 tokenAmountA,
            uint256 tokenAmountB,
            uint256 tokenAmountLP
        ) = ROUTER.addLiquidity(
            _tokenA,
            _tokenB,
            _amountA,
            _amountB,
            _minTokenA,
            _minTokenB,
            _beneficiary,
            block.timestamp
        );

        emit LiquidityAdded(
            tokenAmountA,
            tokenAmountB,
            tokenAmountLP,
            _tokenA,
            _tokenB,
            _beneficiary
        );
    }

    /**
     * @dev
     * Read address of the pair
     * by calling FACTORY contract
    */
    function _getPair(
        address _tokenA,
        address _tokenB
    )
        private
        view
        returns (ISwapsPair)
    {
        return ISwapsPair(
            FACTORY.getPair(
                _tokenA,
                _tokenB
            )
        );
    }

    /**
     * @dev
     * Allows to wrap Ether
     * by calling WETH contract
    */
    function _wrapEther(
        uint256 _amount
    )
        private
    {
        WETH.deposit{
            value: _amount
        }();
    }

    /**
     * @dev
     * Allows to cleanup any tokens stuck
     * in the contract as leftover dust or
     * if accidentally sent to the contract
    */
    function cleanUp(
        ISwapsERC20 _token
    )
        external
    {
        uint256 balance = _token.balanceOf(
            address(this)
        );

        _token.transfer(
            FACTORY.feeTo(),
            balance
        );

        emit CleanUp(
            balance,
            _token
        );
    }
}

File 2 of 9 : IWETH.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface IWETH {

    function deposit()
        external
        payable;

    function transfer(
        address _to,
        uint256 _value
    )
        external
        returns (bool);

    function withdraw(
        uint256
    )
        external;
}

File 3 of 9 : ISwapsPair.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

import "./ISwapsERC20.sol";

interface ISwapsPair is ISwapsERC20 {

    function MINIMUM_LIQUIDITY()
        external
        pure
        returns (uint256);

    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 (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 skim()
        external;

    function initialize(
        address,
        address
    )
        external;
}

File 4 of 9 : ISwapsRouter.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface ISwapsRouter {

    function WETH()
        external
        returns (address);

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

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB
        );

    function getReserves(
        address factory,
        address tokenA,
        address tokenB
    )
        external
        view
        returns (
            uint112 reserveA,
            uint112 reserveB,
            uint32 blockTimestampLast
        );

    function FACTORY()
        external
        view
        returns (address);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    )
        external
        pure
        returns (uint256 amountB);

    function pairFor(
        address factory,
        address tokenA,
        address tokenB
    )
        external
        pure
        returns (address);
}

File 5 of 9 : ISwapsFactory.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface ISwapsFactory {

    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(uint256)
        external
        view
        returns (address pair);

    function allPairsLength()
        external
        view
        returns (uint256);

    function createPair(
        address _tokenA,
        address _tokenB
    )
        external
        returns (address pair);

    function setFeeTo(
        address
    )
        external;

    function setFeeToSetter(
        address
    )
        external;

    function cloneTarget()
        external
        view
        returns (address target);
}

File 6 of 9 : LiquidityHelper.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

import "./IERC20.sol";
import "./Errors.sol";

contract LiquidityHelper {

    uint256 constant MAX_VALUE = type(uint256).max;
    uint256 constant ZERO_VALUE = 0;

    /**
     * @dev
     * Prepares path for the swap
     */
    function _makePath(
        address _tokenIn,
        address _tokenOut
    )
        internal
        pure
        returns (address[] memory path)
    {
        path = new address[](2);

        path[0] = _tokenIn;
        path[1] = _tokenOut;

        return path;
    }

    /**
     * @dev
     * Allows to execute transferFrom for a token
     */
    function _safeTransferFrom(
        address _token,
        address _from,
        address _to,
        uint256 _value
    )
        internal
    {
        IERC20 token = IERC20(_token);

        _callOptionalReturn(
            _token,
            abi.encodeWithSelector(
                token.transferFrom.selector,
                _from,
                _to,
                _value
            )
        );
    }

    function _callOptionalReturn(
        address _token,
        bytes memory _data
    )
        private
    {
        (
            bool success,
            bytes memory returndata
        ) = _token.call(_data);

        require(
            success,
            "LiquidityHelper: CALL_FAILED"
        );

        if (returndata.length > 0) {
            require(
                abi.decode(
                    returndata,
                    (bool)
                ),
                "LiquidityHelper: OPERATION_FAILED"
            );
        }
    }

    /**
     * @dev
     * s = optimal swap amount
     * r = amount of reserve for token a
     * a = amount of token a the user currently has (not added to reserve yet)
     * f = swap fee percent
     * s = (sqrt(((2 - f)r)^2 + 4(1 - f)ar) - (2 - f)r) / (2(1 - f))
    */
    function getSwapAmount(
        uint256 _r,
        uint256 _a
    )
        public
        pure
        returns (uint256)
    {
        return (
            _sqrt(
                _r * (_r * 3988009 + _a * 3988000)
            ) - _r * 1997
        ) / 1994;
    }

    /**
     * @dev
     * Calculates square root of the _y number
    */
    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;
        }
    }

    function _forceApprove(
        IERC20 _token,
        address _spender,
        uint256 _value
    )
        internal
    {
        bytes memory approvalCall = abi.encodeCall(
            _token.approve,
            (
                _spender,
                _value
            )
        );

        if (!_callOptionalReturnBool(_token, approvalCall)) {

            bytes memory zeroApprove = abi.encodeCall(
                _token.approve, (
                    _spender,
                    ZERO_VALUE
                )
            );

            _callOptionalReturn(
                _token,
                zeroApprove
            );

            _callOptionalReturn(
                _token,
                approvalCall
            );
        }
    }

    function _callOptionalReturn(
        IERC20 _token,
        bytes memory _data
    )
        private
    {
        bytes memory returndata = _functionCall(
            address(_token),
            _data
        );

        if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
            revert SafeERC20FailedOperation(
                address(_token)
            );
        }
    }

    function _callOptionalReturnBool(
        IERC20 _token,
        bytes memory _data
    )
        private
        returns (bool)
    {
        (
            bool success,
            bytes memory returndata
        ) = address(_token).call(_data);

        return success
            && (returndata.length == 0 || abi.decode(returndata, (bool)))
            && address(_token).code.length > 0;
    }

    function _functionCall(
        address _target,
        bytes memory _data
    )
        internal
        returns (bytes memory)
    {
        return _functionCallWithValue(
            _target,
            _data,
            ZERO_VALUE
        );
    }

    function _functionCallWithValue(
        address _target,
        bytes memory _data,
        uint256 _value
    )
        internal
        returns (bytes memory)
    {
        if (address(this).balance < _value) {
            revert InsufficientBalance(
                address(this).balance,
                _value
            );
        }

        (
            bool success,
            bytes memory returndata
        ) = _target.call{
            value: _value
        }(_data);

        return _verifyCallResultFromTarget(
            _target,
            success,
            returndata
        );
    }

    function _verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    )
        internal
        view
        returns (bytes memory)
    {
        if (!success) {
            _revert(
                returndata
            );
        } else {
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(
                    target
                );
            }
            return returndata;
        }
    }

    function _revert(
        bytes memory _returndata
    )
        private
        pure
    {
        if (_returndata.length > 0) {
            assembly {
                let returndata_size := mload(_returndata)
                revert(add(32, _returndata), returndata_size)
            }
        } else {
            revert FailedCall();
        }
    }
}

File 7 of 9 : ISwapsERC20.sol
// SPDX-License-Identifier: BCOM

pragma solidity =0.8.25;

interface ISwapsERC20 {

    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 (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
        pure
        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 8 of 9 : IERC20.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface IERC20 {

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

    function transfer(
        address _to,
        uint256 _value
    )
        external
        returns (bool);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    )
        external
        returns (bool);

    function approve(
        address _spender,
        uint256 _value
    )
        external
        returns (bool);
}

File 9 of 9 : Errors.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

error FailedCall();

error AddressEmptyCode(
    address target
);

error SafeERC20FailedOperation(
    address token
);

error InsufficientBalance(
    uint256 balance,
    uint256 value
);

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract ISwapsRouter","name":"_router","type":"address"},{"internalType":"contract ISwapsFactory","name":"_factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":true,"internalType":"contract ISwapsERC20","name":"tokenAddress","type":"address"}],"name":"CleanUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmountA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmountB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmountLP","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenA","type":"address"},{"indexed":true,"internalType":"address","name":"tokenB","type":"address"},{"indexed":true,"internalType":"address","name":"addedTo","type":"address"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"SwapResults","type":"event"},{"inputs":[],"name":"FACTORY","outputs":[{"internalType":"contract ISwapsFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROUTER","outputs":[{"internalType":"contract ISwapsRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISwapsERC20","name":"_token","type":"address"}],"name":"cleanUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_r","type":"uint256"},{"internalType":"uint256","name":"_a","type":"uint256"}],"name":"getSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_expectedTokenAmount","type":"uint256"},{"internalType":"uint256","name":"_minimumLiquidityEther","type":"uint256"},{"internalType":"uint256","name":"_minimumLiquidityToken","type":"uint256"}],"name":"makeLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"uint256","name":"_initialAmountA","type":"uint256"},{"internalType":"uint256","name":"_expectedAmountB","type":"uint256"},{"internalType":"uint256","name":"_minimumLiquidityA","type":"uint256"},{"internalType":"uint256","name":"_minimumLiquidityB","type":"uint256"}],"name":"makeLiquidityDual","outputs":[],"stateMutability":"nonpayable","type":"function"}]

610120604052348015610010575f80fd5b506040516118ed3803806118ed83398101604081905261002f916100d9565b6001600160a01b0380831660a081905260e081905290821661010052604080516315ab88c960e31b8152905163ad5c46489160048082019260209290919082900301815f875af1158015610085573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a99190610111565b6001600160a01b0316608081905260c052506101339050565b6001600160a01b03811681146100d6575f80fd5b50565b5f80604083850312156100ea575f80fd5b82516100f5816100c2565b6020840151909250610106816100c2565b809150509250929050565b5f60208284031215610121575f80fd5b815161012c816100c2565b9392505050565b60805160a05160c05160e0516101005161174d6101a05f395f818160c3015281816102870152610a5c01525f818161012001528181610bd20152610d4201525f8181610180015261080c01525f8181610b0a01528181610b8b0152610ca001525f61046c015261174d5ff3fe60806040526004361061006e575f3560e01c806332fe7b261161004c57806332fe7b261461010f578063368519f314610142578063ad5c46481461016f578063f5b1655f146101a2575f80fd5b80631a8e57a1146100725780632d36ad42146100935780632dd31000146100b2575b5f80fd5b34801561007d575f80fd5b5061009161008c3660046112f6565b6101b5565b005b34801561009e575f80fd5b506100916100ad36600461134b565b6101d9565b3480156100bd575f80fd5b506100e57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561011a575f80fd5b506100e57f000000000000000000000000000000000000000000000000000000000000000081565b34801561014d575f80fd5b5061016161015c366004611366565b6103fa565b604051908152602001610106565b34801561017a575f80fd5b506100e57f000000000000000000000000000000000000000000000000000000000000000081565b6101616101b0366004611386565b61045d565b6101c18633308761049f565b6101d08686868686863361053d565b50505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610243573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026791906113be565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031291906113d5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018490526044016020604051808303815f875af1158015610381573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a591906113f0565b508173ffffffffffffffffffffffffffffffffffffffff167f4c12b37cb51b51f87a2d628b2572d0b6f52f19d9a647e81904fb041094ca8b22826040516103ee91815260200190565b60405180910390a25050565b5f6107ca61040a846107cd61143c565b61044061041a85623cda2061143c565b61042787623cda2961143c565b6104319190611453565b61043b908761143c565b61079c565b61044a9190611466565b6104549190611479565b90505b92915050565b5f6104673461080a565b6104967f000000000000000000000000000000000000000000000000000000000000000086348787873361053d565b95945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052849061053690829061088a565b5050505050565b5f806105498989610a0d565b90505f808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610596573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ba91906114ce565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691505f8b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610640573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066491906113d5565b73ffffffffffffffffffffffffffffffffffffffff161461068e57610689828b6103fa565b610698565b610698838b6103fa565b90505f6106a78d8d848d610ac7565b90507fb38ff273801509f7e755c30acfb5062f9494702bfe3436d5845e7f4aaa4c2b838d8d835f815181106106de576106de61151a565b6020026020010151846001815181106106f9576106f961151a565b6020026020010151604051610742949392919073ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152606081019190915260800190565b60405180910390a161078c8d8d835f815181106107615761076161151a565b60200260200101518460018151811061077c5761077c61151a565b60200260200101518d8d8d610c9a565b509b9a5050505050505050505050565b5f60038211156107fb5750805f6107b4600283611479565b6107bf906001611453565b90505b818110156107f5579050806002816107da8186611479565b6107e49190611453565b6107ee9190611479565b90506107c2565b50919050565b8115610805575060015b919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015610870575f80fd5b505af1158015610882573d5f803e3d5ffd5b505050505050565b5f808373ffffffffffffffffffffffffffffffffffffffff16836040516108b19190611547565b5f604051808303815f865af19150503d805f81146108ea576040519150601f19603f3d011682016040523d82523d5f602084013e6108ef565b606091505b509150915081610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c697175696469747948656c7065723a2043414c4c5f4641494c45440000000060448201526064015b60405180910390fd5b805115610a07578080602001905181019061097b91906113f0565b610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4c697175696469747948656c7065723a204f5045524154494f4e5f4641494c4560448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401610957565b50505050565b6040517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063e6a4390590604401602060405180830381865afa158015610aa3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045491906113d5565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301526060919086169063dd62ed3e90604401602060405180830381865afa158015610b5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7f91906113be565b5f03610bd057610bd0857f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610e52565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338ed17398484610c188989610f7a565b30426040518663ffffffff1660e01b8152600401610c3a95949392919061155d565b5f604051808303815f875af1158015610c55573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104969190810190611615565b610cc5867f000000000000000000000000000000000000000000000000000000000000000086610e52565b6040517fe8e3370000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152878116602483015260448201879052606482018690526084820185905260a4820184905282811660c48301524260e48301525f91829182917f00000000000000000000000000000000000000000000000000000000000000009091169063e8e3370090610104016060604051808303815f875af1158015610d8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daf91906116ec565b9250925092508373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fa844a53d987de033c0f217dddaf976083864fbcb56935c1bd11dbbad0ad61b33868686604051610e3e939291909283526020830191909152604082015260600190565b60405180910390a450505050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610ede848261103b565b610a07576040805173ffffffffffffffffffffffffffffffffffffffff851660248201525f6044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610f7085826110f2565b61053685836110f2565b604080516002808252606080830184529260208301908036833701905050905082815f81518110610fad57610fad61151a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110610ffb57610ffb61151a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b5f805f8473ffffffffffffffffffffffffffffffffffffffff16846040516110639190611547565b5f604051808303815f865af19150503d805f811461109c576040519150601f19603f3d011682016040523d82523d5f602084013e6110a1565b606091505b50915091508180156110cb5750805115806110cb5750808060200190518101906110cb91906113f0565b801561049657505050505073ffffffffffffffffffffffffffffffffffffffff163b151590565b5f6110fd8383611175565b905080515f1415801561112157508080602001905181019061111f91906113f0565b155b15611170576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610957565b505050565b606061045483835f845f808573ffffffffffffffffffffffffffffffffffffffff1684866040516111a69190611547565b5f6040518083038185875af1925050503d805f81146111e0576040519150601f19603f3d011682016040523d82523d5f602084013e6111e5565b606091505b50915091506111f5868383611201565b925050505b9392505050565b6060826112165761121182611290565b6111fa565b815115801561123a575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611289576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610957565b50806111fa565b8051156112a05780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff811681146112d2575f80fd5b5f805f805f8060c0878903121561130b575f80fd5b8635611316816112d5565b95506020870135611326816112d5565b95989597505050506040840135936060810135936080820135935060a0909101359150565b5f6020828403121561135b575f80fd5b81356111fa816112d5565b5f8060408385031215611377575f80fd5b50508035926020909101359150565b5f805f8060808587031215611399575f80fd5b84356113a4816112d5565b966020860135965060408601359560600135945092505050565b5f602082840312156113ce575f80fd5b5051919050565b5f602082840312156113e5575f80fd5b81516111fa816112d5565b5f60208284031215611400575f80fd5b815180151581146111fa575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176104575761045761140f565b808201808211156104575761045761140f565b818103818111156104575761045761140f565b5f826114ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80516dffffffffffffffffffffffffffff81168114610805575f80fd5b5f805f606084860312156114e0575f80fd5b6114e9846114b1565b92506114f7602085016114b1565b9150604084015163ffffffff8116811461150f575f80fd5b809150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156115ba57845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611588565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020808385031215611626575f80fd5b825167ffffffffffffffff8082111561163d575f80fd5b818501915085601f830112611650575f80fd5b815181811115611662576116626115e8565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156116a5576116a56115e8565b6040529182528482019250838101850191888311156116c2575f80fd5b938501935b828510156116e0578451845293850193928501926116c7565b98975050505050505050565b5f805f606084860312156116fe575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f5190d54926619af4a7b9444ae535711c01aa23d876b9e276ba0c57ad87099a164736f6c63430008190033000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f2718671000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e2

Deployed Bytecode

0x60806040526004361061006e575f3560e01c806332fe7b261161004c57806332fe7b261461010f578063368519f314610142578063ad5c46481461016f578063f5b1655f146101a2575f80fd5b80631a8e57a1146100725780632d36ad42146100935780632dd31000146100b2575b5f80fd5b34801561007d575f80fd5b5061009161008c3660046112f6565b6101b5565b005b34801561009e575f80fd5b506100916100ad36600461134b565b6101d9565b3480156100bd575f80fd5b506100e57f000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e281565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561011a575f80fd5b506100e57f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f271867181565b34801561014d575f80fd5b5061016161015c366004611366565b6103fa565b604051908152602001610106565b34801561017a575f80fd5b506100e57f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6101616101b0366004611386565b61045d565b6101c18633308761049f565b6101d08686868686863361053d565b50505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610243573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026791906113be565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7f000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e273ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031291906113d5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018490526044016020604051808303815f875af1158015610381573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a591906113f0565b508173ffffffffffffffffffffffffffffffffffffffff167f4c12b37cb51b51f87a2d628b2572d0b6f52f19d9a647e81904fb041094ca8b22826040516103ee91815260200190565b60405180910390a25050565b5f6107ca61040a846107cd61143c565b61044061041a85623cda2061143c565b61042787623cda2961143c565b6104319190611453565b61043b908761143c565b61079c565b61044a9190611466565b6104549190611479565b90505b92915050565b5f6104673461080a565b6104967f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc286348787873361053d565b95945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052849061053690829061088a565b5050505050565b5f806105498989610a0d565b90505f808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610596573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ba91906114ce565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691505f8b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610640573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066491906113d5565b73ffffffffffffffffffffffffffffffffffffffff161461068e57610689828b6103fa565b610698565b610698838b6103fa565b90505f6106a78d8d848d610ac7565b90507fb38ff273801509f7e755c30acfb5062f9494702bfe3436d5845e7f4aaa4c2b838d8d835f815181106106de576106de61151a565b6020026020010151846001815181106106f9576106f961151a565b6020026020010151604051610742949392919073ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152606081019190915260800190565b60405180910390a161078c8d8d835f815181106107615761076161151a565b60200260200101518460018151811061077c5761077c61151a565b60200260200101518d8d8d610c9a565b509b9a5050505050505050505050565b5f60038211156107fb5750805f6107b4600283611479565b6107bf906001611453565b90505b818110156107f5579050806002816107da8186611479565b6107e49190611453565b6107ee9190611479565b90506107c2565b50919050565b8115610805575060015b919050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015610870575f80fd5b505af1158015610882573d5f803e3d5ffd5b505050505050565b5f808373ffffffffffffffffffffffffffffffffffffffff16836040516108b19190611547565b5f604051808303815f865af19150503d805f81146108ea576040519150601f19603f3d011682016040523d82523d5f602084013e6108ef565b606091505b509150915081610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c697175696469747948656c7065723a2043414c4c5f4641494c45440000000060448201526064015b60405180910390fd5b805115610a07578080602001905181019061097b91906113f0565b610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4c697175696469747948656c7065723a204f5045524154494f4e5f4641494c4560448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401610957565b50505050565b6040517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f917f000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e29091169063e6a4390590604401602060405180830381865afa158015610aa3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045491906113d5565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f2718671811660248301526060919086169063dd62ed3e90604401602060405180830381865afa158015610b5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7f91906113be565b5f03610bd057610bd0857f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f27186717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610e52565b7f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f271867173ffffffffffffffffffffffffffffffffffffffff166338ed17398484610c188989610f7a565b30426040518663ffffffff1660e01b8152600401610c3a95949392919061155d565b5f604051808303815f875af1158015610c55573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104969190810190611615565b610cc5867f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f271867186610e52565b6040517fe8e3370000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152878116602483015260448201879052606482018690526084820185905260a4820184905282811660c48301524260e48301525f91829182917f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f27186719091169063e8e3370090610104016060604051808303815f875af1158015610d8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daf91906116ec565b9250925092508373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fa844a53d987de033c0f217dddaf976083864fbcb56935c1bd11dbbad0ad61b33868686604051610e3e939291909283526020830191909152604082015260600190565b60405180910390a450505050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610ede848261103b565b610a07576040805173ffffffffffffffffffffffffffffffffffffffff851660248201525f6044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610f7085826110f2565b61053685836110f2565b604080516002808252606080830184529260208301908036833701905050905082815f81518110610fad57610fad61151a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110610ffb57610ffb61151a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b5f805f8473ffffffffffffffffffffffffffffffffffffffff16846040516110639190611547565b5f604051808303815f865af19150503d805f811461109c576040519150601f19603f3d011682016040523d82523d5f602084013e6110a1565b606091505b50915091508180156110cb5750805115806110cb5750808060200190518101906110cb91906113f0565b801561049657505050505073ffffffffffffffffffffffffffffffffffffffff163b151590565b5f6110fd8383611175565b905080515f1415801561112157508080602001905181019061111f91906113f0565b155b15611170576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610957565b505050565b606061045483835f845f808573ffffffffffffffffffffffffffffffffffffffff1684866040516111a69190611547565b5f6040518083038185875af1925050503d805f81146111e0576040519150601f19603f3d011682016040523d82523d5f602084013e6111e5565b606091505b50915091506111f5868383611201565b925050505b9392505050565b6060826112165761121182611290565b6111fa565b815115801561123a575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611289576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610957565b50806111fa565b8051156112a05780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff811681146112d2575f80fd5b5f805f805f8060c0878903121561130b575f80fd5b8635611316816112d5565b95506020870135611326816112d5565b95989597505050506040840135936060810135936080820135935060a0909101359150565b5f6020828403121561135b575f80fd5b81356111fa816112d5565b5f8060408385031215611377575f80fd5b50508035926020909101359150565b5f805f8060808587031215611399575f80fd5b84356113a4816112d5565b966020860135965060408601359560600135945092505050565b5f602082840312156113ce575f80fd5b5051919050565b5f602082840312156113e5575f80fd5b81516111fa816112d5565b5f60208284031215611400575f80fd5b815180151581146111fa575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176104575761045761140f565b808201808211156104575761045761140f565b818103818111156104575761045761140f565b5f826114ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80516dffffffffffffffffffffffffffff81168114610805575f80fd5b5f805f606084860312156114e0575f80fd5b6114e9846114b1565b92506114f7602085016114b1565b9150604084015163ffffffff8116811461150f575f80fd5b809150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156115ba57845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611588565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020808385031215611626575f80fd5b825167ffffffffffffffff8082111561163d575f80fd5b818501915085601f830112611650575f80fd5b815181811115611662576116626115e8565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156116a5576116a56115e8565b6040529182528482019250838101850191888311156116c2575f80fd5b938501935b828510156116e0578451845293850193928501926116c7565b98975050505050505050565b5f805f606084860312156116fe575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f5190d54926619af4a7b9444ae535711c01aa23d876b9e276ba0c57ad87099a164736f6c63430008190033

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

000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f2718671000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e2

-----Decoded View---------------
Arg [0] : _router (address): 0xB4B0ea46Fe0E9e8EAB4aFb765b527739F2718671
Arg [1] : _factory (address): 0xee3E9E46E34a27dC755a63e2849C9913Ee1A06E2

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f2718671
Arg [1] : 000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e2


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.