Overview
ETH Balance
ETH Value
$0.00Multichain Info
Latest 25 from a total of 93 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Collect Fees | 13239859 | 10 hrs ago | IN | 0 ETH | 0.00000194 | ||||
Collect Fees | 13196719 | 22 hrs ago | IN | 0 ETH | 0.00000191 | ||||
Collect Fees | 13153422 | 34 hrs ago | IN | 0 ETH | 0.00000187 | ||||
Collect Fees | 13110173 | 46 hrs ago | IN | 0 ETH | 0.00000194 | ||||
Collect Fees | 13066978 | 2 days ago | IN | 0 ETH | 0.00000193 | ||||
Collect Fees | 13023966 | 2 days ago | IN | 0 ETH | 0.00000194 | ||||
Apply Protocol F... | 13023965 | 2 days ago | IN | 0 ETH | 0.0000014 | ||||
Collect Fees | 12980672 | 3 days ago | IN | 0 ETH | 0.00000174 | ||||
Collect Fees | 12937951 | 3 days ago | IN | 0 ETH | 0.00000194 | ||||
Apply Protocol F... | 12937949 | 3 days ago | IN | 0 ETH | 0.00000139 | ||||
Collect Fees | 12894159 | 4 days ago | IN | 0 ETH | 0.00000173 | ||||
Collect Fees | 12851166 | 4 days ago | IN | 0 ETH | 0.00000176 | ||||
Collect Fees | 12807838 | 5 days ago | IN | 0 ETH | 0.00000194 | ||||
Collect Fees | 12764606 | 5 days ago | IN | 0 ETH | 0.00000195 | ||||
Collect Fees | 12721468 | 6 days ago | IN | 0 ETH | 0.00000181 | ||||
Collect Fees | 12678358 | 6 days ago | IN | 0 ETH | 0.00000196 | ||||
Collect Fees | 12635126 | 7 days ago | IN | 0 ETH | 0.00000173 | ||||
Collect Fees | 12591867 | 7 days ago | IN | 0 ETH | 0.00000193 | ||||
Collect Fees | 12548807 | 8 days ago | IN | 0 ETH | 0.00000173 | ||||
Collect Fees | 12505461 | 8 days ago | IN | 0 ETH | 0.00000191 | ||||
Apply Protocol F... | 12505459 | 8 days ago | IN | 0 ETH | 0.00000139 | ||||
Collect Fees | 12462374 | 9 days ago | IN | 0 ETH | 0.00000178 | ||||
Collect Fees | 12419053 | 9 days ago | IN | 0 ETH | 0.00000228 | ||||
Apply Protocol F... | 12419051 | 9 days ago | IN | 0 ETH | 0.00000144 | ||||
Transfer Ownersh... | 12067739 | 14 days ago | IN | 0 ETH | 0.00000138 |
View more zero value Internal Transactions in Advanced View mode
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >= 0.8.0; import "interfaces/IUniswapV3Factory.sol"; import "interfaces/IUniswapV3Pool.sol"; import "./Auth.sol"; /// @title V3Manager for UniswapV3Factory /// @notice This contract is used to create fee tiers, set protocol fee on pools, and collect fees from pools /// @dev Uses Auth contract for owner and trusted operators to guard functions contract V3Manager is Auth { IUniswapV3Factory public factory; address public maker; uint8 public protocolFee; constructor( address _operator, address _factory, address _maker, uint8 _protocolFee ) Auth(_operator) { // initial owner is msg.sender factory = IUniswapV3Factory(_factory); maker = _maker; protocolFee = _protocolFee; } /// @notice Creates a new fee tier with passed tickSpacing /// @dev will revert on factory contract if inputs invalid /// @param fee The fee amount to enable, denominated in hundreths of a bip /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount function createFeeTier(uint24 fee, int24 tickSpacing) external onlyOwner { IUniswapV3Factory(factory).enableFeeAmount(fee, tickSpacing); } /// @notice transfer ownership of the factory contract /// @param newOwner The newOwner address to set on the factory contract function setFactoryOwner(address newOwner) external onlyOwner { IUniswapV3Factory(factory).setOwner(newOwner); } /// @notice Sets the protocol fee to be used for all pools /// @dev must be between 4 and 10, or 0 to disable - must apply to each pool everytime it's changed /// @param _protocolFee The protocol fee to be used for all pools function setProtocolFee(uint8 _protocolFee) external onlyOwner { require( _protocolFee == 0 || (_protocolFee >= 4 && _protocolFee <= 10) ); protocolFee = _protocolFee; } /// @notice Sets the maker contract to be used for collecting fees /// @dev Where all fees will be sent to when collected /// @param _maker The address of the maker contract function setMaker(address _maker) external onlyOwner { maker = _maker; } /// @notice Applies the protocol fee to all pools passed /// @dev must be called for each pool, after protocolFee is updated /// @param pools The addresses of the pools to apply the protocol fee to function applyProtocolFee(address[] calldata pools) external onlyTrusted { for (uint256 i = 0; i < pools.length; i++) { IUniswapV3Pool pool = IUniswapV3Pool(pools[i]); pool.setFeeProtocol(protocolFee, protocolFee); } } /// @notice Collects fees from pools passed /// @dev Will call collectProtocol on each pool address, sending fees to maker contract that is set /// @param pools The addresses of the pools to collect fees from function collectFees(address[] calldata pools) external onlyTrusted { for (uint256 i = 0; i < pools.length; i++) { IUniswapV3Pool pool = IUniswapV3Pool(pools[i]); (uint128 amount0, uint128 amount1) = pool.protocolFees(); pool.collectProtocol(maker, amount0, amount1); } } /// @notice Available function in case we need to do any calls that aren't supported by the contract (unwinding lp positions, etc.) /// @dev can only be called by owner /// @param to The address to send the call to /// @param _value The amount of eth to send with the call /// @param data The data to be sent with the call function doAction(address to, uint256 _value, bytes memory data) onlyOwner external { (bool success, ) = to.call{value: _value}(data); require(success); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; /// @title The interface for the Uniswap V3 Factory /// @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees interface IUniswapV3Factory { /// @notice Emitted when the owner of the factory is changed /// @param oldOwner The owner before the owner was changed /// @param newOwner The owner after the owner was changed event OwnerChanged(address indexed oldOwner, address indexed newOwner); /// @notice Emitted when a pool is created /// @param token0 The first token of the pool by address sort order /// @param token1 The second token of the pool by address sort order /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip /// @param tickSpacing The minimum number of ticks between initialized ticks /// @param pool The address of the created pool event PoolCreated( address indexed token0, address indexed token1, uint24 indexed fee, int24 tickSpacing, address pool ); /// @notice Emitted when a new fee amount is enabled for pool creation via the factory /// @param fee The enabled fee, denominated in hundredths of a bip /// @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing); /// @notice Returns the current owner of the factory /// @dev Can be changed by the current owner via setOwner /// @return The address of the factory owner function owner() external view returns (address); /// @notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled /// @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context /// @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee /// @return The tick spacing function feeAmountTickSpacing(uint24 fee) external view returns (int24); /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order /// @param tokenA The contract address of either token0 or token1 /// @param tokenB The contract address of the other token /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip /// @return pool The pool address function getPool( address tokenA, address tokenB, uint24 fee ) external view returns (address pool); /// @notice Creates a pool for the given two tokens and fee /// @param tokenA One of the two tokens in the desired pool /// @param tokenB The other of the two tokens in the desired pool /// @param fee The desired fee for the pool /// @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved /// from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments /// are invalid. /// @return pool The address of the newly created pool function createPool( address tokenA, address tokenB, uint24 fee ) external returns (address pool); /// @notice Updates the owner of the factory /// @dev Must be called by the current owner /// @param _owner The new owner of the factory function setOwner(address _owner) external; /// @notice Enables a fee amount with the given tickSpacing /// @dev Fee amounts may never be removed once enabled /// @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6) /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount function enableFeeAmount(uint24 fee, int24 tickSpacing) external; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; interface IUniswapV3Pool { // IUniswapV3PoolActions function initialize(uint160 sqrtPriceX96) external; function mint( address recipient, int24 tickLower, int24 tickUpper, uint128 amount, bytes calldata data ) external returns (uint256 amount0, uint256 amount1); function collect( address recipient, int24 tickLower, int24 tickUpper, uint128 amount0Requested, uint128 amount1Requested ) external returns (uint128 amount0, uint128 amount1); function burn( int24 tickLower, int24 tickUpper, uint128 amount ) external returns (uint256 amount0, uint256 amount1); function swap( address recipient, bool zeroForOne, int256 amountSpecified, uint160 sqrtPriceLimitX96, bytes calldata data ) external returns (int256 amount0, int256 amount1); function flash( address recipient, uint256 amount0, uint256 amount1, bytes calldata data ) external; function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external; // IUniswapV3PoolDerivedState function observe(uint32[] calldata secondsAgos) external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) external view returns ( int56 tickCumulativeInside, uint160 secondsPerLiquidityInsideX128, uint32 secondsInside ); // IUniswapV3PoolErrors error LOK(); error TLU(); error TLM(); error TUM(); error AI(); error M0(); error M1(); error AS(); error IIA(); error L(); error F0(); error F1(); // IUniswapV3PoolEvents event Initialize(uint160 sqrtPriceX96, int24 tick); event Mint( address sender, address indexed owner, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount, uint256 amount0, uint256 amount1 ); event Collect( address indexed owner, address recipient, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount0, uint128 amount1 ); event Burn( address indexed owner, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount, uint256 amount0, uint256 amount1 ); event Swap( address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick ); event Flash( address indexed sender, address indexed recipient, uint256 amount0, uint256 amount1, uint256 paid0, uint256 paid1 ); event IncreaseObservationCardinalityNext( uint16 observationCardinalityNextOld, uint16 observationCardinalityNextNew ); event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New); event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1); // IUniswapV3PoolImmutables function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function fee() external view returns (uint24); function tickSpacing() external view returns (int24); function maxLiquidityPerTick() external view returns (uint128); // IUniswapV3PoolOwnerActions function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external; function collectProtocol( address recipient, uint128 amount0Requested, uint128 amount1Requested ) external returns (uint128 amount0, uint128 amount1); // IUniswapV3PoolState function slot0() external view returns ( uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked ); function feeGrowthGlobal0X128() external view returns (uint256); function feeGrowthGlobal1X128() external view returns (uint256); function protocolFees() external view returns (uint128 token0, uint128 token1); function liquidity() external view returns (uint128); function ticks(int24 tick) external view returns ( uint128 liquidityGross, int128 liquidityNet, uint256 feeGrowthOutside0X128, uint256 feeGrowthOutside1X128, int56 tickCumulativeOutside, uint160 secondsPerLiquidityOutsideX128, uint32 secondsOutside, bool initialized ); function tickBitmap(int16 wordPosition) external view returns (uint256); function positions(bytes32 key) external view returns ( uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1 ); function observations(uint256 index) external view returns ( uint32 blockTimestamp, int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128, bool initialized ); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol) pragma solidity ^0.8.0; import "./Ownable.sol"; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() external { address sender = _msgSender(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; import "openzeppelin/access/Ownable2Step.sol"; abstract contract Auth is Ownable2Step { event SetTrusted(address indexed user, bool isTrusted); mapping(address => bool) public trusted; error OnlyTrusted(); modifier onlyTrusted() { if (!trusted[msg.sender]) revert OnlyTrusted(); _; } constructor(address trustedUser) { trusted[trustedUser] = true; emit SetTrusted(trustedUser, true); } function setTrusted(address user, bool isTrusted) external onlyOwner { trusted[user] = isTrusted; emit SetTrusted(user, isTrusted); } }
{ "evmVersion": "paris", "libraries": {}, "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_maker","type":"address"},{"internalType":"uint8","name":"_protocolFee","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"OnlyTrusted","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"isTrusted","type":"bool"}],"name":"SetTrusted","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"applyProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"collectFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"createFeeTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"doAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV3Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setFactoryOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_maker","type":"address"}],"name":"setMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_protocolFee","type":"uint8"}],"name":"setProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"isTrusted","type":"bool"}],"name":"setTrusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trusted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200114738038062001147833981016040819052620000349162000171565b836200004033620000e6565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600190811790915591519182527f878d105ed19c01e992a54459c2f04ba19432ac45600b42ce340d034272207436910160405180910390a250600380546001600160a01b039485166001600160a01b03199091161790556004805460ff909216600160a01b026001600160a81b0319909216929093169190911717905550620001d5565b600180546001600160a01b0319169055620001018162000104565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016c57600080fd5b919050565b600080600080608085870312156200018857600080fd5b620001938562000154565b9350620001a36020860162000154565b9250620001b36040860162000154565b9150606085015160ff81168114620001ca57600080fd5b939692955090935050565b610f6280620001e56000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80638da5cb5b116100b2578063cff8e7f711610081578063f2fde38b11610066578063f2fde38b146102b4578063f32a12ac146102c7578063f3cc660c146102da57600080fd5b8063cff8e7f714610283578063e30c39781461029657600080fd5b80638da5cb5b146101fb578063b0e21e8a14610219578063bc19a9e214610250578063c45a01551461026357600080fd5b80636e9821c2116100ee5780636e9821c2146101a5578063715018a6146101d857806372754262146101e057806379ba5097146101f357600080fd5b80634e91f8111461012057806350655d8c1461013557806354a0af171461017f57806358c0f72914610192575b600080fd5b61013361012e366004610ba8565b6102ed565b005b6004546101559073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013361018d366004610c2a565b61036d565b6101336101a0366004610d13565b6103f3565b6101c86101b3366004610d88565b60026020526000908152604090205460ff1681565b6040519015158152602001610176565b6101336105be565b6101336101ee366004610d13565b6105d2565b61013361070d565b60005473ffffffffffffffffffffffffffffffffffffffff16610155565b60045461023e9074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610176565b61013361025e366004610d88565b6107c7565b6003546101559073ffffffffffffffffffffffffffffffffffffffff1681565b610133610291366004610da3565b610816565b60015473ffffffffffffffffffffffffffffffffffffffff16610155565b6101336102c2366004610d88565b6108b4565b6101336102d5366004610deb565b610964565b6101336102e8366004610d88565b6109f6565b6102f5610a86565b60ff81161580610318575060048160ff16101580156103185750600a8160ff1611155b61032157600080fd5b6004805460ff90921674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b610375610a86565b60008373ffffffffffffffffffffffffffffffffffffffff16838360405161039d9190610e1c565b60006040518083038185875af1925050503d80600081146103da576040519150601f19603f3d011682016040523d82523d6000602084013e6103df565b606091505b50509050806103ed57600080fd5b50505050565b3360009081526002602052604090205460ff1661043c576040517fcf1119ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156105b957600083838381811061045b5761045b610e4b565b90506020020160208101906104709190610d88565b90506000808273ffffffffffffffffffffffffffffffffffffffff16631ad8b03b6040518163ffffffff1660e01b81526004016040805180830381865afa1580156104bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e39190610e9a565b600480546040517f85b6672900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216928101929092526fffffffffffffffffffffffffffffffff808516602484015283166044830152929450909250908416906385b667299060640160408051808303816000875af115801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190610e9a565b505050505080806105b190610ecd565b91505061043f565b505050565b6105c6610a86565b6105d06000610b07565b565b3360009081526002602052604090205460ff1661061b576040517fcf1119ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156105b957600083838381811061063a5761063a610e4b565b905060200201602081019061064f9190610d88565b600480546040517f8206a4d10000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910460ff16918101829052602481019190915290915073ffffffffffffffffffffffffffffffffffffffff821690638206a4d190604401600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b5050505050808061070590610ecd565b91505061061e565b600154339073ffffffffffffffffffffffffffffffffffffffff1681146107bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107c481610b07565b50565b6107cf610a86565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61081e610a86565b6003546040517f8a7c195f00000000000000000000000000000000000000000000000000000000815262ffffff84166004820152600283900b602482015273ffffffffffffffffffffffffffffffffffffffff90911690638a7c195f90604401600060405180830381600087803b15801561089857600080fd5b505af11580156108ac573d6000803e3d6000fd5b505050505050565b6108bc610a86565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561091f60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61096c610a86565b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f878d105ed19c01e992a54459c2f04ba19432ac45600b42ce340d034272207436910160405180910390a25050565b6109fe610a86565b6003546040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152909116906313af403590602401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556107c4816000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610bba57600080fd5b813560ff81168114610bcb57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bf657600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060608486031215610c3f57600080fd5b610c4884610bd2565b925060208401359150604084013567ffffffffffffffff80821115610c6c57600080fd5b818601915086601f830112610c8057600080fd5b813581811115610c9257610c92610bfb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610cd857610cd8610bfb565b81604052828152896020848701011115610cf157600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60008060208385031215610d2657600080fd5b823567ffffffffffffffff80821115610d3e57600080fd5b818501915085601f830112610d5257600080fd5b813581811115610d6157600080fd5b8660208260051b8501011115610d7657600080fd5b60209290920196919550909350505050565b600060208284031215610d9a57600080fd5b610bcb82610bd2565b60008060408385031215610db657600080fd5b823562ffffff81168114610dc957600080fd5b91506020830135600281900b8114610de057600080fd5b809150509250929050565b60008060408385031215610dfe57600080fd5b610e0783610bd2565b915060208301358015158114610de057600080fd5b6000825160005b81811015610e3d5760208186018101518583015201610e23565b506000920191825250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516fffffffffffffffffffffffffffffffff81168114610bf657600080fd5b60008060408385031215610ead57600080fd5b610eb683610e7a565b9150610ec460208401610e7a565b90509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610f25577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212202dbc58161e8fd329755b9bdedef9e6044e3de7c7a41a6828c3a647b22ab9e95c64736f6c634300081400330000000000000000000000004bb4c1b0745ef7b4642feeccd0740dec417ca0a0000000000000000000000000203e8740894c8955cb8950759876d7e7e45e04c1000000000000000000000000dbeca8fb948c42634256609bce5a3768c9b3e9eb0000000000000000000000000000000000000000000000000000000000000004
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061011b5760003560e01c80638da5cb5b116100b2578063cff8e7f711610081578063f2fde38b11610066578063f2fde38b146102b4578063f32a12ac146102c7578063f3cc660c146102da57600080fd5b8063cff8e7f714610283578063e30c39781461029657600080fd5b80638da5cb5b146101fb578063b0e21e8a14610219578063bc19a9e214610250578063c45a01551461026357600080fd5b80636e9821c2116100ee5780636e9821c2146101a5578063715018a6146101d857806372754262146101e057806379ba5097146101f357600080fd5b80634e91f8111461012057806350655d8c1461013557806354a0af171461017f57806358c0f72914610192575b600080fd5b61013361012e366004610ba8565b6102ed565b005b6004546101559073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013361018d366004610c2a565b61036d565b6101336101a0366004610d13565b6103f3565b6101c86101b3366004610d88565b60026020526000908152604090205460ff1681565b6040519015158152602001610176565b6101336105be565b6101336101ee366004610d13565b6105d2565b61013361070d565b60005473ffffffffffffffffffffffffffffffffffffffff16610155565b60045461023e9074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610176565b61013361025e366004610d88565b6107c7565b6003546101559073ffffffffffffffffffffffffffffffffffffffff1681565b610133610291366004610da3565b610816565b60015473ffffffffffffffffffffffffffffffffffffffff16610155565b6101336102c2366004610d88565b6108b4565b6101336102d5366004610deb565b610964565b6101336102e8366004610d88565b6109f6565b6102f5610a86565b60ff81161580610318575060048160ff16101580156103185750600a8160ff1611155b61032157600080fd5b6004805460ff90921674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b610375610a86565b60008373ffffffffffffffffffffffffffffffffffffffff16838360405161039d9190610e1c565b60006040518083038185875af1925050503d80600081146103da576040519150601f19603f3d011682016040523d82523d6000602084013e6103df565b606091505b50509050806103ed57600080fd5b50505050565b3360009081526002602052604090205460ff1661043c576040517fcf1119ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156105b957600083838381811061045b5761045b610e4b565b90506020020160208101906104709190610d88565b90506000808273ffffffffffffffffffffffffffffffffffffffff16631ad8b03b6040518163ffffffff1660e01b81526004016040805180830381865afa1580156104bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e39190610e9a565b600480546040517f85b6672900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216928101929092526fffffffffffffffffffffffffffffffff808516602484015283166044830152929450909250908416906385b667299060640160408051808303816000875af115801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190610e9a565b505050505080806105b190610ecd565b91505061043f565b505050565b6105c6610a86565b6105d06000610b07565b565b3360009081526002602052604090205460ff1661061b576040517fcf1119ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156105b957600083838381811061063a5761063a610e4b565b905060200201602081019061064f9190610d88565b600480546040517f8206a4d10000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910460ff16918101829052602481019190915290915073ffffffffffffffffffffffffffffffffffffffff821690638206a4d190604401600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b5050505050808061070590610ecd565b91505061061e565b600154339073ffffffffffffffffffffffffffffffffffffffff1681146107bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107c481610b07565b50565b6107cf610a86565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61081e610a86565b6003546040517f8a7c195f00000000000000000000000000000000000000000000000000000000815262ffffff84166004820152600283900b602482015273ffffffffffffffffffffffffffffffffffffffff90911690638a7c195f90604401600060405180830381600087803b15801561089857600080fd5b505af11580156108ac573d6000803e3d6000fd5b505050505050565b6108bc610a86565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561091f60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61096c610a86565b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f878d105ed19c01e992a54459c2f04ba19432ac45600b42ce340d034272207436910160405180910390a25050565b6109fe610a86565b6003546040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152909116906313af403590602401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556107c4816000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610bba57600080fd5b813560ff81168114610bcb57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bf657600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060608486031215610c3f57600080fd5b610c4884610bd2565b925060208401359150604084013567ffffffffffffffff80821115610c6c57600080fd5b818601915086601f830112610c8057600080fd5b813581811115610c9257610c92610bfb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610cd857610cd8610bfb565b81604052828152896020848701011115610cf157600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60008060208385031215610d2657600080fd5b823567ffffffffffffffff80821115610d3e57600080fd5b818501915085601f830112610d5257600080fd5b813581811115610d6157600080fd5b8660208260051b8501011115610d7657600080fd5b60209290920196919550909350505050565b600060208284031215610d9a57600080fd5b610bcb82610bd2565b60008060408385031215610db657600080fd5b823562ffffff81168114610dc957600080fd5b91506020830135600281900b8114610de057600080fd5b809150509250929050565b60008060408385031215610dfe57600080fd5b610e0783610bd2565b915060208301358015158114610de057600080fd5b6000825160005b81811015610e3d5760208186018101518583015201610e23565b506000920191825250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516fffffffffffffffffffffffffffffffff81168114610bf657600080fd5b60008060408385031215610ead57600080fd5b610eb683610e7a565b9150610ec460208401610e7a565b90509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610f25577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212202dbc58161e8fd329755b9bdedef9e6044e3de7c7a41a6828c3a647b22ab9e95c64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004bb4c1b0745ef7b4642feeccd0740dec417ca0a0000000000000000000000000203e8740894c8955cb8950759876d7e7e45e04c1000000000000000000000000dbeca8fb948c42634256609bce5a3768c9b3e9eb0000000000000000000000000000000000000000000000000000000000000004
-----Decoded View---------------
Arg [0] : _operator (address): 0x4bb4c1B0745ef7B4642fEECcd0740deC417ca0a0
Arg [1] : _factory (address): 0x203e8740894c8955cB8950759876d7E7E45E04c1
Arg [2] : _maker (address): 0xdbecA8FB948C42634256609BcE5A3768c9B3e9Eb
Arg [3] : _protocolFee (uint8): 4
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000004bb4c1b0745ef7b4642feeccd0740dec417ca0a0
Arg [1] : 000000000000000000000000203e8740894c8955cb8950759876d7e7e45e04c1
Arg [2] : 000000000000000000000000dbeca8fb948c42634256609bce5a3768c9b3e9eb
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004

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.