Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 15 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
19537485 | 100 days ago | 6.44550738 ETH | ||||
19537485 | 100 days ago | 6.44550738 ETH | ||||
19537470 | 100 days ago | 0.42877755 ETH | ||||
19537470 | 100 days ago | 0.42877755 ETH | ||||
18531276 | 241 days ago | 3.6129824 ETH | ||||
18531276 | 241 days ago | 3.6129824 ETH | ||||
18531275 | 241 days ago | 0.97315861 ETH | ||||
18531275 | 241 days ago | 0.97315861 ETH | ||||
17783061 | 346 days ago | 0.00005337 ETH | ||||
17783061 | 346 days ago | 0.00005337 ETH | ||||
17783057 | 346 days ago | 0.00053394 ETH | ||||
17783057 | 346 days ago | 0.00053394 ETH | ||||
17782474 | 346 days ago | 0.00005318 ETH | ||||
17782474 | 346 days ago | 0.00005318 ETH | ||||
17720272 | 355 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
UniSwapV3Adapter
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol"; import "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol"; import "@uniswap/v3-periphery/contracts/interfaces/IPeripheryImmutableState.sol"; import "../../interfaces/IWETH9.sol"; import "../../interfaces/ISwapAdapter.sol"; import "../../interfaces/IPriceOracle.sol"; contract UniSwapV3Adapter is ISwapAdapter, Ownable { ISwapRouter public immutable uniV3Router; address public immutable nativeToken; mapping(address => uint24) public poolFee; event PoolFeeSet(address indexed token, uint24 fee); receive() external payable {} constructor(address _uniV3Router, address _owner) { _transferOwnership(_owner); uniV3Router = ISwapRouter(_uniV3Router); nativeToken = IPeripheryImmutableState(_uniV3Router).WETH9(); } function setPoolFee(address token, uint24 fee) external onlyOwner { poolFee[token] = fee; emit PoolFeeSet(token, fee); } function swapToNative( address tokenIn, uint256 minAmountOut ) external override returns (uint256 amountOut) { return swapToNativeViaUniV3(tokenIn, minAmountOut); } function swapToNativeViaUniV3( address tokenIn, uint256 minAmountOut ) internal returns (uint256 amountOut) { uint256 tokenInBalance = IERC20(tokenIn).balanceOf(address(this)); TransferHelper.safeApprove(tokenIn, address(uniV3Router), 0); TransferHelper.safeApprove( tokenIn, address(uniV3Router), tokenInBalance ); ISwapRouter.ExactInputSingleParams memory params = ISwapRouter .ExactInputSingleParams({ tokenIn: tokenIn, tokenOut: nativeToken, fee: poolFee[tokenIn], recipient: address(this), deadline: block.timestamp, amountIn: tokenInBalance, amountOutMinimum: minAmountOut, sqrtPriceLimitX96: 0 }); amountOut = uniV3Router.exactInputSingle(params); IWETH9(nativeToken).withdraw(amountOut); payable(msg.sender).transfer(address(this).balance); } }
// 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 v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// 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-2.0-or-later pragma solidity >=0.5.0; /// @title Callback for IUniswapV3PoolActions#swap /// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface interface IUniswapV3SwapCallback { /// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap. /// @dev In the implementation you must pay the pool tokens owed for the swap. /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped. /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap call function uniswapV3SwapCallback( int256 amount0Delta, int256 amount1Delta, bytes calldata data ) external; }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.5.0; /// @title Immutable state /// @notice Functions that return immutable state of the router interface IPeripheryImmutableState { /// @return Returns the address of the Uniswap V3 factory function factory() external view returns (address); /// @return Returns the address of WETH9 function WETH9() external view returns (address); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.7.5; pragma abicoder v2; import '@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol'; /// @title Router token swapping functionality /// @notice Functions for swapping tokens via Uniswap V3 interface ISwapRouter is IUniswapV3SwapCallback { struct ExactInputSingleParams { address tokenIn; address tokenOut; uint24 fee; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; uint160 sqrtPriceLimitX96; } /// @notice Swaps `amountIn` of one token for as much as possible of another token /// @param params The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata /// @return amountOut The amount of the received token function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut); struct ExactInputParams { bytes path; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; } /// @notice Swaps `amountIn` of one token for as much as possible of another along the specified path /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata /// @return amountOut The amount of the received token function exactInput(ExactInputParams calldata params) external payable returns (uint256 amountOut); struct ExactOutputSingleParams { address tokenIn; address tokenOut; uint24 fee; address recipient; uint256 deadline; uint256 amountOut; uint256 amountInMaximum; uint160 sqrtPriceLimitX96; } /// @notice Swaps as little as possible of one token for `amountOut` of another token /// @param params The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata /// @return amountIn The amount of the input token function exactOutputSingle(ExactOutputSingleParams calldata params) external payable returns (uint256 amountIn); struct ExactOutputParams { bytes path; address recipient; uint256 deadline; uint256 amountOut; uint256 amountInMaximum; } /// @notice Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed) /// @param params The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata /// @return amountIn The amount of the input token function exactOutput(ExactOutputParams calldata params) external payable returns (uint256 amountIn); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.6.0; import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; library TransferHelper { /// @notice Transfers tokens from the targeted address to the given destination /// @notice Errors with 'STF' if transfer fails /// @param token The contract address of the token to be transferred /// @param from The originating address from which the tokens will be transferred /// @param to The destination address of the transfer /// @param value The amount to be transferred function safeTransferFrom( address token, address from, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'STF'); } /// @notice Transfers tokens from msg.sender to a recipient /// @dev Errors with ST if transfer fails /// @param token The contract address of the token which will be transferred /// @param to The recipient of the transfer /// @param value The value of the transfer function safeTransfer( address token, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'ST'); } /// @notice Approves the stipulated contract to spend the given allowance in the given token /// @dev Errors with 'SA' if transfer fails /// @param token The contract address of the token to be approved /// @param to The target of the approval /// @param value The amount of the given token the target will be allowed to spend function safeApprove( address token, address to, uint256 value ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA'); } /// @notice Transfers ETH to the recipient address /// @dev Fails with `STE` /// @param to The destination of the transfer /// @param value The value to be transferred function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'STE'); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; interface IPriceOracle { function exchangePrice( address _token ) external view returns (uint256 price, uint8 decimals); function exchangeRate( address token ) external view returns (uint256 exchangeRate); function getValueOf( address tokenIn, address quote, uint256 amountIn ) external view returns (uint256 value); } abstract contract PriceOracle is IPriceOracle, Ownable { mapping(address => address) internal priceFeed; mapping(address => uint256) internal decimals; address public constant NATIVE_TOKEN = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; constructor(address _owner) { _transferOwnership(_owner); } function setPriceFeed( address token, address aggregator ) external onlyOwner { require(aggregator != address(0), "Invalid aggregator address"); priceFeed[token] = aggregator; } function exchangePrice( address token ) public view virtual override returns (uint256 price, uint8 decimals); function exchangeRate( address token ) external view virtual override returns (uint256 price) { price = getValueOf(NATIVE_TOKEN, token, 1 ether); require(price != 0, "Price Oracle: Price is 0"); } function getValueOf( address tokenIn, address quote, uint256 amountIn ) public view virtual override returns (uint256 value) { (uint256 priceIn, uint8 decimalsIn) = exchangePrice(tokenIn); (uint256 priceQuote, uint8 decimalsQuote) = exchangePrice(quote); if ( decimalsIn + tokenDecimals(tokenIn) > decimalsQuote + tokenDecimals(quote) ) { value = (amountIn * priceIn) / (priceQuote * 10 ** (decimalsIn + tokenDecimals(tokenIn) - (tokenDecimals(quote) + decimalsQuote))); } else { value = ((amountIn * priceIn) * 10 ** (decimalsQuote + tokenDecimals(quote) - (tokenDecimals(tokenIn) + decimalsIn))) / priceQuote; } } function tokenDecimals(address _token) public view returns (uint256) { return decimals[_token] == 0 ? IERC20Metadata(_token).decimals() : decimals[_token]; } function setDecimals(address _token, uint256 _decimals) external onlyOwner { decimals[_token] = _decimals; } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.12; interface ISwapAdapter { function swapToNative( address tokenIn, uint256 minAmountOut ) external returns (uint256 amountOut); function nativeToken() external view returns (address); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.12; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /// @title Interface for WETH9 interface IWETH9 is IERC20 { /// @notice Deposit ether to get wrapped ether function deposit() external payable; /// @notice Withdraw wrapped ether to get ether function withdraw(uint256) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_uniV3Router","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"token","type":"address"},{"indexed":false,"internalType":"uint24","name":"fee","type":"uint24"}],"name":"PoolFeeSet","type":"event"},{"inputs":[],"name":"nativeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"}],"name":"setPoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"swapToNative","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV3Router","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b50604051610a7b380380610a7b83398101604081905261002f9161012f565b610038336100c3565b610041816100c3565b6001600160a01b0382166080819052604080516312a9293f60e21b81529051634aa4a4fc916004808201926020929091908290030181865afa15801561008b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100af9190610162565b6001600160a01b031660a052506101849050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461012a57600080fd5b919050565b6000806040838503121561014257600080fd5b61014b83610113565b915061015960208401610113565b90509250929050565b60006020828403121561017457600080fd5b61017d82610113565b9392505050565b60805160a0516108b06101cb600039600081816101690152818161049501526105d6015260008181609d0152818161042901528181610455015261054d01526108b06000f3fe60806040526004361061007f5760003560e01c8063e1758bd81161004e578063e1758bd814610157578063e9b883531461018b578063f0b20dcd146101b9578063f2fde38b146101d957600080fd5b80635fafa5891461008b578063715018a6146100dc57806389e99a3b146100f35780638da5cb5b1461013957600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100e857600080fd5b506100f16101f9565b005b3480156100ff57600080fd5b5061012561010e36600461078c565b60016020526000908152604090205462ffffff1681565b60405162ffffff90911681526020016100d3565b34801561014557600080fd5b506000546001600160a01b03166100bf565b34801561016357600080fd5b506100bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019757600080fd5b506101ab6101a63660046107a7565b61020d565b6040519081526020016100d3565b3480156101c557600080fd5b506100f16101d43660046107d1565b610220565b3480156101e557600080fd5b506100f16101f436600461078c565b61028c565b61020161030a565b61020b6000610364565b565b600061021983836103b4565b9392505050565b61022861030a565b6001600160a01b038216600081815260016020908152604091829020805462ffffff191662ffffff861690811790915591519182527f8e35d66247aa5aae9e6cc7403a79c742b7d8c6a4d5952c3ac2348635b0d52a2d910160405180910390a25050565b61029461030a565b6001600160a01b0381166102fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61030781610364565b50565b6000546001600160a01b0316331461020b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102f5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156103fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104219190610810565b905061044f847f00000000000000000000000000000000000000000000000000000000000000006000610670565b61047a847f000000000000000000000000000000000000000000000000000000000000000083610670565b60408051610100810182526001600160a01b038681168083527f0000000000000000000000000000000000000000000000000000000000000000821660208085019182526000928352600190528482205462ffffff9081168587019081523060608701908152426080880190815260a088018a815260c089018d815260e08a01978852995163414bf38960e01b8152895189166004820152955188166024870152925190931660448501525185166064840152905160848301525160a4820152935160c485015251811660e484015290917f00000000000000000000000000000000000000000000000000000000000000009091169063414bf38990610104016020604051808303816000875af1158015610599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bd9190610810565b604051632e1a7d4d60e01b8152600481018290529093507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b50506040513392504780156108fc029250906000818181858888f19350505050158015610667573d6000803e3d6000fd5b50505092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916106cc9190610829565b6000604051808303816000865af19150503d8060008114610709576040519150601f19603f3d011682016040523d82523d6000602084013e61070e565b606091505b50915091508180156107385750805115806107385750808060200190518101906107389190610858565b6107695760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016102f5565b5050505050565b80356001600160a01b038116811461078757600080fd5b919050565b60006020828403121561079e57600080fd5b61021982610770565b600080604083850312156107ba57600080fd5b6107c383610770565b946020939093013593505050565b600080604083850312156107e457600080fd5b6107ed83610770565b9150602083013562ffffff8116811461080557600080fd5b809150509250929050565b60006020828403121561082257600080fd5b5051919050565b6000825160005b8181101561084a5760208186018101518583015201610830565b506000920191825250919050565b60006020828403121561086a57600080fd5b8151801515811461021957600080fdfea2646970667358221220824e55344e87b42b28a375aee5b866d3e6ec0c3ec8dddf79e0c386501f35d63f64736f6c63430008110033000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000794b93902449c524c3158f9e101204ecb2057f2e
Deployed Bytecode
0x60806040526004361061007f5760003560e01c8063e1758bd81161004e578063e1758bd814610157578063e9b883531461018b578063f0b20dcd146101b9578063f2fde38b146101d957600080fd5b80635fafa5891461008b578063715018a6146100dc57806389e99a3b146100f35780638da5cb5b1461013957600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506100bf7f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100e857600080fd5b506100f16101f9565b005b3480156100ff57600080fd5b5061012561010e36600461078c565b60016020526000908152604090205462ffffff1681565b60405162ffffff90911681526020016100d3565b34801561014557600080fd5b506000546001600160a01b03166100bf565b34801561016357600080fd5b506100bf7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561019757600080fd5b506101ab6101a63660046107a7565b61020d565b6040519081526020016100d3565b3480156101c557600080fd5b506100f16101d43660046107d1565b610220565b3480156101e557600080fd5b506100f16101f436600461078c565b61028c565b61020161030a565b61020b6000610364565b565b600061021983836103b4565b9392505050565b61022861030a565b6001600160a01b038216600081815260016020908152604091829020805462ffffff191662ffffff861690811790915591519182527f8e35d66247aa5aae9e6cc7403a79c742b7d8c6a4d5952c3ac2348635b0d52a2d910160405180910390a25050565b61029461030a565b6001600160a01b0381166102fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61030781610364565b50565b6000546001600160a01b0316331461020b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102f5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156103fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104219190610810565b905061044f847f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615646000610670565b61047a847f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156483610670565b60408051610100810182526001600160a01b038681168083527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2821660208085019182526000928352600190528482205462ffffff9081168587019081523060608701908152426080880190815260a088018a815260c089018d815260e08a01978852995163414bf38960e01b8152895189166004820152955188166024870152925190931660448501525185166064840152905160848301525160a4820152935160c485015251811660e484015290917f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615649091169063414bf38990610104016020604051808303816000875af1158015610599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bd9190610810565b604051632e1a7d4d60e01b8152600481018290529093507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b50506040513392504780156108fc029250906000818181858888f19350505050158015610667573d6000803e3d6000fd5b50505092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916106cc9190610829565b6000604051808303816000865af19150503d8060008114610709576040519150601f19603f3d011682016040523d82523d6000602084013e61070e565b606091505b50915091508180156107385750805115806107385750808060200190518101906107389190610858565b6107695760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016102f5565b5050505050565b80356001600160a01b038116811461078757600080fd5b919050565b60006020828403121561079e57600080fd5b61021982610770565b600080604083850312156107ba57600080fd5b6107c383610770565b946020939093013593505050565b600080604083850312156107e457600080fd5b6107ed83610770565b9150602083013562ffffff8116811461080557600080fd5b809150509250929050565b60006020828403121561082257600080fd5b5051919050565b6000825160005b8181101561084a5760208186018101518583015201610830565b506000920191825250919050565b60006020828403121561086a57600080fd5b8151801515811461021957600080fdfea2646970667358221220824e55344e87b42b28a375aee5b866d3e6ec0c3ec8dddf79e0c386501f35d63f64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000794b93902449c524c3158f9e101204ecb2057f2e
-----Decoded View---------------
Arg [0] : _uniV3Router (address): 0xE592427A0AEce92De3Edee1F18E0157C05861564
Arg [1] : _owner (address): 0x794b93902449C524c3158f9e101204ECb2057f2e
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564
Arg [1] : 000000000000000000000000794b93902449c524c3158f9e101204ecb2057f2e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.