ETH Price: $3,642.99 (-0.45%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Swap In213625702024-12-09 4:31:4727 days ago1733718707IN
0x11733abf...51a9A9Ef2
0 ETH0.002834649.49554963
Swap In212675722024-11-25 21:52:4741 days ago1732571567IN
0x11733abf...51a9A9Ef2
0 ETH0.00232789.97175949
Swap In212549512024-11-24 3:34:4742 days ago1732419287IN
0x11733abf...51a9A9Ef2
0 ETH0.0020484910.01576235
Swap In212539972024-11-24 0:23:3542 days ago1732407815IN
0x11733abf...51a9A9Ef2
0 ETH0.0033389810.89113132
Swap In212528302024-11-23 20:28:5943 days ago1732393739IN
0x11733abf...51a9A9Ef2
0 ETH0.004215115.31619055
Swap In212491682024-11-23 8:13:1143 days ago1732349591IN
0x11733abf...51a9A9Ef2
0 ETH0.0024150211.28155847
Swap In212441892024-11-22 15:32:3544 days ago1732289555IN
0x11733abf...51a9A9Ef2
0 ETH0.0032393215.3342509
Swap In212409202024-11-22 4:35:3544 days ago1732250135IN
0x11733abf...51a9A9Ef2
0 ETH0.0033303415.07202747
Swap In212408682024-11-22 4:24:5944 days ago1732249499IN
0x11733abf...51a9A9Ef2
0 ETH0.0025475311.78149681
Swap In212160302024-11-18 17:14:5948 days ago1731950099IN
0x11733abf...51a9A9Ef2
0 ETH0.0050236422.82439172
Swap In211955932024-11-15 20:51:4751 days ago1731703907IN
0x11733abf...51a9A9Ef2
0 ETH0.0058428627.3114156
Swap In211921552024-11-15 9:18:5951 days ago1731662339IN
0x11733abf...51a9A9Ef2
0 ETH0.0036696517.38563196
Swap In211833102024-11-14 3:41:1152 days ago1731555671IN
0x11733abf...51a9A9Ef2
0 ETH0.0106491438.99814389
Swap In211804012024-11-13 17:55:5953 days ago1731520559IN
0x11733abf...51a9A9Ef2
0 ETH0.0179469581.36292235
Swap In211803642024-11-13 17:48:3553 days ago1731520115IN
0x11733abf...51a9A9Ef2
0 ETH0.0246624681.52422945
Swap In211802932024-11-13 17:34:2353 days ago1731519263IN
0x11733abf...51a9A9Ef2
0 ETH0.0191938287.33675314
Swap In211747622024-11-12 23:02:4753 days ago1731452567IN
0x11733abf...51a9A9Ef2
0 ETH0.0063101128.54971444
Swap In211614092024-11-11 2:19:3555 days ago1731291575IN
0x11733abf...51a9A9Ef2
0 ETH0.0032618715.53401288
Swap In211609312024-11-11 0:43:2355 days ago1731285803IN
0x11733abf...51a9A9Ef2
0 ETH0.0031778715.57507377
Swap In211514072024-11-09 16:51:4757 days ago1731171107IN
0x11733abf...51a9A9Ef2
0 ETH0.0025188511.40182141
Swap In210912202024-11-01 7:11:5965 days ago1730445119IN
0x11733abf...51a9A9Ef2
0 ETH0.0017078.1673499
Swap In210074512024-10-20 14:41:1177 days ago1729435271IN
0x11733abf...51a9A9Ef2
0 ETH0.0039536319.22581099
Swap In209040982024-10-06 4:23:2391 days ago1728188603IN
0x11733abf...51a9A9Ef2
0 ETH0.000841623.80858295
Swap In208992802024-10-05 12:17:1192 days ago1728130631IN
0x11733abf...51a9A9Ef2
0 ETH0.00119095.74626702
Swap In208245872024-09-25 2:17:35102 days ago1727230655IN
0x11733abf...51a9A9Ef2
0 ETH0.0042247821.08292783
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
213625702024-12-09 4:31:4727 days ago1733718707
0x11733abf...51a9A9Ef2
0.19571196 ETH
213625702024-12-09 4:31:4727 days ago1733718707
0x11733abf...51a9A9Ef2
0.000294 ETH
213625702024-12-09 4:31:4727 days ago1733718707
0x11733abf...51a9A9Ef2
0.19600596 ETH
213275872024-12-04 7:17:3532 days ago1733296655
0x11733abf...51a9A9Ef2
0.30718775 ETH
213275872024-12-04 7:17:3532 days ago1733296655
0x11733abf...51a9A9Ef2
0.00046147 ETH
213275872024-12-04 7:17:3532 days ago1733296655
0x11733abf...51a9A9Ef2
0.30764923 ETH
212675722024-11-25 21:52:4741 days ago1732571567
0x11733abf...51a9A9Ef2
1.30137934 ETH
212675722024-11-25 21:52:4741 days ago1732571567
0x11733abf...51a9A9Ef2
0.001955 ETH
212675722024-11-25 21:52:4741 days ago1732571567
0x11733abf...51a9A9Ef2
1.30333434 ETH
212549512024-11-24 3:34:4742 days ago1732419287
0x11733abf...51a9A9Ef2
0.00525777 ETH
212549512024-11-24 3:34:4742 days ago1732419287
0x11733abf...51a9A9Ef2
0.00000789 ETH
212549512024-11-24 3:34:4742 days ago1732419287
0x11733abf...51a9A9Ef2
0.00526567 ETH
212539972024-11-24 0:23:3542 days ago1732407815
0x11733abf...51a9A9Ef2
0.0391843 ETH
212539972024-11-24 0:23:3542 days ago1732407815
0x11733abf...51a9A9Ef2
0.00005886 ETH
212539972024-11-24 0:23:3542 days ago1732407815
0x11733abf...51a9A9Ef2
0.03924316 ETH
212527942024-11-23 20:21:4743 days ago1732393307
0x11733abf...51a9A9Ef2
0.02457907 ETH
212527942024-11-23 20:21:4743 days ago1732393307
0x11733abf...51a9A9Ef2
0.00003692 ETH
212527942024-11-23 20:21:4743 days ago1732393307
0x11733abf...51a9A9Ef2
0.024616 ETH
212491682024-11-23 8:13:1143 days ago1732349591
0x11733abf...51a9A9Ef2
0.01329416 ETH
212491682024-11-23 8:13:1143 days ago1732349591
0x11733abf...51a9A9Ef2
0.00001997 ETH
212491682024-11-23 8:13:1143 days ago1732349591
0x11733abf...51a9A9Ef2
0.01331413 ETH
212460792024-11-22 21:52:5944 days ago1732312379
0x11733abf...51a9A9Ef2
0.00341684 ETH
212460792024-11-22 21:52:5944 days ago1732312379
0x11733abf...51a9A9Ef2
0.00000513 ETH
212460792024-11-22 21:52:5944 days ago1732312379
0x11733abf...51a9A9Ef2
0.00342198 ETH
212441892024-11-22 15:32:3544 days ago1732289555
0x11733abf...51a9A9Ef2
0.18670686 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xBd68cBe6...914f26Ee8
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
TSAggregatorUniswapV3

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

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

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

contract TSAggregatorUniswapV3 is TSAggregator {
    using SafeTransferLib for address;

    IWETH9 public weth;
    uint24 public poolFee;
    IUniswapRouterV3 public swapRouter;

    constructor(
        address _ttp, address _weth, address _swapRouter, uint24 _poolFee
    ) TSAggregator(_ttp) {
        weth = IWETH9(_weth);
        poolFee = _poolFee;
        swapRouter = IUniswapRouterV3(_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);

        uint amountOut = swapRouter.exactInputSingle(IUniswapRouterV3.ExactInputSingleParams({
            tokenIn: token,
            tokenOut: address(weth),
            fee: poolFee,
            recipient: address(this),
            deadline: deadline,
            amountIn: amount,
            amountOutMinimum: amountOutMin,
            sqrtPriceLimitX96: 0
        }));
        weth.withdraw(amountOut);

        amountOut = skimFee(amountOut);
        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);
        weth.deposit{value: amount}();
        address(weth).safeApprove(address(swapRouter), amount);
        swapRouter.exactInputSingle(IUniswapRouterV3.ExactInputSingleParams({
            tokenIn: address(weth),
            tokenOut: token,
            fee: poolFee,
            recipient: to,
            deadline: type(uint).max,
            amountIn: amount,
            amountOutMinimum: _parseAmountOutMin(amountOutMin),
            sqrtPriceLimitX96: 0
        }));
    }
}

File 2 of 9 : 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 9 : IWETH9.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

interface IWETH9 {
    function deposit() external payable;
    function withdraw(uint256) external;
}

File 4 of 9 : 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 5 of 9 : 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 6 of 9 : IUniswapRouterV3.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

interface IUniswapRouterV3 {
    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
        uint160 sqrtPriceLimitX96;
    }

    struct ExactInputParams {
        bytes path;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
    }

    function exactInputSingle(
        ExactInputSingleParams calldata params
    ) external returns (uint256 amountOut);

    function exactInput(
        ExactInputParams calldata params
    ) external returns (uint256 amountOut);
}

File 7 of 9 : 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 8 of 9 : 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 9 of 9 : 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"},{"internalType":"uint24","name":"_poolFee","type":"uint24"}],"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":[],"name":"poolFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"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 IUniswapRouterV3","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":"contract IWETH9","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x6080604052600436106100a05760003560e01c806348c314f41161006457806348c314f4146101a0578063516c731c146101b5578063b4f2e8b8146101d5578063c31c9c07146101f5578063ddca3f4314610215578063e4d0c7f01461023957600080fd5b8063022914a7146100ac578063089fe6aa146100f15780630eefdbad146101285780633fc8cef314610160578063469048401461018057600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100dc6100c7366004610a35565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156100fd57600080fd5b5060055461011490600160a01b900462ffffff1681565b60405162ffffff90911681526020016100e8565b34801561013457600080fd5b50600454610148906001600160a01b031681565b6040516001600160a01b0390911681526020016100e8565b34801561016c57600080fd5b50600554610148906001600160a01b031681565b34801561018c57600080fd5b50600354610148906001600160a01b031681565b6101b36101ae366004610a57565b610259565b005b3480156101c157600080fd5b506101b36101d0366004610a93565b610416565b3480156101e157600080fd5b506101b36101f0366004610acf565b610472565b34801561020157600080fd5b50600654610148906001600160a01b031681565b34801561022157600080fd5b5061022b60025481565b6040519081526020016100e8565b34801561024557600080fd5b506101b3610254366004610afb565b610573565b60015460011461029d5760405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b60448201526064015b60405180910390fd5b600260015560006102ad34610802565b9050600560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156102ff57600080fd5b505af1158015610313573d6000803e3d6000fd5b505060065460055461033694506001600160a01b0390811693501690508361086e565b60065460408051610100810182526005546001600160a01b0380821683528881166020840152600160a01b90910462ffffff16928201929092528582166060820152600019608082015260a0810184905291169063414bf3899060c0810161039d866108ec565b815260006020909101526040516001600160e01b031960e084901b1681526103c89190600401610bba565b6020604051808303816000875af11580156103e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040b9190610c23565b505060018055505050565b3360009081526020819052604090205460ff166104645760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610294565b61046e828261091f565b5050565b3360009081526020819052604090205460ff166104c05760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610294565b6103e88211156105125760405162461bcd60e51b815260206004820152601c60248201527f6665652063616e206e6f74206265206d6f7265207468616e20313025000000006044820152606401610294565b6002829055600380546001600160a01b0319166001600160a01b0383169081179091556040805184815260208101929092527fc8242dc5446855370b781abbfc5d882af1d1a3cc29143216aba3558feb0ce925910160405180910390a15050565b6001546001146105b25760405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b6044820152606401610294565b6002600155600480546040516368155ec160e01b81526001600160a01b0387811693820193909352336024820152306044820152606481018690529116906368155ec190608401600060405180830381600087803b15801561061357600080fd5b505af1158015610627573d6000803e3d6000fd5b505060065461064692506001600160a01b03878116925016600061086e565b600654610660906001600160a01b0386811691168561086e565b60065460408051610100810182526001600160a01b0387811682526005548082166020840152600160a01b900462ffffff16828401523060608301526080820185905260a0820187905260c08201869052600060e08301819052925163414bf38960e01b81529293169163414bf389916106dc91600401610bba565b6020604051808303816000875af11580156106fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071f9190610c23565b600554604051632e1a7d4d60e01b8152600481018390529192506001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561076657600080fd5b505af115801561077a573d6000803e3d6000fd5b5050505061078781610802565b9050886001600160a01b03166344bc937b828a6000858c8c896040518863ffffffff1660e01b81526004016107c196959493929190610c3c565b6000604051808303818588803b1580156107da57600080fd5b505af11580156107ee573d6000803e3d6000fd5b505060018055505050505050505050505050565b600060025460001415801561082157506003546001600160a01b031615155b1561086a576000612710600254846108399190610cad565b6108439190610ce2565b60035490915061085c906001600160a01b03168261097c565b6108668184610cf6565b9250505b5090565b600060405163095ea7b360e01b81526001600160a01b03841660048201528260248201526000806044836000895af19150506108a9816109d2565b6108e65760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606401610294565b50505050565b60006108f9606483610d0d565b61090490600a610e05565b61090f606484610ce2565b6109199190610cad565b92915050565b6001600160a01b03821660008181526020818152604091829020805460ff191685151590811790915591519182527ff74826f11048fa8ecf33e91132bf280f6582ed97548a84e426b56e98526b9316910160405180910390a25050565b600080600080600085875af19050806109cd5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610294565b505050565b60003d826109e457806000803e806000fd5b80602081146109fc578015610a0d5760009250610a12565b816000803e60005115159250610a12565b600192505b5050919050565b80356001600160a01b0381168114610a3057600080fd5b919050565b600060208284031215610a4757600080fd5b610a5082610a19565b9392505050565b600080600060608486031215610a6c57600080fd5b610a7584610a19565b9250610a8360208501610a19565b9150604084013590509250925092565b60008060408385031215610aa657600080fd5b610aaf83610a19565b915060208301358015158114610ac457600080fd5b809150509250929050565b60008060408385031215610ae257600080fd5b82359150610af260208401610a19565b90509250929050565b60008060008060008060008060e0898b031215610b1757600080fd5b610b2089610a19565b9750610b2e60208a01610a19565b9650604089013567ffffffffffffffff80821115610b4b57600080fd5b818b0191508b601f830112610b5f57600080fd5b813581811115610b6e57600080fd5b8c6020828501011115610b8057600080fd5b602083019850809750505050610b9860608a01610a19565b979a96995094979396956080850135955060a08501359460c001359350915050565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b600060208284031215610c3557600080fd5b5051919050565b6001600160a01b038781168252861660208201526040810185905260a06060820181905281018390526000838560c0840137600060c0858401015260c0601f19601f8601168301019050826080830152979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610cc757610cc7610c97565b500290565b634e487b7160e01b600052601260045260246000fd5b600082610cf157610cf1610ccc565b500490565b600082821015610d0857610d08610c97565b500390565b600082610d1c57610d1c610ccc565b500690565b600181815b80851115610d5c578160001904821115610d4257610d42610c97565b80851615610d4f57918102915b93841c9390800290610d26565b509250929050565b600082610d7357506001610919565b81610d8057506000610919565b8160018114610d965760028114610da057610dbc565b6001915050610919565b60ff841115610db157610db1610c97565b50506001821b610919565b5060208310610133831016604e8410600b8410161715610ddf575081810a610919565b610de98383610d21565b8060001904821115610dfd57610dfd610c97565b029392505050565b6000610a508383610d6456fea2646970667358221220c5c9b18db8d344057f9fe2bf09dbfb68a0cbc38e3887c2224466fc9f8455f32e64736f6c634300080a0033

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.