MNT Price: $0.91 (+2.76%)

Contract

0xCc0264D9235756950613C770455424f9F7294A1f
 

Overview

MNT Balance

Mantle Mainnet Network LogoMantle Mainnet Network LogoMantle Mainnet Network Logo0 MNT

MNT Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Swap Meta710357602024-10-29 11:37:12452 days ago1730201832IN
0xCc0264D9...9F7294A1f
0 MNT0.073275370.02
Swap Meta710355562024-10-29 11:30:24452 days ago1730201424IN
0xCc0264D9...9F7294A1f
0 MNT0.029607850.02
Swap Meta710345432024-10-29 10:56:38452 days ago1730199398IN
0xCc0264D9...9F7294A1f
0 MNT0.194223170.02
Swap Meta710319132024-10-29 9:28:58452 days ago1730194138IN
0xCc0264D9...9F7294A1f
0 MNT0.062075960.02
Swap Meta710316092024-10-29 9:18:50452 days ago1730193530IN
0xCc0264D9...9F7294A1f
0 MNT0.115020540.02
Swap Meta710315372024-10-29 9:16:26452 days ago1730193386IN
0xCc0264D9...9F7294A1f
0 MNT0.06875050.02
Swap Meta710310762024-10-29 9:01:04452 days ago1730192464IN
0xCc0264D9...9F7294A1f
0 MNT0.147678150.03
Swap Meta710308832024-10-29 8:54:38452 days ago1730192078IN
0xCc0264D9...9F7294A1f
0 MNT0.230547710.03
Swap Meta710305642024-10-29 8:44:00452 days ago1730191440IN
0xCc0264D9...9F7294A1f
0 MNT0.158056310.03
Swap Meta710299762024-10-29 8:24:24452 days ago1730190264IN
0xCc0264D9...9F7294A1f
0 MNT0.030844420.02
Swap Meta710285582024-10-29 7:37:08452 days ago1730187428IN
0xCc0264D9...9F7294A1f
0 MNT0.050325240.02
Swap Meta710122172024-10-28 22:32:26452 days ago1730154746IN
0xCc0264D9...9F7294A1f
0 MNT0.160869180.02
Swap Meta710028982024-10-28 17:21:48453 days ago1730136108IN
0xCc0264D9...9F7294A1f
0 MNT0.032539150.02
Swap Meta709976552024-10-28 14:27:02453 days ago1730125622IN
0xCc0264D9...9F7294A1f
0 MNT0.039271150.02
Swap Meta709968192024-10-28 13:59:10453 days ago1730123950IN
0xCc0264D9...9F7294A1f
0 MNT0.059211310.02
Swap Meta709940352024-10-28 12:26:22453 days ago1730118382IN
0xCc0264D9...9F7294A1f
0 MNT0.021969640.02
Swap Meta709883362024-10-28 9:16:24453 days ago1730106984IN
0xCc0264D9...9F7294A1f
0 MNT0.024887690.02
Swap Meta709829992024-10-28 6:18:30453 days ago1730096310IN
0xCc0264D9...9F7294A1f
2 MNT0.056254670.02
Swap Meta709755212024-10-28 2:09:14453 days ago1730081354IN
0xCc0264D9...9F7294A1f
0 MNT0.047855980.02
Swap Meta709752312024-10-28 1:59:34453 days ago1730080774IN
0xCc0264D9...9F7294A1f
0 MNT0.050059230.02
Swap Meta709749232024-10-28 1:49:18453 days ago1730080158IN
0xCc0264D9...9F7294A1f
39.25 MNT0.040853440.02
Swap Meta709746652024-10-28 1:40:42453 days ago1730079642IN
0xCc0264D9...9F7294A1f
0 MNT0.013666830.02
Swap Meta709740862024-10-28 1:21:24453 days ago1730078484IN
0xCc0264D9...9F7294A1f
0 MNT0.10318670.02
Swap Meta709705612024-10-27 23:23:54453 days ago1730071434IN
0xCc0264D9...9F7294A1f
4.2 MNT0.02212020.02
Swap Meta709424422024-10-27 7:46:36454 days ago1730015196IN
0xCc0264D9...9F7294A1f
0 MNT0.02091370.02
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
709829992024-10-28 6:18:30453 days ago1730096310
0xCc0264D9...9F7294A1f
2 MNT
709749232024-10-28 1:49:18453 days ago1730080158
0xCc0264D9...9F7294A1f
39.25 MNT
709705612024-10-27 23:23:54453 days ago1730071434
0xCc0264D9...9F7294A1f
4.2 MNT
709009502024-10-26 8:43:32455 days ago1729932212
0xCc0264D9...9F7294A1f
6,703 MNT
709009312024-10-26 8:42:54455 days ago1729932174
0xCc0264D9...9F7294A1f
6,500 MNT
709008492024-10-26 8:40:10455 days ago1729932010
0xCc0264D9...9F7294A1f
8,060 MNT
709004732024-10-26 8:27:38455 days ago1729931258
0xCc0264D9...9F7294A1f
4,995 MNT
708805562024-10-25 21:23:44455 days ago1729891424
0xCc0264D9...9F7294A1f
100 MNT
706944592024-10-21 14:00:30460 days ago1729519230
0xCc0264D9...9F7294A1f
9 MNT
706660352024-10-20 22:13:02460 days ago1729462382
0xCc0264D9...9F7294A1f
805 MNT
706650902024-10-20 21:41:32460 days ago1729460492
0xCc0264D9...9F7294A1f
3 MNT
705236722024-10-17 15:07:36464 days ago1729177656
0xCc0264D9...9F7294A1f
20 MNT
704699212024-10-16 9:15:54465 days ago1729070154
0xCc0264D9...9F7294A1f
0.2 MNT
704024402024-10-14 19:46:32467 days ago1728935192
0xCc0264D9...9F7294A1f
7 MNT
703986112024-10-14 17:38:54467 days ago1728927534
0xCc0264D9...9F7294A1f
2 MNT
703971732024-10-14 16:50:58467 days ago1728924658
0xCc0264D9...9F7294A1f
2 MNT
703971142024-10-14 16:49:00467 days ago1728924540
0xCc0264D9...9F7294A1f
1 MNT
703964322024-10-14 16:26:16467 days ago1728923176
0xCc0264D9...9F7294A1f
1 MNT
703961812024-10-14 16:17:54467 days ago1728922674
0xCc0264D9...9F7294A1f
2 MNT
703954692024-10-14 15:54:10467 days ago1728921250
0xCc0264D9...9F7294A1f
2 MNT
703950562024-10-14 15:40:24467 days ago1728920424
0xCc0264D9...9F7294A1f
2 MNT
703814352024-10-14 8:06:22467 days ago1728893182
0xCc0264D9...9F7294A1f
1 MNT
703090602024-10-12 15:53:52469 days ago1728748432
0xCc0264D9...9F7294A1f
3 MNT
702960042024-10-12 8:38:40469 days ago1728722320
0xCc0264D9...9F7294A1f
30 MNT
702923122024-10-12 6:35:36469 days ago1728714936
0xCc0264D9...9F7294A1f
25.42194618 MNT
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeltaMetaAggregator

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
paris EvmVersion
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.25;

////////////////////////////////////////////////////
// Minimal meta swap aggregation contract
// - Allows simulation to validate receiver amount
// - Owner can enable/disable valid swap targets
// - Swap aggregation calls are assumed to already
//   check for slippage and send funds directly to the
//   user-defined receiver
// - Owner can rescue funds in case the aggregator has
//   this contract as receiver address
////////////////////////////////////////////////////
contract DeltaMetaAggregator {
    ////////////////////////////////////////////////////
    // Errors
    ////////////////////////////////////////////////////
    error SimulationResults(bool success, uint256 amountReceived, string data);
    error InvalidTarget();
    error NotOwner();
    error Paused();
    error HasMsgValue();

    ////////////////////////////////////////////////////
    // State
    ////////////////////////////////////////////////////

    /// @notice maps approvalTarget to swapTarget to bool
    mapping(address => mapping(address => bool)) private _validTargets;
    /// @notice contract owner
    address public OWNER;

    ////////////////////////////////////////////////////
    // Constants
    ////////////////////////////////////////////////////
    uint256 private constant MAX_UINT = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;

    ////////////////////////////////////////////////////
    // Constructor, assigns initial owner
    ////////////////////////////////////////////////////

    constructor() {
        OWNER = msg.sender;
    }

    ////////////////////////////////////////////////////
    // Receive function for native swaps
    ////////////////////////////////////////////////////

    receive() external payable {}

    ////////////////////////////////////////////////////
    // Modifier
    ////////////////////////////////////////////////////

    modifier onlyOwner() {
        if (msg.sender != OWNER) revert NotOwner();
        _;
    }

    ////////////////////////////////////////////////////
    // Owner functions
    ////////////////////////////////////////////////////

    function transferOwnership(address newOwner) external onlyOwner {
        OWNER = newOwner;
    }

    function setValidTarget(address approvalTarget, address swapTarget, bool value) external onlyOwner {
        _validTargets[approvalTarget][swapTarget] = value;
    }

    function rescueFunds(address asset) external onlyOwner {
        if (asset == address(0)) {
            uint256 balance = address(this).balance;
            if (balance != 0) {
                (bool success, ) = payable(msg.sender).call{value: balance}("");
                if (!success) revert();
            }
        } else {
            uint256 balance = _balanceOf(asset, address(this));
            if (balance != 0) _transferERC20Tokens(asset, msg.sender, balance);
        }
    }

    ////////////////////////////////////////////////////
    // Swap functions
    ////////////////////////////////////////////////////

    /**
     * Executes meta aggregation swap.
     * Can only be executed on valid approval- and swap target combo.
     * Note that the receiver address has to be manually set in
     * the aggregation call, otherwise, the funds might remain in this contract
     * Ideally this function is executed after an simulation via `simSwapMeta`
     * @param assetIn token input address, user zero address for native
     * @param amountIn input amount, ignored for native transfer
     * @param approvalTarget approve this target when swapping (only if allowance too low)
     * @param swapTarget swap aggregation executor
     * @param swapData swap calldata
     */
    function swapMeta(
        address assetIn,
        uint256 amountIn,
        address approvalTarget,
        address swapTarget,
        bytes calldata swapData //
    ) external payable {
        // zero address assumes native transfer
        if (assetIn != address(0)) {
            if (msg.value != 0) revert HasMsgValue();
            // pull balance
            _transferERC20TokensFrom(assetIn, amountIn);
            // approve if no allowance
            _approveIfBelow(assetIn, approvalTarget, amountIn);
        }

        // validate approval- and swap target
        _validateCall(approvalTarget, swapTarget);

        (bool success, bytes memory returnData) = swapTarget.call{value: msg.value}(swapData);
        if (!success) {
            // Next 5 lines from https://ethereum.stackexchange.com/a/83577
            if (returnData.length < 68) revert();
            assembly {
                returnData := add(returnData, 0x04)
            }
            revert(abi.decode(returnData, (string)));
        }
    }

    /**
     * Simulates the swap aggregation. Should be called before `swapMeta`
     * Always reverts.
     * Ideally called via staticcall, the return object contains
     * the balance change of the `receiver` address.
     * @param assetIn token in address, zero address for native
     * @param amountIn input amount
     * @param assetOut token out, zero address for native
     * @param receiver recipient of swap
     * @param approvalTarget address to be approved
     * @param swapTarget swap aggregator
     * @param swapData swap calldata
     */
    function simSwapMeta(
        address assetIn,
        uint256 amountIn,
        address assetOut,
        address receiver,
        address approvalTarget,
        address swapTarget,
        bytes calldata swapData //
    ) external payable returns (uint256 amountReceived) {
        // zero address assumes native transfer
        if (assetIn != address(0)) {
            if (msg.value != 0) revert HasMsgValue();
            // pull balance
            _transferERC20TokensFrom(assetIn, amountIn);
            // approve if no allowance
            _approveIfBelow(assetIn, approvalTarget, amountIn);
        }
        // get initial balane of receiver
        uint256 before = _balanceOf(assetOut, receiver);

        (bool success, bytes memory returnData) = swapTarget.call{value: msg.value}(swapData);
        if (!success) {
            // Next 5 lines from https://ethereum.stackexchange.com/a/83577
            if (returnData.length < 68) revert();
            assembly {
                returnData := add(returnData, 0x04)
            }
            revert SimulationResults(false, 0, abi.decode(returnData, (string)));
        }

        // get net amount received
        amountReceived = _balanceOf(assetOut, receiver) - before;
        revert SimulationResults(success, amountReceived, "");
    }

    ////////////////////////////////////////////////////
    // Read functions
    ////////////////////////////////////////////////////

    function isValidTarget(address approvalTarget, address swapTarget) external view returns (bool) {
        return _validTargets[approvalTarget][swapTarget];
    }

    ////////////////////////////////////////////////////
    // Internals
    ////////////////////////////////////////////////////

    /// @dev chcecks whether both addresses are validTargets
    function _validateCall(address approvalTarget, address swapTarget) private view {
        if (!_validTargets[approvalTarget][swapTarget]) revert InvalidTarget();
    }

    /// @dev Calls `IERC20Token(token).approve()` and sets the allowance to the
    ///      maximum if the current approval is not already >= an amount.
    ///      Reverts if the return data is invalid or the call reverts.
    /// @param token The address of the token contract.
    /// @param spender The address that receives an allowance.
    /// @param amount The minimum allowance needed.
    function _approveIfBelow(address token, address spender, uint256 amount) private {
        assembly {
            let ptr := mload(0x40)
            ////////////////////////////////////////////////////
            // get allowance and validate returndata
            ////////////////////////////////////////////////////
            mstore(ptr, 0xdd62ed3e00000000000000000000000000000000000000000000000000000000)
            mstore(add(ptr, 0x4), address())
            mstore(add(ptr, 0x24), spender)
            // call to token
            // success is false or return data not provided
            if or(iszero(staticcall(gas(), token, ptr, 0x44, ptr, 0x20)), lt(returndatasize(), 0x20)) {
                revert(0x0, 0x0)
            }
            // approve if necessary
            if lt(mload(ptr), amount) {
                ////////////////////////////////////////////////////
                // Approve, at this point it is clear that the target is nonzero
                ////////////////////////////////////////////////////
                // selector for approve(address,uint256)
                mstore(ptr, 0x095ea7b300000000000000000000000000000000000000000000000000000000)
                mstore(add(ptr, 0x04), spender)
                mstore(add(ptr, 0x24), MAX_UINT)

                if iszero(call(gas(), token, 0x0, ptr, 0x44, ptr, 32)) {
                    revert(0x0, 0x0)
                }
            }
        }
    }

    /// @dev balanceOf call in assembly, compatible for both native (user address zero for underlying) and ERC20
    function _balanceOf(address underlying, address entity) private view returns (uint256 entityBalance) {
        assembly {
            switch iszero(underlying)
            case 1 {
                entityBalance := balance(entity)
            }
            default {
                ////////////////////////////////////////////////////
                // get token balance in assembly usingn scrap space (64 bytes)
                ////////////////////////////////////////////////////

                // selector for balanceOf(address)
                mstore(0x0, 0x70a0823100000000000000000000000000000000000000000000000000000000)
                // add this address as parameter
                mstore(0x4, entity)

                // call to underlying
                if iszero(staticcall(gas(), underlying, 0x0, 0x24, 0x0, 0x20)) {
                    revert(0x0, 0x0)
                }

                entityBalance := mload(0x0)
            }
        }
    }

    /// @dev Transfers ERC20 tokens from ourselves to `to`.
    /// @param token The token to spend.
    /// @param to The recipient of the tokens.
    /// @param amount The amount of `token` to transfer.
    function _transferERC20Tokens(address token, address to, uint256 amount) private {
        assembly {
            let ptr := mload(0x40) // free memory pointer

            // selector for transfer(address,uint256)
            mstore(ptr, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)
            mstore(add(ptr, 0x04), to)
            mstore(add(ptr, 0x24), amount)

            let success := call(gas(), token, 0x0, ptr, 0x44, ptr, 32)

            let rdsize := returndatasize()

            // Check for ERC20 success. ERC20 tokens should return a boolean,
            // but some don't. We accept 0-length return data as success, or at
            // least 32 bytes that starts with a 32-byte boolean true.
            success := and(
                success, // call itself succeeded
                or(
                    iszero(rdsize), // no return data, or
                    and(
                        iszero(lt(rdsize, 32)), // at least 32 bytes
                        eq(mload(ptr), 1) // starts with uint256(1)
                    )
                )
            )

            if iszero(success) {
                returndatacopy(ptr, 0x0, rdsize)
                revert(ptr, rdsize)
            }
        }
    }

    /// @dev Transfers ERC20 tokens from msg.sender to address(this).
    /// @param token The token to spend.
    /// @param amount The amount of `token` to transfer.
    function _transferERC20TokensFrom(address token, uint256 amount) private {
        assembly {
            let ptr := mload(0x40) // free memory pointer

            // selector for transferFrom(address,address,uint256)
            mstore(ptr, 0x23b872dd00000000000000000000000000000000000000000000000000000000)
            mstore(add(ptr, 0x04), caller())
            mstore(add(ptr, 0x24), address())
            mstore(add(ptr, 0x44), amount)

            let success := call(gas(), token, 0x0, ptr, 0x64, ptr, 32)

            let rdsize := returndatasize()

            // Check for ERC20 success. ERC20 tokens should return a boolean,
            // but some don't. We accept 0-length return data as success, or at
            // least 32 bytes that starts with a 32-byte boolean true.
            success := and(
                success, // call itself succeeded
                or(
                    iszero(rdsize), // no return data, or
                    and(
                        iszero(lt(rdsize, 32)), // at least 32 bytes
                        eq(mload(ptr), 1) // starts with uint256(1)
                    )
                )
            )

            if iszero(success) {
                returndatacopy(ptr, 0x0, rdsize)
                revert(ptr, rdsize)
            }
        }
    }
}

Settings
{
  "evmVersion": "paris",
  "libraries": {},
  "metadata": {
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"HasMsgValue","type":"error"},{"inputs":[],"name":"InvalidTarget","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"Paused","type":"error"},{"inputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"amountReceived","type":"uint256"},{"internalType":"string","name":"data","type":"string"}],"name":"SimulationResults","type":"error"},{"inputs":[],"name":"OWNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"approvalTarget","type":"address"},{"internalType":"address","name":"swapTarget","type":"address"}],"name":"isValidTarget","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"approvalTarget","type":"address"},{"internalType":"address","name":"swapTarget","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setValidTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"approvalTarget","type":"address"},{"internalType":"address","name":"swapTarget","type":"address"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"simSwapMeta","outputs":[{"internalType":"uint256","name":"amountReceived","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"approvalTarget","type":"address"},{"internalType":"address","name":"swapTarget","type":"address"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"swapMeta","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052348015600f57600080fd5b50600180546001600160a01b03191633179055610dcb806100316000396000f3fe6080604052600436106100745760003560e01c806394d8a8191161004e57806394d8a8191461011c578063e53b20171461013c578063f2fde38b1461015c578063ffb714101461017c57600080fd5b8063117803e3146100805780633838eb1e146100d757806348fc093e146100ec57600080fd5b3661007b57005b600080fd5b34801561008c57600080fd5b506001546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100ea6100e53660046109e6565b61019d565b005b3480156100f857600080fd5b5061010c610107366004610a65565b6102f6565b60405190151581526020016100ce565b34801561012857600080fd5b506100ea610137366004610a98565b610331565b34801561014857600080fd5b506100ea610157366004610ae4565b6103e5565b34801561016857600080fd5b506100ea610177366004610ae4565b6104d2565b61018f61018a366004610b06565b61056a565b6040519081526020016100ce565b73ffffffffffffffffffffffffffffffffffffffff8616156102065734156101f1576040517ff6a7390200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101fb868661071e565b610206868587610789565b6102108484610846565b6000808473ffffffffffffffffffffffffffffffffffffffff1634858560405161023b929190610ba6565b60006040518083038185875af1925050503d8060008114610278576040519150601f19603f3d011682016040523d82523d6000602084013e61027d565b606091505b5091509150816102ec5760448151101561029657600080fd5b600481019050808060200190518101906102b09190610c09565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e39190610d1e565b60405180910390fd5b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152602081815260408083209385168352929052205460ff165b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610382576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff9283166000908152602081815260408083209490951682529290925291902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff163314610436576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166104b3574780156104af57604051600090339083908381818185875af1925050503d806000811461049a576040519150601f19603f3d011682016040523d82523d6000602084013e61049f565b606091505b50509050806104ad57600080fd5b505b5050565b60006104bf82306108b0565b905080156104af576104af82338361090e565b60015473ffffffffffffffffffffffffffffffffffffffff163314610523576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8916156105d55734156105c0576040517ff6a7390200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ca898961071e565b6105d589868a610789565b60006105e188886108b0565b90506000808673ffffffffffffffffffffffffffffffffffffffff1634878760405161060e929190610ba6565b60006040518083038185875af1925050503d806000811461064b576040519150601f19603f3d011682016040523d82523d6000602084013e610650565b606091505b5091509150816106bb5760448151101561066957600080fd5b600481019050600080828060200190518101906106869190610c09565b6040517fa143ebdd0000000000000000000000000000000000000000000000000000000081526004016102e393929190610d31565b826106c68b8b6108b0565b6106d09190610d5b565b6040517fa143ebdd00000000000000000000000000000000000000000000000000000000815283151560048201526024810182905260606044820152600060648201529094506084016102e3565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201528160448201526020816064836000875af13d6001835114602082101516811517821691508161078257806000843e8083fd5b5050505050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015282602482015260203d10602082604484885afa1517156107d457600080fd5b8181511015610840577f095ea7b30000000000000000000000000000000000000000000000000000000081528260048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201526020816044836000885af161084057600080fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152602081815260408083209385168352929052205460ff166104af576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821560018114610902577f70a0823100000000000000000000000000000000000000000000000000000000600052826004526020600060246000875afa6108f857600080fd5b6000519150610907565b823191505b5092915050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081528260048201528160248201526020816044836000885af13d6001835114602082101516811517821691508161096c57806000843e8083fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461099857600080fd5b919050565b60008083601f8401126109af57600080fd5b50813567ffffffffffffffff8111156109c757600080fd5b6020830191508360208285010111156109df57600080fd5b9250929050565b60008060008060008060a087890312156109ff57600080fd5b610a0887610974565b955060208701359450610a1d60408801610974565b9350610a2b60608801610974565b9250608087013567ffffffffffffffff811115610a4757600080fd5b610a5389828a0161099d565b979a9699509497509295939492505050565b60008060408385031215610a7857600080fd5b610a8183610974565b9150610a8f60208401610974565b90509250929050565b600080600060608486031215610aad57600080fd5b610ab684610974565b9250610ac460208501610974565b915060408401358015158114610ad957600080fd5b809150509250925092565b600060208284031215610af657600080fd5b610aff82610974565b9392505050565b60008060008060008060008060e0898b031215610b2257600080fd5b610b2b89610974565b975060208901359650610b4060408a01610974565b9550610b4e60608a01610974565b9450610b5c60808a01610974565b9350610b6a60a08a01610974565b925060c089013567ffffffffffffffff811115610b8657600080fd5b610b928b828c0161099d565b999c989b5096995094979396929594505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015610c00578181015183820152602001610be8565b50506000910152565b600060208284031215610c1b57600080fd5b815167ffffffffffffffff80821115610c3357600080fd5b818401915084601f830112610c4757600080fd5b815181811115610c5957610c59610bb6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9f57610c9f610bb6565b81604052828152876020848701011115610cb857600080fd5b610cc9836020830160208801610be5565b979650505050505050565b60008151808452610cec816020860160208601610be5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610aff6020830184610cd4565b8315158152826020820152606060408201526000610d526060830184610cd4565b95945050505050565b8181038181111561032b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220cdfa4466e880d01d337d01ee1e5cc11fa95623da712666940d099dc71131180c64736f6c63430008190033

Deployed Bytecode

0x6080604052600436106100745760003560e01c806394d8a8191161004e57806394d8a8191461011c578063e53b20171461013c578063f2fde38b1461015c578063ffb714101461017c57600080fd5b8063117803e3146100805780633838eb1e146100d757806348fc093e146100ec57600080fd5b3661007b57005b600080fd5b34801561008c57600080fd5b506001546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100ea6100e53660046109e6565b61019d565b005b3480156100f857600080fd5b5061010c610107366004610a65565b6102f6565b60405190151581526020016100ce565b34801561012857600080fd5b506100ea610137366004610a98565b610331565b34801561014857600080fd5b506100ea610157366004610ae4565b6103e5565b34801561016857600080fd5b506100ea610177366004610ae4565b6104d2565b61018f61018a366004610b06565b61056a565b6040519081526020016100ce565b73ffffffffffffffffffffffffffffffffffffffff8616156102065734156101f1576040517ff6a7390200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101fb868661071e565b610206868587610789565b6102108484610846565b6000808473ffffffffffffffffffffffffffffffffffffffff1634858560405161023b929190610ba6565b60006040518083038185875af1925050503d8060008114610278576040519150601f19603f3d011682016040523d82523d6000602084013e61027d565b606091505b5091509150816102ec5760448151101561029657600080fd5b600481019050808060200190518101906102b09190610c09565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e39190610d1e565b60405180910390fd5b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152602081815260408083209385168352929052205460ff165b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610382576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff9283166000908152602081815260408083209490951682529290925291902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff163314610436576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166104b3574780156104af57604051600090339083908381818185875af1925050503d806000811461049a576040519150601f19603f3d011682016040523d82523d6000602084013e61049f565b606091505b50509050806104ad57600080fd5b505b5050565b60006104bf82306108b0565b905080156104af576104af82338361090e565b60015473ffffffffffffffffffffffffffffffffffffffff163314610523576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8916156105d55734156105c0576040517ff6a7390200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ca898961071e565b6105d589868a610789565b60006105e188886108b0565b90506000808673ffffffffffffffffffffffffffffffffffffffff1634878760405161060e929190610ba6565b60006040518083038185875af1925050503d806000811461064b576040519150601f19603f3d011682016040523d82523d6000602084013e610650565b606091505b5091509150816106bb5760448151101561066957600080fd5b600481019050600080828060200190518101906106869190610c09565b6040517fa143ebdd0000000000000000000000000000000000000000000000000000000081526004016102e393929190610d31565b826106c68b8b6108b0565b6106d09190610d5b565b6040517fa143ebdd00000000000000000000000000000000000000000000000000000000815283151560048201526024810182905260606044820152600060648201529094506084016102e3565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201528160448201526020816064836000875af13d6001835114602082101516811517821691508161078257806000843e8083fd5b5050505050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015282602482015260203d10602082604484885afa1517156107d457600080fd5b8181511015610840577f095ea7b30000000000000000000000000000000000000000000000000000000081528260048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201526020816044836000885af161084057600080fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152602081815260408083209385168352929052205460ff166104af576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821560018114610902577f70a0823100000000000000000000000000000000000000000000000000000000600052826004526020600060246000875afa6108f857600080fd5b6000519150610907565b823191505b5092915050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081528260048201528160248201526020816044836000885af13d6001835114602082101516811517821691508161096c57806000843e8083fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461099857600080fd5b919050565b60008083601f8401126109af57600080fd5b50813567ffffffffffffffff8111156109c757600080fd5b6020830191508360208285010111156109df57600080fd5b9250929050565b60008060008060008060a087890312156109ff57600080fd5b610a0887610974565b955060208701359450610a1d60408801610974565b9350610a2b60608801610974565b9250608087013567ffffffffffffffff811115610a4757600080fd5b610a5389828a0161099d565b979a9699509497509295939492505050565b60008060408385031215610a7857600080fd5b610a8183610974565b9150610a8f60208401610974565b90509250929050565b600080600060608486031215610aad57600080fd5b610ab684610974565b9250610ac460208501610974565b915060408401358015158114610ad957600080fd5b809150509250925092565b600060208284031215610af657600080fd5b610aff82610974565b9392505050565b60008060008060008060008060e0898b031215610b2257600080fd5b610b2b89610974565b975060208901359650610b4060408a01610974565b9550610b4e60608a01610974565b9450610b5c60808a01610974565b9350610b6a60a08a01610974565b925060c089013567ffffffffffffffff811115610b8657600080fd5b610b928b828c0161099d565b999c989b5096995094979396929594505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015610c00578181015183820152602001610be8565b50506000910152565b600060208284031215610c1b57600080fd5b815167ffffffffffffffff80821115610c3357600080fd5b818401915084601f830112610c4757600080fd5b815181811115610c5957610c59610bb6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9f57610c9f610bb6565b81604052828152876020848701011115610cb857600080fd5b610cc9836020830160208801610be5565b979650505050505050565b60008151808452610cec816020860160208601610be5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610aff6020830184610cd4565b8315158152826020820152606060408201526000610d526060830184610cd4565b95945050505050565b8181038181111561032b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220cdfa4466e880d01d337d01ee1e5cc11fa95623da712666940d099dc71131180c64736f6c63430008190033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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.