Contract 0xf1046053aa5682b4f9a81b5481394da16be5ff5a 11

 

Contract Overview

Velodrome Finance: Pool Factory V2
Balance:
0 ETH

EtherValue:
$0.00

Token:
Txn Hash Method
Block
From
To
Value
0x8aa6245c9598ffbaffbd660dbc45189aecf412de264c32b72cd45424948d6a68Create Pool1121868992023-11-14 14:36:1598 days 11 hrs ago0x7766eb408b671be8bc237639b20a0ec45e2750c7 IN  Velodrome Finance: Pool Factory V20 ETH0.0000905597770.008084162
0xb421071fd12ba911b57ebf9c43a1fd31df33c8de83b954166cae3d0ef05913daCreate Pool1121868592023-11-14 14:34:5598 days 11 hrs ago0x7766eb408b671be8bc237639b20a0ec45e2750c7 IN  Velodrome Finance: Pool Factory V20 ETH0.000083390120.008751118
0x139379deb754762da715a01f9e0045f1fc50fd3fd20f596311940b55e7782143Create Pool1121868102023-11-14 14:33:1798 days 11 hrs ago0x7766eb408b671be8bc237639b20a0ec45e2750c7 IN  Velodrome Finance: Pool Factory V20 ETH0.0000841731970.008940119
0xb82057e239c65e92514e55a48ab0233adaff6f91ec8068adb340c4ec010075f2Create Pool1088951722023-08-30 9:52:01174 days 15 hrs ago0xdc887ae5c6052badc5d17a4eb2350b309cb2025f IN  Velodrome Finance: Pool Factory V20 ETH0.0000327845240.000136653
0xf4e9cf42226383131d1765f7e0c88eb0d70d0a90476c7769c4ee9ce12cad95ebCreate Pool1059022832023-06-22 3:09:03243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000718377150.000008421
0xe70a2f048866c22a3f278ed227e2b07caac3cc544a92f8c72b5cc828dba21420Create Pool1059022762023-06-22 3:08:49243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000778884710.000008421
0xb7cb8e45f58e5ae21f82515c26e97aca0b9223df11ad5d82c74588e3d51ae659Create Pool1059022682023-06-22 3:08:33243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.000090244960.000008421
0x6c0aa264b698f7bf14a55b69a2fe81165c57e525badca47553f55b4d1c97b378Create Pool1059022612023-06-22 3:08:19243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000806752520.000008421
0xe92031783b3fdefc7923d2d10b98b9814bb1464908816fa5e955a37f77d45d3eCreate Pool1059022542023-06-22 3:08:05243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000730191750.000008421
0xb4a2ebe0b71cff7fde825c337f42cd9bd79da971fab56a13c6a8f01838972908Create Pool1059022472023-06-22 3:07:51243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000724639890.000008421
0xf1663e417922416f02971dafbd596ec67eb8f7170c06d1a080b6692afc353897Create Pool1059022392023-06-22 3:07:35243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000702284810.000008421
0x915252df9e081809fb11e744e979738ca313c73916b6a2cadf7e975e0f98c7a1Create Pool1059022332023-06-22 3:07:23243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000757024410.000008421
0x9814b64df6dfd434a3fef9efb2fd0c7e53804017eded74d30a3f6d6c61d1d1a7Create Pool1059022252023-06-22 3:07:07243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000700314960.000008421
0xc62761ccacbc4752885d1c11a28df56bd752fc322c81e4b53c993241fd50158fCreate Pool1059022182023-06-22 3:06:53243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000738290870.000008421
0x70ac74fd4f6c0b5bc60c51ff79b3894798a5d5326ac25a7462566a43af7192fbCreate Pool1059022112023-06-22 3:06:39243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000669702350.000008421
0xa76bd9167881b95ac136f3a8c0073767ae67d89411feebcb892f0fe256592215Create Pool1059022042023-06-22 3:06:25243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000668897930.000008421
0x929456a6f806c307e03b3e8ac962fc6fb77cb7d9291aa0d491c6c87c403b540dCreate Pool1059021972023-06-22 3:06:11243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.000065752440.000008421
0x90fdb8079d7318f043d5056f6be9dfb3ffa073f48c7ffebd9e5a1166eacdcddcCreate Pool1059021902023-06-22 3:05:57243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000665203450.000008421
0xaf7fb3621ac32650e6328a70e94bfeecbf31e6003b8b1559069d3e874d1db0feCreate Pool1059021832023-06-22 3:05:43243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000684757510.000008421
0xe773cdda79374d5b085b7a4682bb0b09d02d912b63340fe802a7b5caeb11904fCreate Pool1059021732023-06-22 3:05:23243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000558160260.000008421
0x1db12042392497e98f4662e645d9f61203bd88a0df8a144a51bf2f63b298d326Create Pool1059021662023-06-22 3:05:09243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000541165450.000008421
0xb6047eac357b90d89d6ad4c5204455c993022e8c19f1ad1bc1e7387d5a927417Create Pool1059021592023-06-22 3:04:55243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000499321470.000008421
0x2a967d088a4c095021a1666ad6cfbeee66abd78b9f41ee3758f3154bf9c8c70eCreate Pool1059021512023-06-22 3:04:39243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000482053290.000008421
0x449d7ff11ffdaf82ec0fcd78a6591243faecc2a90217373bbafa41a1319ec6ceCreate Pool1059021442023-06-22 3:04:25243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.000043578680.000008421
0x293f80fd97e9c50acb75ae19daa248f6207d95daeab0ef5594fe9e1391ce4474Create Pool1059021372023-06-22 3:04:11243 days 22 hrs ago0x9b7a9330b7f767efd3bff2a51c6e375567bf0b84 IN  Velodrome Finance: Pool Factory V20 ETH0.0000440757580.000008421
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x680c5b528e3d1b4397c69d017f98d528e9a8150d3d6f7ea64977a2019954f42e1164053382024-02-20 6:10:5319 hrs 27 mins ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x45cee7acfd9fc32e32226631c95ac50c25844040befc441e281f29167c1a603b1162331122024-02-16 6:30:014 days 19 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x8c5fe584c5a1828664da62f5e27ab1f88821b6ba533a69c6997d4d2d5e4f67871162059272024-02-15 15:23:515 days 10 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x67bf9a1d790bfe3395f1651350d88119bc5fe735eaff6bf9a23c5b9e5f9f976a1160714842024-02-12 12:42:258 days 12 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x012a81e0e501ed5d0e65e11ee13f70a6cd861daba065b3575459207f84b34fdb1160512882024-02-12 1:29:139 days 9 mins ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x6e96261d1ba3e2dc62da46f8e04cdb1689e470df5ee28a02fddb7d8c790eb72c1157856312024-02-05 21:53:5915 days 3 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0xc71a345ddf76b87d8a9bbdaf7619d76317c71ce2a97271ba2f52574380eca5791157731712024-02-05 14:58:3915 days 10 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0xcef2214934d4e7048930051b437f306ba80f14be93036c0fc66d7ea46f14ea2a1156069452024-02-01 18:37:4719 days 7 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x5f9ea8464aa48dc37b308daa736348d2cf4d9fed0fe75d7469fa4c8422cfe4421152791772024-01-25 4:32:1126 days 21 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0xe7faf35170aa39a9c4b31e15b083bfb53742e0bb69a66e30139e932257cfe9081151644912024-01-22 12:49:1929 days 12 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x8a499629877d7567c3fd03a4b4aabe3d3fca594c8245fdd31f53ab545869fb701151291752024-01-21 17:12:0730 days 8 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0xb7b1f2fa6ff1efb6108caeacafd66c19adca1c28cb98e31cf854575d48f706d01150804482024-01-20 14:07:5331 days 11 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0xc5571fe829783640a366c87bd59867a340f53da97e0c5a72c1513ccadb6fd77e1150378692024-01-19 14:28:3532 days 11 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x9950f7808905908896fcbabe53b89aa220381c3e500a566267c0ccbfb722490b1146890312024-01-11 12:40:3940 days 12 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0xa7b6cdc1f663ed6d76a918536bef6d044b11e2380f52dbcc418295d6c4bf37841146887352024-01-11 12:30:4740 days 13 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0xa85101c98522976cdf3ef0c558ebfb223d19e49f2b65a2aef366aa6aafbe87dc1146635292024-01-10 22:30:3541 days 3 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x903f019507b722f0fd9dd612000f2e1756e5ac516ce666a69f46182c5cf8f51a1146634502024-01-10 22:27:5741 days 3 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x2a650fa78df63a8cabc54d5d73a50d12de12f4e6dadf27ac437f103a5259dab11146614102024-01-10 21:19:5741 days 4 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0xd198821be43dd7dc0aa86f4d2d1c1c5016ce4913db5b3c101c55d4d627a023ae1146478932024-01-10 13:49:2341 days 11 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x3ad4b3bf0695713e87c9d1a9e21bd620996e06da970af116cde68e501ad4bb081146053732024-01-09 14:12:0342 days 11 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x260b5b8b142f36781837f2e8b1997b83761675274ccda507a97c3568cae2041c1145879382024-01-09 4:30:5342 days 21 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x1a08ac440738b4f37ebb1eb4db9fcd2ae267e4f2013f0a9aafd94cb6027bafae1145779812024-01-08 22:58:5943 days 2 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x36b2bc18de63b109c34aa5385b9ad06081a4dd9c9ac824d025f02be3eda2d42d1145733432024-01-08 20:24:2343 days 5 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0xfde4baf3025eea25192aa06ceb048fd90c308b2da4053d1a235e889c5d77e77f1144474742024-01-05 22:28:4546 days 3 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
0x92c4de880b6b29a7f052ff4c5c94e4c7bc65d2e2e53023d592a267a3ffe580221144422092024-01-05 19:33:1546 days 6 hrs ago Velodrome Finance: Pool Factory V2  Contract Creation0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PoolFactory

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 4 : PoolFactory.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.19;

import {IPoolFactory} from "../interfaces/factories/IPoolFactory.sol";
import {IPool} from "../interfaces/IPool.sol";
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";

contract PoolFactory is IPoolFactory {
    address public immutable implementation;

    bool public isPaused;
    address public pauser;

    uint256 public stableFee;
    uint256 public volatileFee;
    uint256 public constant MAX_FEE = 100; // 1%
    // Override to indicate there is custom 0% fee - as a 0 value in the customFee mapping indicates
    // that no custom fee rate has been set
    uint256 public constant ZERO_FEE_INDICATOR = 420;
    address public feeManager;

    /// @dev used to change the name/symbol of the pool by calling emergencyCouncil
    address public voter;

    /// @dev used to enable Router conversion of v1 => v2 VEL0
    address public velo;
    address public veloV2;
    address public sinkConverter;

    mapping(address => mapping(address => mapping(bool => address))) private _getPool;
    address[] public allPools;
    mapping(address => bool) private _isPool; // simplified check if its a pool, given that `stable` flag might not be available in peripherals
    mapping(address => uint256) public customFee; // override for custom fees

    address internal _temp0;
    address internal _temp1;
    bool internal _temp;

    constructor(address _implementation) {
        implementation = _implementation;
        voter = msg.sender;
        pauser = msg.sender;
        feeManager = msg.sender;
        sinkConverter = msg.sender;
        isPaused = false;
        stableFee = 5; // 0.05%
        volatileFee = 30; // 0.3%
    }

    /// @inheritdoc IPoolFactory
    function allPoolsLength() external view returns (uint256) {
        return allPools.length;
    }

    /// @inheritdoc IPoolFactory
    function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address) {
        return fee > 1 ? address(0) : fee == 1 ? _getPool[tokenA][tokenB][true] : _getPool[tokenA][tokenB][false];
    }

    /// @inheritdoc IPoolFactory
    function getPool(address tokenA, address tokenB, bool stable) external view returns (address) {
        return _getPool[tokenA][tokenB][stable];
    }

    /// @inheritdoc IPoolFactory
    function getPair(address tokenA, address tokenB, bool stable) external view returns (address) {
        return _getPool[tokenA][tokenB][stable];
    }

    /// @inheritdoc IPoolFactory
    function isPool(address pool) external view returns (bool) {
        return _isPool[pool];
    }

    /// @inheritdoc IPoolFactory
    function isPair(address pool) external view returns (bool) {
        return _isPool[pool];
    }

    /// @inheritdoc IPoolFactory
    function setVoter(address _voter) external {
        if (msg.sender != voter) revert NotVoter();
        voter = _voter;
        emit SetVoter(_voter);
    }

    /// @inheritdoc IPoolFactory
    function setSinkConverter(address _sinkConverter, address _velo, address _veloV2) external {
        if (msg.sender != sinkConverter) revert NotSinkConverter();
        sinkConverter = _sinkConverter;
        velo = _velo;
        veloV2 = _veloV2;

        // Follow logic of createPool() - except add getPool values for both volatile
        // and stable so there is no way to create an additional velo => veloV2 pool
        (address token0, address token1) = _velo < _veloV2 ? (_velo, _veloV2) : (_veloV2, _velo);
        _getPool[token0][token1][true] = sinkConverter;
        _getPool[token1][token0][true] = sinkConverter;
        _getPool[token0][token1][false] = sinkConverter;
        _getPool[token1][token0][false] = sinkConverter;
        allPools.push(sinkConverter);
        _isPool[sinkConverter] = true;

        // emit two events - for both the "stable" and "volatile" pool being created
        emit PoolCreated(token0, token1, true, sinkConverter, allPools.length);
        emit PoolCreated(token0, token1, false, sinkConverter, allPools.length);
    }

    function setPauser(address _pauser) external {
        if (msg.sender != pauser) revert NotPauser();
        if (_pauser == address(0)) revert ZeroAddress();
        pauser = _pauser;
        emit SetPauser(_pauser);
    }

    function setPauseState(bool _state) external {
        if (msg.sender != pauser) revert NotPauser();
        isPaused = _state;
        emit SetPauseState(_state);
    }

    function setFeeManager(address _feeManager) external {
        if (msg.sender != feeManager) revert NotFeeManager();
        if (_feeManager == address(0)) revert ZeroAddress();
        feeManager = _feeManager;
        emit SetFeeManager(_feeManager);
    }

    /// @inheritdoc IPoolFactory
    function setFee(bool _stable, uint256 _fee) external {
        if (msg.sender != feeManager) revert NotFeeManager();
        if (_fee > MAX_FEE) revert FeeTooHigh();
        if (_fee == 0) revert ZeroFee();
        if (_stable) {
            stableFee = _fee;
        } else {
            volatileFee = _fee;
        }
    }

    /// @inheritdoc IPoolFactory
    function setCustomFee(address pool, uint256 fee) external {
        if (msg.sender != feeManager) revert NotFeeManager();
        if (fee > MAX_FEE && fee != ZERO_FEE_INDICATOR) revert FeeTooHigh();
        if (!_isPool[pool]) revert InvalidPool();

        customFee[pool] = fee;
        emit SetCustomFee(pool, fee);
    }

    /// @inheritdoc IPoolFactory
    function getFee(address pool, bool _stable) public view returns (uint256) {
        uint256 fee = customFee[pool];
        return fee == ZERO_FEE_INDICATOR ? 0 : fee != 0 ? fee : _stable ? stableFee : volatileFee;
    }

    /// @inheritdoc IPoolFactory
    function createPool(address tokenA, address tokenB, uint24 fee) external returns (address pool) {
        if (fee > 1) revert FeeInvalid();
        bool stable = fee == 1;
        return createPool(tokenA, tokenB, stable);
    }

    /// @inheritdoc IPoolFactory
    function createPool(address tokenA, address tokenB, bool stable) public returns (address pool) {
        if (tokenA == tokenB) revert SameAddress();
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        if (token0 == address(0)) revert ZeroAddress();
        if (_getPool[token0][token1][stable] != address(0)) revert PoolAlreadyExists();
        bytes32 salt = keccak256(abi.encodePacked(token0, token1, stable)); // salt includes stable as well, 3 parameters
        pool = Clones.cloneDeterministic(implementation, salt);
        IPool(pool).initialize(token0, token1, stable);
        _getPool[token0][token1][stable] = pool;
        _getPool[token1][token0][stable] = pool; // populate mapping in the reverse direction
        allPools.push(pool);
        _isPool[pool] = true;
        emit PoolCreated(token0, token1, stable, pool, allPools.length);
    }

    /// @inheritdoc IPoolFactory
    function createPair(address tokenA, address tokenB, bool stable) external returns (address pool) {
        return createPool(tokenA, tokenB, stable);
    }
}

File 2 of 4 : IPoolFactory.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IPoolFactory {
    event SetFeeManager(address feeManager);
    event SetPauser(address pauser);
    event SetPauseState(bool state);
    event SetVoter(address voter);
    event PoolCreated(address indexed token0, address indexed token1, bool indexed stable, address pool, uint256);
    event SetCustomFee(address indexed pool, uint256 fee);

    error FeeInvalid();
    error FeeTooHigh();
    error InvalidPool();
    error NotFeeManager();
    error NotPauser();
    error NotSinkConverter();
    error NotVoter();
    error PoolAlreadyExists();
    error SameAddress();
    error ZeroFee();
    error ZeroAddress();

    /// @notice returns the number of pools created from this factory
    function allPoolsLength() external view returns (uint256);

    /// @notice Is a valid pool created by this factory.
    /// @param .
    function isPool(address pool) external view returns (bool);

    /// @notice Support for Velodrome v1 which wraps around isPool(pool);
    /// @param .
    function isPair(address pool) external view returns (bool);

    /// @notice Return address of pool created by this factory
    /// @param tokenA .
    /// @param tokenB .
    /// @param stable True if stable, false if volatile
    function getPool(address tokenA, address tokenB, bool stable) external view returns (address);

    /// @notice Support for v3-style pools which wraps around getPool(tokenA,tokenB,stable)
    /// @dev fee is converted to stable boolean.
    /// @param tokenA .
    /// @param tokenB .
    /// @param fee  1 if stable, 0 if volatile, else returns address(0)
    function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address);

    /// @notice Support for Velodrome v1 pools as a "pool" was previously referenced as "pair"
    /// @notice Wraps around getPool(tokenA,tokenB,stable)
    function getPair(address tokenA, address tokenB, bool stable) external view returns (address);

    /// @dev Only called once to set to Voter.sol - Voter does not have a function
    ///      to call this contract method, so once set it's immutable.
    ///      This also follows convention of setVoterAndDistributor() in VotingEscrow.sol
    /// @param _voter .
    function setVoter(address _voter) external;

    function setSinkConverter(address _sinkConvert, address _velo, address _veloV2) external;

    function setPauser(address _pauser) external;

    function setPauseState(bool _state) external;

    function setFeeManager(address _feeManager) external;

    /// @notice Set default fee for stable and volatile pools.
    /// @dev Throws if higher than maximum fee.
    ///      Throws if fee is zero.
    /// @param _stable Stable or volatile pool.
    /// @param _fee .
    function setFee(bool _stable, uint256 _fee) external;

    /// @notice Set overriding fee for a pool from the default
    /// @dev A custom fee of zero means the default fee will be used.
    function setCustomFee(address _pool, uint256 _fee) external;

    /// @notice Returns fee for a pool, as custom fees are possible.
    function getFee(address _pool, bool _stable) external view returns (uint256);

    /// @notice Create a pool given two tokens and if they're stable/volatile
    /// @dev token order does not matter
    /// @param tokenA .
    /// @param tokenB .
    /// @param stable .
    function createPool(address tokenA, address tokenB, bool stable) external returns (address pool);

    /// @notice Support for v3-style pools which wraps around createPool(tokena,tokenB,stable)
    /// @dev fee is converted to stable boolean
    /// @dev token order does not matter
    /// @param tokenA .
    /// @param tokenB .
    /// @param fee 1 if stable, 0 if volatile, else revert
    function createPool(address tokenA, address tokenB, uint24 fee) external returns (address pool);

    /// @notice Support for Velodrome v1 which wraps around createPool(tokenA,tokenB,stable)
    function createPair(address tokenA, address tokenB, bool stable) external returns (address pool);

    function isPaused() external view returns (bool);

    function velo() external view returns (address);

    function veloV2() external view returns (address);

    function voter() external view returns (address);

    function sinkConverter() external view returns (address);

    function implementation() external view returns (address);
}

File 3 of 4 : IPool.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IPool {
    error DepositsNotEqual();
    error BelowMinimumK();
    error FactoryAlreadySet();
    error InsufficientLiquidity();
    error InsufficientLiquidityMinted();
    error InsufficientLiquidityBurned();
    error InsufficientOutputAmount();
    error InsufficientInputAmount();
    error IsPaused();
    error InvalidTo();
    error K();
    error NotEmergencyCouncil();

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

    function metadata()
        external
        view
        returns (uint256 dec0, uint256 dec1, uint256 r0, uint256 r1, bool st, address t0, address t1);

    function claimFees() external returns (uint256, uint256);

    function tokens() external view returns (address, address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function stable() external view returns (bool);

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

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

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

    function getReserves() external view returns (uint256 _reserve0, uint256 _reserve1, uint256 _blockTimestampLast);

    function getAmountOut(uint256, address) external view returns (uint256);

    function skim(address to) external;

    function initialize(address _token0, address _token1, bool _stable) external;
}

File 4 of 4 : Clones.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (proxy/Clones.sol)

pragma solidity ^0.8.0;

/**
 * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for
 * deploying minimal proxy contracts, also known as "clones".
 *
 * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
 * > a minimal bytecode implementation that delegates all calls to a known, fixed address.
 *
 * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
 * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
 * deterministic method.
 *
 * _Available since v3.4._
 */
library Clones {
    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create opcode, which should never revert.
     */
    function clone(address implementation) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create(0, 0x09, 0x37)
        }
        require(instance != address(0), "ERC1167: create failed");
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create2 opcode and a `salt` to deterministically deploy
     * the clone. Using the same `implementation` and `salt` multiple time will revert, since
     * the clones cannot be deployed twice at the same address.
     */
    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create2(0, 0x09, 0x37, salt)
        }
        require(instance != address(0), "ERC1167: create2 failed");
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(add(ptr, 0x38), deployer)
            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)
            mstore(add(ptr, 0x14), implementation)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)
            mstore(add(ptr, 0x58), salt)
            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))
            predicted := keccak256(add(ptr, 0x43), 0x55)
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt
    ) internal view returns (address predicted) {
        return predictDeterministicAddress(implementation, salt, address(this));
    }
}

Settings
{
  "remappings": [
    "@opengsn/=lib/gsn/packages/",
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "@uniswap/v3-core/=lib/v3-core/",
    "concentrated-liquidity/=lib/concentrated-liquidity/",
    "ds-test/=lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "eth-gas-reporter/=node_modules/eth-gas-reporter/",
    "forge-std/=lib/forge-std/src/",
    "gsn/=lib/gsn/",
    "hardhat-deploy/=node_modules/hardhat-deploy/",
    "hardhat/=node_modules/hardhat/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "utils/=test/utils/",
    "v3-core/=lib/v3-core/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {
    "contracts/art/PerlinNoise.sol": {
      "PerlinNoise": "0x08947e304064b3f3ef2b99fca7e549c5fc3f75d4"
    },
    "contracts/art/Trig.sol": {
      "Trig": "0xbdd6f9662e904a9176aafcbdded45d076b5170ef"
    },
    "contracts/libraries/BalanceLogicLibrary.sol": {
      "BalanceLogicLibrary": "0x79bca9bcc19e157cb5f8c5a2f4d6cb951b1f8dce"
    },
    "contracts/libraries/DelegationLogicLibrary.sol": {
      "DelegationLogicLibrary": "0x73746410b0dd4526e1fa00d0854e99ba54aefd30"
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FeeInvalid","type":"error"},{"inputs":[],"name":"FeeTooHigh","type":"error"},{"inputs":[],"name":"InvalidPool","type":"error"},{"inputs":[],"name":"NotFeeManager","type":"error"},{"inputs":[],"name":"NotPauser","type":"error"},{"inputs":[],"name":"NotSinkConverter","type":"error"},{"inputs":[],"name":"NotVoter","type":"error"},{"inputs":[],"name":"PoolAlreadyExists","type":"error"},{"inputs":[],"name":"SameAddress","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroFee","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":true,"internalType":"bool","name":"stable","type":"bool"},{"indexed":false,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetCustomFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"feeManager","type":"address"}],"name":"SetFeeManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"SetPauseState","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pauser","type":"address"}],"name":"SetPauser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"SetVoter","type":"event"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_FEE_INDICATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allPoolsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"createPair","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"createPool","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"}],"name":"createPool","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"customFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"_stable","type":"bool"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"}],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setCustomFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_stable","type":"bool"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeManager","type":"address"}],"name":"setFeeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPauseState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pauser","type":"address"}],"name":"setPauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkConverter","type":"address"},{"internalType":"address","name":"_velo","type":"address"},{"internalType":"address","name":"_veloV2","type":"address"}],"name":"setSinkConverter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"setVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinkConverter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stableFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"velo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"veloV2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"volatileFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a060405234801561001057600080fd5b506040516111ee3803806111ee83398101604081905261002f91610096565b6001600160a01b031660805260048054336001600160a01b0319918216811790925560008054600380548416851790556007805490931684179092556001600160a81b031990911661010090920260ff19169190911790556005600155601e6002556100c6565b6000602082840312156100a857600080fd5b81516001600160a01b03811681146100bf57600080fd5b9392505050565b6080516111066100e86000396000818161032b01526106f401526111066000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806379bc57d51161010f578063c6751c09116100a2578063d49466a811610071578063d49466a814610456578063e1f76b4414610469578063e5e31b13146102ea578063efde4e641461047c57600080fd5b8063c6751c091461040a578063cc56b2c51461041d578063cdb88ad114610430578063d0fb02031461044357600080fd5b80639fd0506d116100de5780639fd0506d146103ca578063a1671295146103e2578063b187bd26146103f5578063bc063e1a1461040257600080fd5b806379bc57d51461034d57806382dfdce4146103915780638c7c53ce146103a45780638e39ee16146103b757600080fd5b806346c96aac116101875780635084ed03116101565780635084ed03146102e15780635b16ebb7146102ea5780635c60da1b146103265780636801cc301461034d57600080fd5b806346c96aac14610288578063472d35b91461029b5780634bc2a657146102ae5780634d419abc146102c157600080fd5b806337068e7b116101c357806337068e7b1461024257806338c55d461461025557806340bbd7751461026c57806341d1de971461027557600080fd5b80631698ee82146101ea5780632d88af4a1461021a57806336bf95a01461022f575b600080fd5b6101fd6101f8366004610f25565b610484565b6040516001600160a01b0390911681526020015b60405180910390f35b61022d610228366004610f74565b610516565b005b6101fd61023d366004610fa6565b6105ca565b61022d610250366004610fe9565b610889565b61025e6101a481565b604051908152602001610211565b61025e60015481565b6101fd610283366004611023565b610aa3565b6004546101fd906001600160a01b031681565b61022d6102a9366004610f74565b610acd565b61022d6102bc366004610f74565b610b6d565b61025e6102cf366004610f74565b600b6020526000908152604090205481565b61025e60025481565b6103166102f8366004610f74565b6001600160a01b03166000908152600a602052604090205460ff1690565b6040519015158152602001610211565b6101fd7f000000000000000000000000000000000000000000000000000000000000000081565b6101fd61035b366004610fa6565b6001600160a01b039283166000908152600860209081526040808320948616835293815283822092151582529190915220541690565b6101fd61039f366004610fa6565b610be6565b6005546101fd906001600160a01b031681565b6007546101fd906001600160a01b031681565b6000546101fd9061010090046001600160a01b031681565b6101fd6103f0366004610f25565b610bf3565b6000546103169060ff1681565b61025e606481565b6006546101fd906001600160a01b031681565b61025e61042b36600461103c565b610c39565b61022d61043e36600461106f565b610c8b565b6003546101fd906001600160a01b031681565b61022d61046436600461108a565b610cfc565b61022d6104773660046110b4565b610de8565b60095461025e565b600060018262ffffff161161050b578162ffffff166001146104d5576001600160a01b038085166000908152600860209081526040808320878516845282528083208380529091529020541661050e565b6001600160a01b03808516600090815260086020908152604080832087851684528252808320600184529091529020541661050e565b60005b949350505050565b60005461010090046001600160a01b031633146105465760405163492f678160e01b815260040160405180910390fd5b6001600160a01b03811661056d5760405163d92e233d60e01b815260040160405180910390fd5b60008054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527fe02efb9e8f0fc21546730ab32d594f62d586e1bbb15bb5045edd0b1878a77b35906020015b60405180910390a150565b6000826001600160a01b0316846001600160a01b0316036105fe5760405163367558c360e01b815260040160405180910390fd5b600080846001600160a01b0316866001600160a01b031610610621578486610624565b85855b90925090506001600160a01b0382166106505760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03828116600090815260086020908152604080832085851684528252808320881515845290915290205416156106a057604051630188c99160e11b815260040160405180910390fd5b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015284151560f81b60488201526000906049016040516020818303038152906040528051906020012090506107197f000000000000000000000000000000000000000000000000000000000000000082610e68565b604051631c9776b560e31b81526001600160a01b038581166004830152848116602483015287151560448301529195509085169063e4bbb5a890606401600060405180830381600087803b15801561077057600080fd5b505af1158015610784573d6000803e3d6000fd5b505050506001600160a01b0383811660008181526008602081815260408084208887168086529083528185208c15158087529084528286208054988d166001600160a01b0319998a16811790915582875294845282862087875284528286208187528452828620805489168617905560098054600181810183557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af9091018054909a168717909955858752600a855295839020805460ff191690981790975593548151938452918301919091529192917f2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e910160405180910390a45050509392505050565b6007546001600160a01b031633146108b4576040516315517aa960e31b815260040160405180910390fd5b600780546001600160a01b038086166001600160a01b03199283161790925560058054858416908316811790915560068054938516939092168317909155600091829110610903578284610906565b83835b600780546001600160a01b038481166000818152600860208181526040808420898716808652908352818520600180875281855283872080546001600160a01b03199081169b8b169b909b1790558a54838852958552838720888852855283872081885280865284882080548c16978b16979097179096558a5487805291855283872080548b16928a1692909217909155895494845282862080548a169589169590951790945588546009805480870182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af018054909a1691891691909117909855885487168552600a835293819020805460ff1916841790559654955487519690951686528501939093529597509395509392917f2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e910160405180910390a4600754600954604080516001600160a01b039384168152602081019290925260009284811692908616917f2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e910160405180910390a45050505050565b60098181548110610ab357600080fd5b6000918252602090912001546001600160a01b0316905081565b6003546001600160a01b03163314610af85760405163f5d267eb60e01b815260040160405180910390fd5b6001600160a01b038116610b1f5760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5d0517e3a4eabea892d9750138cd21d4a6cf3b935b43d0598df7055f463819b2906020016105bf565b6004546001600160a01b03163314610b985760405163c18384c160e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc6ff127433b785c51da9ae4088ee184c909b1a55b9afd82ae6c64224d3bc15d2906020016105bf565b600061050e8484846105ca565b600060018262ffffff161115610c1c576040516352dadcf960e01b815260040160405180910390fd5b600162ffffff831614610c308585836105ca565b95945050505050565b6001600160a01b0382166000908152600b60205260408120546101a48114610c7e5780600003610c785782610c7057600254610c81565b600154610c81565b80610c81565b60005b9150505b92915050565b60005461010090046001600160a01b03163314610cbb5760405163492f678160e01b815260040160405180910390fd5b6000805460ff19168215159081179091556040519081527f0d76538efc408318a051137c2720a9e82902acdbd46b802d488b74ca3a09a116906020016105bf565b6003546001600160a01b03163314610d275760405163f5d267eb60e01b815260040160405180910390fd5b606481118015610d3957506101a48114155b15610d575760405163cd4e616760e01b815260040160405180910390fd5b6001600160a01b0382166000908152600a602052604090205460ff16610d8f5760405162820f3560e61b815260040160405180910390fd5b6001600160a01b0382166000818152600b602052604090819020839055517fae468ce586f9a87660fdffc1448cee942042c16ae2f02046b134b5224f31936b90610ddc9084815260200190565b60405180910390a25050565b6003546001600160a01b03163314610e135760405163f5d267eb60e01b815260040160405180910390fd5b6064811115610e355760405163cd4e616760e01b815260040160405180910390fd5b80600003610e565760405163af13986d60e01b815260040160405180910390fd5b8115610e625760015550565b60025550565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b038116610c855760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640160405180910390fd5b80356001600160a01b0381168114610f2057600080fd5b919050565b600080600060608486031215610f3a57600080fd5b610f4384610f09565b9250610f5160208501610f09565b9150604084013562ffffff81168114610f6957600080fd5b809150509250925092565b600060208284031215610f8657600080fd5b610f8f82610f09565b9392505050565b80358015158114610f2057600080fd5b600080600060608486031215610fbb57600080fd5b610fc484610f09565b9250610fd260208501610f09565b9150610fe060408501610f96565b90509250925092565b600080600060608486031215610ffe57600080fd5b61100784610f09565b925061101560208501610f09565b9150610fe060408501610f09565b60006020828403121561103557600080fd5b5035919050565b6000806040838503121561104f57600080fd5b61105883610f09565b915061106660208401610f96565b90509250929050565b60006020828403121561108157600080fd5b610f8f82610f96565b6000806040838503121561109d57600080fd5b6110a683610f09565b946020939093013593505050565b600080604083850312156110c757600080fd5b6110a683610f9656fea264697066735822122098f1c8a9c496d10d06eca634b55f966c17fd487dce2fc5e648eb17d045d8b41264736f6c6343000813003300000000000000000000000095885af5492195f0754be71ad1545fe81364e531

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806379bc57d51161010f578063c6751c09116100a2578063d49466a811610071578063d49466a814610456578063e1f76b4414610469578063e5e31b13146102ea578063efde4e641461047c57600080fd5b8063c6751c091461040a578063cc56b2c51461041d578063cdb88ad114610430578063d0fb02031461044357600080fd5b80639fd0506d116100de5780639fd0506d146103ca578063a1671295146103e2578063b187bd26146103f5578063bc063e1a1461040257600080fd5b806379bc57d51461034d57806382dfdce4146103915780638c7c53ce146103a45780638e39ee16146103b757600080fd5b806346c96aac116101875780635084ed03116101565780635084ed03146102e15780635b16ebb7146102ea5780635c60da1b146103265780636801cc301461034d57600080fd5b806346c96aac14610288578063472d35b91461029b5780634bc2a657146102ae5780634d419abc146102c157600080fd5b806337068e7b116101c357806337068e7b1461024257806338c55d461461025557806340bbd7751461026c57806341d1de971461027557600080fd5b80631698ee82146101ea5780632d88af4a1461021a57806336bf95a01461022f575b600080fd5b6101fd6101f8366004610f25565b610484565b6040516001600160a01b0390911681526020015b60405180910390f35b61022d610228366004610f74565b610516565b005b6101fd61023d366004610fa6565b6105ca565b61022d610250366004610fe9565b610889565b61025e6101a481565b604051908152602001610211565b61025e60015481565b6101fd610283366004611023565b610aa3565b6004546101fd906001600160a01b031681565b61022d6102a9366004610f74565b610acd565b61022d6102bc366004610f74565b610b6d565b61025e6102cf366004610f74565b600b6020526000908152604090205481565b61025e60025481565b6103166102f8366004610f74565b6001600160a01b03166000908152600a602052604090205460ff1690565b6040519015158152602001610211565b6101fd7f00000000000000000000000095885af5492195f0754be71ad1545fe81364e53181565b6101fd61035b366004610fa6565b6001600160a01b039283166000908152600860209081526040808320948616835293815283822092151582529190915220541690565b6101fd61039f366004610fa6565b610be6565b6005546101fd906001600160a01b031681565b6007546101fd906001600160a01b031681565b6000546101fd9061010090046001600160a01b031681565b6101fd6103f0366004610f25565b610bf3565b6000546103169060ff1681565b61025e606481565b6006546101fd906001600160a01b031681565b61025e61042b36600461103c565b610c39565b61022d61043e36600461106f565b610c8b565b6003546101fd906001600160a01b031681565b61022d61046436600461108a565b610cfc565b61022d6104773660046110b4565b610de8565b60095461025e565b600060018262ffffff161161050b578162ffffff166001146104d5576001600160a01b038085166000908152600860209081526040808320878516845282528083208380529091529020541661050e565b6001600160a01b03808516600090815260086020908152604080832087851684528252808320600184529091529020541661050e565b60005b949350505050565b60005461010090046001600160a01b031633146105465760405163492f678160e01b815260040160405180910390fd5b6001600160a01b03811661056d5760405163d92e233d60e01b815260040160405180910390fd5b60008054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527fe02efb9e8f0fc21546730ab32d594f62d586e1bbb15bb5045edd0b1878a77b35906020015b60405180910390a150565b6000826001600160a01b0316846001600160a01b0316036105fe5760405163367558c360e01b815260040160405180910390fd5b600080846001600160a01b0316866001600160a01b031610610621578486610624565b85855b90925090506001600160a01b0382166106505760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03828116600090815260086020908152604080832085851684528252808320881515845290915290205416156106a057604051630188c99160e11b815260040160405180910390fd5b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015284151560f81b60488201526000906049016040516020818303038152906040528051906020012090506107197f00000000000000000000000095885af5492195f0754be71ad1545fe81364e53182610e68565b604051631c9776b560e31b81526001600160a01b038581166004830152848116602483015287151560448301529195509085169063e4bbb5a890606401600060405180830381600087803b15801561077057600080fd5b505af1158015610784573d6000803e3d6000fd5b505050506001600160a01b0383811660008181526008602081815260408084208887168086529083528185208c15158087529084528286208054988d166001600160a01b0319998a16811790915582875294845282862087875284528286208187528452828620805489168617905560098054600181810183557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af9091018054909a168717909955858752600a855295839020805460ff191690981790975593548151938452918301919091529192917f2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e910160405180910390a45050509392505050565b6007546001600160a01b031633146108b4576040516315517aa960e31b815260040160405180910390fd5b600780546001600160a01b038086166001600160a01b03199283161790925560058054858416908316811790915560068054938516939092168317909155600091829110610903578284610906565b83835b600780546001600160a01b038481166000818152600860208181526040808420898716808652908352818520600180875281855283872080546001600160a01b03199081169b8b169b909b1790558a54838852958552838720888852855283872081885280865284882080548c16978b16979097179096558a5487805291855283872080548b16928a1692909217909155895494845282862080548a169589169590951790945588546009805480870182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af018054909a1691891691909117909855885487168552600a835293819020805460ff1916841790559654955487519690951686528501939093529597509395509392917f2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e910160405180910390a4600754600954604080516001600160a01b039384168152602081019290925260009284811692908616917f2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e910160405180910390a45050505050565b60098181548110610ab357600080fd5b6000918252602090912001546001600160a01b0316905081565b6003546001600160a01b03163314610af85760405163f5d267eb60e01b815260040160405180910390fd5b6001600160a01b038116610b1f5760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5d0517e3a4eabea892d9750138cd21d4a6cf3b935b43d0598df7055f463819b2906020016105bf565b6004546001600160a01b03163314610b985760405163c18384c160e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc6ff127433b785c51da9ae4088ee184c909b1a55b9afd82ae6c64224d3bc15d2906020016105bf565b600061050e8484846105ca565b600060018262ffffff161115610c1c576040516352dadcf960e01b815260040160405180910390fd5b600162ffffff831614610c308585836105ca565b95945050505050565b6001600160a01b0382166000908152600b60205260408120546101a48114610c7e5780600003610c785782610c7057600254610c81565b600154610c81565b80610c81565b60005b9150505b92915050565b60005461010090046001600160a01b03163314610cbb5760405163492f678160e01b815260040160405180910390fd5b6000805460ff19168215159081179091556040519081527f0d76538efc408318a051137c2720a9e82902acdbd46b802d488b74ca3a09a116906020016105bf565b6003546001600160a01b03163314610d275760405163f5d267eb60e01b815260040160405180910390fd5b606481118015610d3957506101a48114155b15610d575760405163cd4e616760e01b815260040160405180910390fd5b6001600160a01b0382166000908152600a602052604090205460ff16610d8f5760405162820f3560e61b815260040160405180910390fd5b6001600160a01b0382166000818152600b602052604090819020839055517fae468ce586f9a87660fdffc1448cee942042c16ae2f02046b134b5224f31936b90610ddc9084815260200190565b60405180910390a25050565b6003546001600160a01b03163314610e135760405163f5d267eb60e01b815260040160405180910390fd5b6064811115610e355760405163cd4e616760e01b815260040160405180910390fd5b80600003610e565760405163af13986d60e01b815260040160405180910390fd5b8115610e625760015550565b60025550565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b038116610c855760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640160405180910390fd5b80356001600160a01b0381168114610f2057600080fd5b919050565b600080600060608486031215610f3a57600080fd5b610f4384610f09565b9250610f5160208501610f09565b9150604084013562ffffff81168114610f6957600080fd5b809150509250925092565b600060208284031215610f8657600080fd5b610f8f82610f09565b9392505050565b80358015158114610f2057600080fd5b600080600060608486031215610fbb57600080fd5b610fc484610f09565b9250610fd260208501610f09565b9150610fe060408501610f96565b90509250925092565b600080600060608486031215610ffe57600080fd5b61100784610f09565b925061101560208501610f09565b9150610fe060408501610f09565b60006020828403121561103557600080fd5b5035919050565b6000806040838503121561104f57600080fd5b61105883610f09565b915061106660208401610f96565b90509250929050565b60006020828403121561108157600080fd5b610f8f82610f96565b6000806040838503121561109d57600080fd5b6110a683610f09565b946020939093013593505050565b600080604083850312156110c757600080fd5b6110a683610f9656fea264697066735822122098f1c8a9c496d10d06eca634b55f966c17fd487dce2fc5e648eb17d045d8b41264736f6c63430008130033

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

00000000000000000000000095885af5492195f0754be71ad1545fe81364e531

-----Decoded View---------------
Arg [0] : _implementation (address): 0x95885Af5492195F0754bE71AD1545Fe81364E531

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000095885af5492195f0754be71ad1545fe81364e531


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.