ETH Price: $2,697.12 (-1.75%)

Contract

0x86904Eb2b3c743400D03f929F2246EfA80B91215
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Swap In205335342024-08-15 10:48:2311 days ago1723718903IN
0x86904Eb2...A80B91215
0 ETH0.000846323.85535981
Swap In204027852024-07-28 4:54:4730 days ago1722142487IN
0x86904Eb2...A80B91215
0 ETH0.000525492.5
Swap In203844052024-07-25 15:17:3532 days ago1721920655IN
0x86904Eb2...A80B91215
0 ETH0.0023046610.5
Swap In203545802024-07-21 11:21:3536 days ago1721560895IN
0x86904Eb2...A80B91215
0 ETH0.000638162.99682929
Swap In203511112024-07-20 23:45:1137 days ago1721519111IN
0x86904Eb2...A80B91215
0 ETH0.000642043.05478537
Swap In203380282024-07-19 3:56:4739 days ago1721361407IN
0x86904Eb2...A80B91215
0 ETH0.001359826.38247203
Swap In203284862024-07-17 19:57:5940 days ago1721246279IN
0x86904Eb2...A80B91215
0 ETH0.00114195.5
Swap In203138492024-07-15 18:58:1142 days ago1721069891IN
0x86904Eb2...A80B91215
0 ETH0.0031267514.23985633
Swap In202996722024-07-13 19:28:4744 days ago1720898927IN
0x86904Eb2...A80B91215
0 ETH0.000522042.37781582
Swap In202968142024-07-13 9:53:1144 days ago1720864391IN
0x86904Eb2...A80B91215
0 ETH0.000543462.47686653
Swap In202965522024-07-13 9:00:4744 days ago1720861247IN
0x86904Eb2...A80B91215
0 ETH0.000527572.404554
Swap In202964882024-07-13 8:47:4744 days ago1720860467IN
0x86904Eb2...A80B91215
0 ETH0.000548532.5
Swap In202963902024-07-13 8:28:1144 days ago1720859291IN
0x86904Eb2...A80B91215
0 ETH0.000516052.3511252
Swap In202832132024-07-11 12:17:5946 days ago1720700279IN
0x86904Eb2...A80B91215
0 ETH0.001798118.44390621
Swap In202613932024-07-08 11:08:3549 days ago1720436915IN
0x86904Eb2...A80B91215
0 ETH0.000680373.1950438
Swap In202262532024-07-03 13:22:5954 days ago1720012979IN
0x86904Eb2...A80B91215
0 ETH0.0045541820.74874851
Swap In202261922024-07-03 13:10:4754 days ago1720012247IN
0x86904Eb2...A80B91215
0 ETH0.0051731524.5
Swap In202261662024-07-03 13:05:3554 days ago1720011935IN
0x86904Eb2...A80B91215
0 ETH0.0063878629.10425796
Swap In201753422024-06-26 10:43:4761 days ago1719398627IN
0x86904Eb2...A80B91215
0 ETH0.000997234.70120884
Swap In201618812024-06-24 13:36:4763 days ago1719236207IN
0x86904Eb2...A80B91215
0 ETH0.001621337.383547
Swap In201549822024-06-23 14:27:3564 days ago1719152855IN
0x86904Eb2...A80B91215
0 ETH0.000889554.05264546
Swap In201549312024-06-23 14:17:2364 days ago1719152243IN
0x86904Eb2...A80B91215
0 ETH0.000768393.5
Swap In201549222024-06-23 14:15:3564 days ago1719152135IN
0x86904Eb2...A80B91215
0 ETH0.000739253.5
Swap In201492542024-06-22 19:13:1165 days ago1719083591IN
0x86904Eb2...A80B91215
0 ETH0.000523252.38331268
Swap In201492282024-06-22 19:07:5965 days ago1719083279IN
0x86904Eb2...A80B91215
0 ETH0.000768423.5
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
206121362024-08-26 10:21:5919 hrs ago1724667719
0x86904Eb2...A80B91215
0.05344732 ETH
206121362024-08-26 10:21:5919 hrs ago1724667719
0x86904Eb2...A80B91215
0.00008029 ETH
206121362024-08-26 10:21:5919 hrs ago1724667719
0x86904Eb2...A80B91215
0.05352762 ETH
206000522024-08-24 17:48:592 days ago1724521739
0x86904Eb2...A80B91215
0.1759282 ETH
206000522024-08-24 17:48:592 days ago1724521739
0x86904Eb2...A80B91215
0.00026428 ETH
206000522024-08-24 17:48:592 days ago1724521739
0x86904Eb2...A80B91215
0.17619249 ETH
205644792024-08-19 18:31:597 days ago1724092319
0x86904Eb2...A80B91215
0.10078018 ETH
205644792024-08-19 18:31:597 days ago1724092319
0x86904Eb2...A80B91215
0.00015139 ETH
205644792024-08-19 18:31:597 days ago1724092319
0x86904Eb2...A80B91215
0.10093158 ETH
205642822024-08-19 17:52:237 days ago1724089943
0x86904Eb2...A80B91215
0.11088764 ETH
205642822024-08-19 17:52:237 days ago1724089943
0x86904Eb2...A80B91215
0.00016658 ETH
205642822024-08-19 17:52:237 days ago1724089943
0x86904Eb2...A80B91215
0.11105423 ETH
205504662024-08-17 19:35:359 days ago1723923335
0x86904Eb2...A80B91215
0.06324992 ETH
205504662024-08-17 19:35:359 days ago1723923335
0x86904Eb2...A80B91215
0.00009501 ETH
205504662024-08-17 19:35:359 days ago1723923335
0x86904Eb2...A80B91215
0.06334494 ETH
205430132024-08-16 18:34:2310 days ago1723833263
0x86904Eb2...A80B91215
0.19255678 ETH
205430132024-08-16 18:34:2310 days ago1723833263
0x86904Eb2...A80B91215
0.00028926 ETH
205430132024-08-16 18:34:2310 days ago1723833263
0x86904Eb2...A80B91215
0.19284605 ETH
205368532024-08-15 21:57:3511 days ago1723759055
0x86904Eb2...A80B91215
0.0616231 ETH
205368532024-08-15 21:57:3511 days ago1723759055
0x86904Eb2...A80B91215
0.00009257 ETH
205368532024-08-15 21:57:3511 days ago1723759055
0x86904Eb2...A80B91215
0.06171568 ETH
205364432024-08-15 20:34:2311 days ago1723754063
0x86904Eb2...A80B91215
0.04319949 ETH
205364432024-08-15 20:34:2311 days ago1723754063
0x86904Eb2...A80B91215
0.00006489 ETH
205364432024-08-15 20:34:2311 days ago1723754063
0x86904Eb2...A80B91215
0.04326439 ETH
205335342024-08-15 10:48:2311 days ago1723718903
0x86904Eb2...A80B91215
0.16778194 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TSAggregatorUniswapV2

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 8 : TSAggregatorUniswapV2.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

import { SafeTransferLib } from "../lib/SafeTransferLib.sol";
import { TSAggregator } from "./TSAggregator.sol";
import { IThorchainRouter } from "./interfaces/IThorchainRouter.sol";
import { IUniswapRouterV2 } from "./interfaces/IUniswapRouterV2.sol";

contract TSAggregatorUniswapV2 is TSAggregator {
    using SafeTransferLib for address;

    address public weth;
    IUniswapRouterV2 public swapRouter;

    constructor(
      address _ttp, address _weth, address _swapRouter
    ) TSAggregator(_ttp) {
        weth = _weth;
        swapRouter = IUniswapRouterV2(_swapRouter);
    }

    function swapIn(
        address tcRouter,
        address tcVault,
        string calldata tcMemo,
        address token,
        uint amount,
        uint amountOutMin,
        uint deadline
    ) public nonReentrant {
        tokenTransferProxy.transferTokens(token, msg.sender, address(this), amount);
        token.safeApprove(address(swapRouter), 0); // USDT quirk
        token.safeApprove(address(swapRouter), amount);

        address[] memory path = new address[](2);
        path[0] = token;
        path[1] = weth;
        swapRouter.swapExactTokensForETH(
            amount,
            amountOutMin,
            path,
            address(this),
            deadline
        );

        uint amountOut = skimFee(address(this).balance);
        IThorchainRouter(tcRouter).depositWithExpiry{value: amountOut}(
            payable(tcVault),
            address(0), // ETH
            amountOut,
            tcMemo,
            deadline
        );
    }

    function swapOut(address token, address to, uint256 amountOutMin) public payable nonReentrant {
        uint256 amount = skimFee(msg.value);
        address[] memory path = new address[](2);
        path[0] = weth;
        path[1] = token;
        swapRouter.swapExactETHForTokens{value: amount}(
            _parseAmountOutMin(amountOutMin),
            path,
            to,
            type(uint).max // deadline
        );
    }
}

File 2 of 8 : SafeTransferLib.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)
/// @author Modified from Gnosis (https://github.com/gnosis/gp-v2-contracts/blob/main/src/contracts/libraries/GPv2SafeERC20.sol)
/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.
library SafeTransferLib {
    /*///////////////////////////////////////////////////////////////
                            ETH OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferETH(address to, uint256 amount) internal {
        bool callStatus;

        assembly {
            // Transfer the ETH and store if it succeeded or not.
            callStatus := call(gas(), to, amount, 0, 0, 0, 0)
        }

        require(callStatus, "ETH_TRANSFER_FAILED");
    }

    /*///////////////////////////////////////////////////////////////
                           ERC20 OPERATIONS
    //////////////////////////////////////////////////////////////*/

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "from" argument.
            mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 68), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 100 because the calldata length is 4 + 32 * 3.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FROM_FAILED");
    }

    function safeTransfer(
        address token,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 68 because the calldata length is 4 + 32 * 2.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FAILED");
    }

    function safeApprove(
        address token,
        address to,
        uint256 amount
    ) internal {
        bool callStatus;

        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata to memory piece by piece:
            mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) // Begin with the function selector.
            mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument.
            mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value.

            // Call the token and store if it succeeded or not.
            // We use 68 because the calldata length is 4 + 32 * 2.
            callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)
        }

        require(didLastOptionalReturnCallSucceed(callStatus), "APPROVE_FAILED");
    }

    /*///////////////////////////////////////////////////////////////
                         INTERNAL HELPER LOGIC
    //////////////////////////////////////////////////////////////*/

    function didLastOptionalReturnCallSucceed(bool callStatus) private pure returns (bool success) {
        assembly {
            // Get how many bytes the call returned.
            let returnDataSize := returndatasize()

            // If the call reverted:
            if iszero(callStatus) {
                // Copy the revert message into memory.
                returndatacopy(0, 0, returnDataSize)

                // Revert with the same message.
                revert(0, returnDataSize)
            }

            switch returnDataSize
            case 32 {
                // Copy the return data into memory.
                returndatacopy(0, 0, returnDataSize)

                // Set success to whether it returned true.
                success := iszero(iszero(mload(0)))
            }
            case 0 {
                // There was no return data.
                success := 1
            }
            default {
                // It returned some malformed input.
                success := 0
            }
        }
    }
}

File 3 of 8 : TSAggregator.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

import { SafeTransferLib } from "../lib/SafeTransferLib.sol";
import { ReentrancyGuard } from "../lib/ReentrancyGuard.sol";
import { Owners } from "./Owners.sol";
import { TSAggregatorTokenTransferProxy } from './TSAggregatorTokenTransferProxy.sol';

abstract contract TSAggregator is Owners, ReentrancyGuard {
    using SafeTransferLib for address;

    event FeeSet(uint256 fee, address feeRecipient);

    uint256 public fee;
    address public feeRecipient;
    TSAggregatorTokenTransferProxy public tokenTransferProxy;

    constructor(address _tokenTransferProxy) {
        _setOwner(msg.sender, true);
        tokenTransferProxy = TSAggregatorTokenTransferProxy(_tokenTransferProxy);
    }

    // Needed for the swap router to be able to send back ETH
    receive() external payable {}

    function setFee(uint256 _fee, address _feeRecipient) external isOwner {
        require(_fee <= 1000, "fee can not be more than 10%");
        fee = _fee;
        feeRecipient = _feeRecipient;
        emit FeeSet(_fee, _feeRecipient);
    }

    function skimFee(uint256 amount) internal returns (uint256) {
        if (fee != 0 && feeRecipient != address(0)) {
            uint256 feeAmount = (amount * fee) / 10000;
            feeRecipient.safeTransferETH(feeAmount);
            amount -= feeAmount;
        }
        return amount;
    }

    // Parse amountOutMin treating the last 2 digits as an exponent
    // So 15e4 = 150000. This allows for compressed memos on chains
    // with limited space like Bitcoin
    function _parseAmountOutMin(uint256 amount) internal pure returns (uint256) {
      return amount / 100 * (10 ** (amount % 100));
    }
}

File 4 of 8 : IThorchainRouter.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

interface IThorchainRouter {
    function depositWithExpiry(
        address payable vault,
        address asset,
        uint amount,
        string memory memo,
        uint expiration
    ) external payable;
}

File 5 of 8 : IUniswapRouterV2.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

interface IUniswapRouterV2 {
    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to, uint deadline
    ) external payable;
}

File 6 of 8 : ReentrancyGuard.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Gas optimized reentrancy protection for smart contracts.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/ReentrancyGuard.sol)
/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol)
abstract contract ReentrancyGuard {
    uint256 private locked = 1;

    modifier nonReentrant() {
        require(locked == 1, "REENTRANCY");

        locked = 2;

        _;

        locked = 1;
    }
}

File 7 of 8 : Owners.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

abstract contract Owners {
    event OwnerSet(address indexed owner, bool active);

    mapping(address => bool) public owners;

    modifier isOwner() {
        require(owners[msg.sender], "Unauthorized");
        _;
    }

    function _setOwner(address owner, bool active) internal virtual {
      owners[owner] = active;
      emit OwnerSet(owner, active);
    }

    function setOwner(address owner, bool active) external virtual isOwner {
      _setOwner(owner, active);
    }
}

File 8 of 8 : TSAggregatorTokenTransferProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

import { SafeTransferLib } from "../lib/SafeTransferLib.sol";
import { Owners } from "./Owners.sol";

contract TSAggregatorTokenTransferProxy is Owners {
    using SafeTransferLib for address;

    constructor() {
        _setOwner(msg.sender, true);
    }

    function transferTokens(address token, address from, address to, uint256 amount) external isOwner {
        require(from == tx.origin || _isContract(from), "Invalid from address");
        token.safeTransferFrom(from, to, amount);
    }

    function _isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

Settings
{
  "remappings": [
    "hardhat/=node_modules/hardhat/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_ttp","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_swapRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"feeRecipient","type":"address"}],"name":"FeeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"OwnerSet","type":"event"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"owners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"address","name":"_feeRecipient","type":"address"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tcRouter","type":"address"},{"internalType":"address","name":"tcVault","type":"address"},{"internalType":"string","name":"tcMemo","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"}],"name":"swapOut","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapRouterV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenTransferProxy","outputs":[{"internalType":"contract TSAggregatorTokenTransferProxy","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001805534801561001457600080fd5b50604051610ef6380380610ef6833981016040819052610033916100f9565b8261003f336001610080565b600480546001600160a01b03199081166001600160a01b0393841617909155600580548216948316949094179093556006805490931691161790555061013c565b6001600160a01b03821660008181526020818152604091829020805460ff191685151590811790915591519182527ff74826f11048fa8ecf33e91132bf280f6582ed97548a84e426b56e98526b9316910160405180910390a25050565b80516001600160a01b03811681146100f457600080fd5b919050565b60008060006060848603121561010e57600080fd5b610117846100dd565b9250610125602085016100dd565b9150610133604085016100dd565b90509250925092565b610dab8061014b6000396000f3fe6080604052600436106100955760003560e01c8063516c731c11610059578063516c731c14610173578063b4f2e8b814610193578063c31c9c07146101b3578063ddca3f43146101d3578063e4d0c7f0146101f757600080fd5b8063022914a7146100a15780630eefdbad146100e65780633fc8cef31461011e578063469048401461013e57806348c314f41461015e57600080fd5b3661009c57005b600080fd5b3480156100ad57600080fd5b506100d16100bc366004610950565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156100f257600080fd5b50600454610106906001600160a01b031681565b6040516001600160a01b0390911681526020016100dd565b34801561012a57600080fd5b50600554610106906001600160a01b031681565b34801561014a57600080fd5b50600354610106906001600160a01b031681565b61017161016c366004610972565b610217565b005b34801561017f57600080fd5b5061017161018e3660046109ae565b61036f565b34801561019f57600080fd5b506101716101ae3660046109ea565b6103cb565b3480156101bf57600080fd5b50600654610106906001600160a01b031681565b3480156101df57600080fd5b506101e960025481565b6040519081526020016100dd565b34801561020357600080fd5b50610171610212366004610a16565b6104cc565b60015460011461025b5760405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b60448201526064015b60405180910390fd5b6002600155600061026b3461071d565b6040805160028082526060820183529293506000929091602083019080368337505060055482519293506001600160a01b0316918391506000906102b1576102b1610ad5565b60200260200101906001600160a01b031690816001600160a01b03168152505084816001815181106102e5576102e5610ad5565b6001600160a01b03928316602091820292909201015260065416637ff36ab58361030e86610789565b84886000196040518663ffffffff1660e01b81526004016103329493929190610b2f565b6000604051808303818588803b15801561034b57600080fd5b505af115801561035f573d6000803e3d6000fd5b5050600180555050505050505050565b3360009081526020819052604090205460ff166103bd5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610252565b6103c782826107bc565b5050565b3360009081526020819052604090205460ff166104195760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610252565b6103e882111561046b5760405162461bcd60e51b815260206004820152601c60248201527f6665652063616e206e6f74206265206d6f7265207468616e20313025000000006044820152606401610252565b6002829055600380546001600160a01b0319166001600160a01b0383169081179091556040805184815260208101929092527fc8242dc5446855370b781abbfc5d882af1d1a3cc29143216aba3558feb0ce925910160405180910390a15050565b60015460011461050b5760405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b6044820152606401610252565b6002600155600480546040516368155ec160e01b81526001600160a01b0387811693820193909352336024820152306044820152606481018690529116906368155ec190608401600060405180830381600087803b15801561056c57600080fd5b505af1158015610580573d6000803e3d6000fd5b505060065461059f92506001600160a01b038781169250166000610819565b6006546105b9906001600160a01b03868116911685610819565b60408051600280825260608201835260009260208301908036833701905050905084816000815181106105ee576105ee610ad5565b6001600160a01b03928316602091820292909201015260055482519116908290600190811061061f5761061f610ad5565b6001600160a01b0392831660209182029290920101526006546040516318cbafe560e01b81529116906318cbafe5906106649087908790869030908990600401610b64565b600060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b5050505060006106a14761071d565b9050896001600160a01b03166344bc937b828b6000858d8d8a6040518863ffffffff1660e01b81526004016106db96959493929190610ba0565b6000604051808303818588803b1580156106f457600080fd5b505af1158015610708573d6000803e3d6000fd5b50506001805550505050505050505050505050565b600060025460001415801561073c57506003546001600160a01b031615155b15610785576000612710600254846107549190610c11565b61075e9190610c46565b600354909150610777906001600160a01b031682610897565b6107818184610c5a565b9250505b5090565b6000610796606483610c71565b6107a190600a610d69565b6107ac606484610c46565b6107b69190610c11565b92915050565b6001600160a01b03821660008181526020818152604091829020805460ff191685151590811790915591519182527ff74826f11048fa8ecf33e91132bf280f6582ed97548a84e426b56e98526b9316910160405180910390a25050565b600060405163095ea7b360e01b81526001600160a01b03841660048201528260248201526000806044836000895af1915050610854816108ed565b6108915760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606401610252565b50505050565b600080600080600085875af19050806108e85760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610252565b505050565b60003d826108ff57806000803e806000fd5b8060208114610917578015610928576000925061092d565b816000803e6000511515925061092d565b600192505b5050919050565b80356001600160a01b038116811461094b57600080fd5b919050565b60006020828403121561096257600080fd5b61096b82610934565b9392505050565b60008060006060848603121561098757600080fd5b61099084610934565b925061099e60208501610934565b9150604084013590509250925092565b600080604083850312156109c157600080fd5b6109ca83610934565b9150602083013580151581146109df57600080fd5b809150509250929050565b600080604083850312156109fd57600080fd5b82359150610a0d60208401610934565b90509250929050565b60008060008060008060008060e0898b031215610a3257600080fd5b610a3b89610934565b9750610a4960208a01610934565b9650604089013567ffffffffffffffff80821115610a6657600080fd5b818b0191508b601f830112610a7a57600080fd5b813581811115610a8957600080fd5b8c6020828501011115610a9b57600080fd5b602083019850809750505050610ab360608a01610934565b979a96995094979396956080850135955060a08501359460c001359350915050565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015610b245781516001600160a01b031687529582019590820190600101610aff565b509495945050505050565b848152608060208201526000610b486080830186610aeb565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201526000610b8360a0830186610aeb565b6001600160a01b0394909416606083015250608001529392505050565b6001600160a01b038781168252861660208201526040810185905260a06060820181905281018390526000838560c0840137600060c0858401015260c0601f19601f8601168301019050826080830152979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610c2b57610c2b610bfb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082610c5557610c55610c30565b500490565b600082821015610c6c57610c6c610bfb565b500390565b600082610c8057610c80610c30565b500690565b600181815b80851115610cc0578160001904821115610ca657610ca6610bfb565b80851615610cb357918102915b93841c9390800290610c8a565b509250929050565b600082610cd7575060016107b6565b81610ce4575060006107b6565b8160018114610cfa5760028114610d0457610d20565b60019150506107b6565b60ff841115610d1557610d15610bfb565b50506001821b6107b6565b5060208310610133831016604e8410600b8410161715610d43575081810a6107b6565b610d4d8383610c85565b8060001904821115610d6157610d61610bfb565b029392505050565b600061096b8383610cc856fea2646970667358221220d2975fdb5b4c71988e19fed9f01d9c2be1118bfdb85b0cb94be273e9328c2d2964736f6c634300080a0033000000000000000000000000f892fef9da200d9e84c9b0647ecff0f34633abe8000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106100955760003560e01c8063516c731c11610059578063516c731c14610173578063b4f2e8b814610193578063c31c9c07146101b3578063ddca3f43146101d3578063e4d0c7f0146101f757600080fd5b8063022914a7146100a15780630eefdbad146100e65780633fc8cef31461011e578063469048401461013e57806348c314f41461015e57600080fd5b3661009c57005b600080fd5b3480156100ad57600080fd5b506100d16100bc366004610950565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156100f257600080fd5b50600454610106906001600160a01b031681565b6040516001600160a01b0390911681526020016100dd565b34801561012a57600080fd5b50600554610106906001600160a01b031681565b34801561014a57600080fd5b50600354610106906001600160a01b031681565b61017161016c366004610972565b610217565b005b34801561017f57600080fd5b5061017161018e3660046109ae565b61036f565b34801561019f57600080fd5b506101716101ae3660046109ea565b6103cb565b3480156101bf57600080fd5b50600654610106906001600160a01b031681565b3480156101df57600080fd5b506101e960025481565b6040519081526020016100dd565b34801561020357600080fd5b50610171610212366004610a16565b6104cc565b60015460011461025b5760405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b60448201526064015b60405180910390fd5b6002600155600061026b3461071d565b6040805160028082526060820183529293506000929091602083019080368337505060055482519293506001600160a01b0316918391506000906102b1576102b1610ad5565b60200260200101906001600160a01b031690816001600160a01b03168152505084816001815181106102e5576102e5610ad5565b6001600160a01b03928316602091820292909201015260065416637ff36ab58361030e86610789565b84886000196040518663ffffffff1660e01b81526004016103329493929190610b2f565b6000604051808303818588803b15801561034b57600080fd5b505af115801561035f573d6000803e3d6000fd5b5050600180555050505050505050565b3360009081526020819052604090205460ff166103bd5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610252565b6103c782826107bc565b5050565b3360009081526020819052604090205460ff166104195760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610252565b6103e882111561046b5760405162461bcd60e51b815260206004820152601c60248201527f6665652063616e206e6f74206265206d6f7265207468616e20313025000000006044820152606401610252565b6002829055600380546001600160a01b0319166001600160a01b0383169081179091556040805184815260208101929092527fc8242dc5446855370b781abbfc5d882af1d1a3cc29143216aba3558feb0ce925910160405180910390a15050565b60015460011461050b5760405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b6044820152606401610252565b6002600155600480546040516368155ec160e01b81526001600160a01b0387811693820193909352336024820152306044820152606481018690529116906368155ec190608401600060405180830381600087803b15801561056c57600080fd5b505af1158015610580573d6000803e3d6000fd5b505060065461059f92506001600160a01b038781169250166000610819565b6006546105b9906001600160a01b03868116911685610819565b60408051600280825260608201835260009260208301908036833701905050905084816000815181106105ee576105ee610ad5565b6001600160a01b03928316602091820292909201015260055482519116908290600190811061061f5761061f610ad5565b6001600160a01b0392831660209182029290920101526006546040516318cbafe560e01b81529116906318cbafe5906106649087908790869030908990600401610b64565b600060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b5050505060006106a14761071d565b9050896001600160a01b03166344bc937b828b6000858d8d8a6040518863ffffffff1660e01b81526004016106db96959493929190610ba0565b6000604051808303818588803b1580156106f457600080fd5b505af1158015610708573d6000803e3d6000fd5b50506001805550505050505050505050505050565b600060025460001415801561073c57506003546001600160a01b031615155b15610785576000612710600254846107549190610c11565b61075e9190610c46565b600354909150610777906001600160a01b031682610897565b6107818184610c5a565b9250505b5090565b6000610796606483610c71565b6107a190600a610d69565b6107ac606484610c46565b6107b69190610c11565b92915050565b6001600160a01b03821660008181526020818152604091829020805460ff191685151590811790915591519182527ff74826f11048fa8ecf33e91132bf280f6582ed97548a84e426b56e98526b9316910160405180910390a25050565b600060405163095ea7b360e01b81526001600160a01b03841660048201528260248201526000806044836000895af1915050610854816108ed565b6108915760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606401610252565b50505050565b600080600080600085875af19050806108e85760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610252565b505050565b60003d826108ff57806000803e806000fd5b8060208114610917578015610928576000925061092d565b816000803e6000511515925061092d565b600192505b5050919050565b80356001600160a01b038116811461094b57600080fd5b919050565b60006020828403121561096257600080fd5b61096b82610934565b9392505050565b60008060006060848603121561098757600080fd5b61099084610934565b925061099e60208501610934565b9150604084013590509250925092565b600080604083850312156109c157600080fd5b6109ca83610934565b9150602083013580151581146109df57600080fd5b809150509250929050565b600080604083850312156109fd57600080fd5b82359150610a0d60208401610934565b90509250929050565b60008060008060008060008060e0898b031215610a3257600080fd5b610a3b89610934565b9750610a4960208a01610934565b9650604089013567ffffffffffffffff80821115610a6657600080fd5b818b0191508b601f830112610a7a57600080fd5b813581811115610a8957600080fd5b8c6020828501011115610a9b57600080fd5b602083019850809750505050610ab360608a01610934565b979a96995094979396956080850135955060a08501359460c001359350915050565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015610b245781516001600160a01b031687529582019590820190600101610aff565b509495945050505050565b848152608060208201526000610b486080830186610aeb565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201526000610b8360a0830186610aeb565b6001600160a01b0394909416606083015250608001529392505050565b6001600160a01b038781168252861660208201526040810185905260a06060820181905281018390526000838560c0840137600060c0858401015260c0601f19601f8601168301019050826080830152979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610c2b57610c2b610bfb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082610c5557610c55610c30565b500490565b600082821015610c6c57610c6c610bfb565b500390565b600082610c8057610c80610c30565b500690565b600181815b80851115610cc0578160001904821115610ca657610ca6610bfb565b80851615610cb357918102915b93841c9390800290610c8a565b509250929050565b600082610cd7575060016107b6565b81610ce4575060006107b6565b8160018114610cfa5760028114610d0457610d20565b60019150506107b6565b60ff841115610d1557610d15610bfb565b50506001821b6107b6565b5060208310610133831016604e8410600b8410161715610d43575081810a6107b6565b610d4d8383610c85565b8060001904821115610d6157610d61610bfb565b029392505050565b600061096b8383610cc856fea2646970667358221220d2975fdb5b4c71988e19fed9f01d9c2be1118bfdb85b0cb94be273e9328c2d2964736f6c634300080a0033

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

000000000000000000000000f892fef9da200d9e84c9b0647ecff0f34633abe8000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _ttp (address): 0xF892Fef9dA200d9E84c9b0647ecFF0F34633aBe8
Arg [1] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : _swapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f892fef9da200d9e84c9b0647ecff0f34633abe8
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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