Hoodi Testnet

Contract

0xF02DbeaA1Bbc90226CaB995db4C190DbE25983af
Source Code Source Code

Overview

ETH Balance

0 ETH

More Info

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Amount

There are no matching entries

> 10 Internal Transactions found.

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Amount
Get_relays10586382025-08-22 15:20:00149 days ago1755876000
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...10586382025-08-22 15:20:00149 days ago1755876000
0xF02DbeaA...bE25983af
0 ETH
Get_relays10579932025-08-22 13:01:00149 days ago1755867660
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...10579932025-08-22 13:01:00149 days ago1755867660
0xF02DbeaA...bE25983af
0 ETH
Get_relays8288592025-07-18 12:19:00184 days ago1752841140
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...8288592025-07-18 12:19:00184 days ago1752841140
0xF02DbeaA...bE25983af
0 ETH
Get_relays7297262025-07-03 16:23:36199 days ago1751559816
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...7297262025-07-03 16:23:36199 days ago1751559816
0xF02DbeaA...bE25983af
0 ETH
Get_relays6744822025-06-25 10:58:00207 days ago1750849080
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...6744822025-06-25 10:58:00207 days ago1750849080
0xF02DbeaA...bE25983af
0 ETH
Get_relays5808432025-06-11 10:38:48221 days ago1749638328
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...5808432025-06-11 10:38:48221 days ago1749638328
0xF02DbeaA...bE25983af
0 ETH
Get_relays4331412025-05-20 12:26:48243 days ago1747744008
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...4331412025-05-20 12:26:48243 days ago1747744008
0xF02DbeaA...bE25983af
0 ETH
Get_relays4330242025-05-20 12:02:24243 days ago1747742544
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...4330242025-05-20 12:02:24243 days ago1747742544
0xF02DbeaA...bE25983af
0 ETH
Get_relays4330012025-05-20 11:57:24243 days ago1747742244
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...4330012025-05-20 11:57:24243 days ago1747742244
0xF02DbeaA...bE25983af
0 ETH
Get_relays4321692025-05-20 9:05:00243 days ago1747731900
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...4321692025-05-20 9:05:00243 days ago1747731900
0xF02DbeaA...bE25983af
0 ETH
Get_relays4250512025-05-19 8:25:24244 days ago1747643124
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...4250512025-05-19 8:25:24244 days ago1747643124
0xF02DbeaA...bE25983af
0 ETH
Get_relays4243062025-05-19 5:50:12244 days ago1747633812
0xF02DbeaA...bE25983af
0 ETH
Create EVM Scrip...4243062025-05-19 5:50:12244 days ago1747633812
0xF02DbeaA...bE25983af
0 ETH
Get_relays4242512025-05-19 5:38:12244 days ago1747633092
0xF02DbeaA...bE25983af
0 ETH
View All Internal Transactions
Loading...
Loading

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AddMEVBoostRelays

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, None license

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-FileCopyrightText: 2025 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.6;

import "contracts/TrustedCaller.sol";
import "contracts/libraries/EVMScriptCreator.sol";
import "contracts/interfaces/IEVMScriptFactory.sol";
import "contracts/interfaces/IMEVBoostRelayAllowedList.sol";
import "contracts/libraries/MEVBoostRelaysInputUtils.sol";

/// @author katamarinaki, swissarmytowel
/// @notice Creates EVMScript to add new MEV boost relay to MEV Boost relay allowed list
contract AddMEVBoostRelays is TrustedCaller, IEVMScriptFactory {
    // -------------
    // ERRORS
    // -------------

    string private constant ERROR_MAX_NUM_RELAYS_EXCEEDED = "MAX_NUM_RELAYS_EXCEEDED";

    // -------------
    // CONSTANTS
    // -------------

    /// @notice Limit on the number of relays in the registry based on the value from the MEVBoostRelayAllowedList
    uint256 private constant MAX_NUM_RELAYS = 40;

    /// @notice Selector for the add_relay method in the MEVBoostRelayAllowedList
    bytes4 private constant ADD_RELAY_SELECTOR =
        bytes4(keccak256("add_relay(string,string,bool,string)"));

    // -------------
    // VARIABLES
    // -------------

    /// @notice Address of MEVBoostRelayAllowedList contract
    IMEVBoostRelayAllowedList public immutable mevBoostRelayAllowedList;

    // -------------
    // CONSTRUCTOR
    // -------------

    constructor(
        address _trustedCaller,
        address _mevBoostRelayAllowedList
    ) TrustedCaller(_trustedCaller) {
        mevBoostRelayAllowedList = IMEVBoostRelayAllowedList(_mevBoostRelayAllowedList);
    }

    // -------------
    // EXTERNAL METHODS
    // -------------

    /// @notice Creates EVMScript to add new MEV boost relay to MEV Boost relay allowed list
    /// @param _creator Address who creates EVMScript
    /// @param _evmScriptCallData Encoded relays data: IMEVBoostRelayAllowedList.Relay[]
    function createEVMScript(
        address _creator,
        bytes memory _evmScriptCallData
    ) external view override onlyTrustedCaller(_creator) returns (bytes memory) {
        IMEVBoostRelayAllowedList.Relay[] memory _relaysToAdd = MEVBoostRelaysInputUtils
            .decodeCallDataWithRelayStructs(_evmScriptCallData);
        IMEVBoostRelayAllowedList.Relay[] memory _currentAllowedRelays = mevBoostRelayAllowedList
            .get_relays();

        require(
            _currentAllowedRelays.length + _relaysToAdd.length <= MAX_NUM_RELAYS,
            ERROR_MAX_NUM_RELAYS_EXCEEDED
        );

        // Validate the input data before creating EVMScript to add new relays. The relay URIs MUST NOT be already in the list.
        MEVBoostRelaysInputUtils.validateRelays(_relaysToAdd, _currentAllowedRelays, false);

        uint256 newRelaysCount = _relaysToAdd.length;
        bytes[] memory encodedCalldata = new bytes[](newRelaysCount);

        for (uint256 i; i < newRelaysCount; ) {
            encodedCalldata[i] = abi.encode(
                _relaysToAdd[i].uri,
                _relaysToAdd[i].operator,
                _relaysToAdd[i].is_mandatory,
                _relaysToAdd[i].description
            );

            unchecked {
                ++i;
            }
        }

        return
            EVMScriptCreator.createEVMScript(
                address(mevBoostRelayAllowedList),
                ADD_RELAY_SELECTOR,
                encodedCalldata
            );
    }

    /// @notice Decodes call data used by createEVMScript method
    /// @param _evmScriptCallData Encoded relays data: IMEVBoostRelayAllowedList.Relay[]
    /// @return relays IMEVBoostRelayAllowedList.Relay[]
    function decodeEVMScriptCallData(
        bytes calldata _evmScriptCallData
    ) external pure returns (IMEVBoostRelayAllowedList.Relay[] memory relays) {
        return MEVBoostRelaysInputUtils.decodeCallDataWithRelayStructs(_evmScriptCallData);
    }
}

File 2 of 6 : TrustedCaller.sol
// SPDX-FileCopyrightText: 2021 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

/// @author psirex
/// @notice A helper contract contains logic to validate that only a trusted caller has access to certain methods.
/// @dev Trusted caller set once on deployment and can't be changed.
contract TrustedCaller {
    string private constant ERROR_TRUSTED_CALLER_IS_ZERO_ADDRESS = "TRUSTED_CALLER_IS_ZERO_ADDRESS";
    string private constant ERROR_CALLER_IS_FORBIDDEN = "CALLER_IS_FORBIDDEN";

    address public immutable trustedCaller;

    constructor(address _trustedCaller) {
        require(_trustedCaller != address(0), ERROR_TRUSTED_CALLER_IS_ZERO_ADDRESS);
        trustedCaller = _trustedCaller;
    }

    modifier onlyTrustedCaller(address _caller) {
        require(_caller == trustedCaller, ERROR_CALLER_IS_FORBIDDEN);
        _;
    }
}

// SPDX-FileCopyrightText: 2021 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

/// @author psirex
/// @notice Contains methods for convenient creation
/// of EVMScripts in EVMScript factories contracts
library EVMScriptCreator {
    // Id of default CallsScript Aragon's executor.
    bytes4 private constant SPEC_ID = hex"00000001";

    /// @notice Encodes one method call as EVMScript
    function createEVMScript(
        address _to,
        bytes4 _methodId,
        bytes memory _evmScriptCallData
    ) internal pure returns (bytes memory _commands) {
        return
            abi.encodePacked(
                SPEC_ID,
                _to,
                uint32(_evmScriptCallData.length) + 4,
                _methodId,
                _evmScriptCallData
            );
    }

    /// @notice Encodes multiple calls of the same method on one contract as EVMScript
    function createEVMScript(
        address _to,
        bytes4 _methodId,
        bytes[] memory _evmScriptCallData
    ) internal pure returns (bytes memory _evmScript) {
        for (uint256 i = 0; i < _evmScriptCallData.length; ++i) {
            _evmScript = bytes.concat(
                _evmScript,
                abi.encodePacked(
                    _to,
                    uint32(_evmScriptCallData[i].length) + 4,
                    _methodId,
                    _evmScriptCallData[i]
                )
            );
        }
        _evmScript = bytes.concat(SPEC_ID, _evmScript);
    }

    /// @notice Encodes multiple calls to different methods within the same contract as EVMScript
    function createEVMScript(
        address _to,
        bytes4[] memory _methodIds,
        bytes[] memory _evmScriptCallData
    ) internal pure returns (bytes memory _evmScript) {
        require(_methodIds.length == _evmScriptCallData.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < _methodIds.length; ++i) {
            _evmScript = bytes.concat(
                _evmScript,
                abi.encodePacked(
                    _to,
                    uint32(_evmScriptCallData[i].length) + 4,
                    _methodIds[i],
                    _evmScriptCallData[i]
                )
            );
        }
        _evmScript = bytes.concat(SPEC_ID, _evmScript);
    }

    /// @notice Encodes multiple calls to different contracts as EVMScript
    function createEVMScript(
        address[] memory _to,
        bytes4[] memory _methodIds,
        bytes[] memory _evmScriptCallData
    ) internal pure returns (bytes memory _evmScript) {
        require(_to.length == _methodIds.length, "LENGTH_MISMATCH");
        require(_to.length == _evmScriptCallData.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < _to.length; ++i) {
            _evmScript = bytes.concat(
                _evmScript,
                abi.encodePacked(
                    _to[i],
                    uint32(_evmScriptCallData[i].length) + 4,
                    _methodIds[i],
                    _evmScriptCallData[i]
                )
            );
        }
        _evmScript = bytes.concat(SPEC_ID, _evmScript);
    }
}

// SPDX-FileCopyrightText: 2021 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;

/// @author psirex
/// @notice Interface which every EVMScript factory used in EasyTrack contract has to implement
interface IEVMScriptFactory {
    function createEVMScript(address _creator, bytes memory _evmScriptCallData)
        external
        returns (bytes memory);
}

// SPDX-FileCopyrightText: 2025 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.6;

/// @title Lido's MEV Boost Relay Allowed List interface
interface IMEVBoostRelayAllowedList {
    struct Relay {
        string uri;
        string operator;
        bool is_mandatory;
        string description;
    }

    // View Functions
    function get_relays() external view returns (Relay[] memory);

    // State-Changing Functions
    function add_relay(
        string memory uri,
        string memory operator,
        bool is_mandatory,
        string memory description
    ) external;

    function remove_relay(string memory uri) external;
}

// SPDX-FileCopyrightText: 2025 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.6;

import "contracts/interfaces/IMEVBoostRelayAllowedList.sol";

/// @author swissarmytowel
/// @notice Utility functions for validating and decoding MEV Boost relay input data
library MEVBoostRelaysInputUtils {
    // -------------
    // ERRORS
    // -------------
    string private constant ERROR_EMPTY_RELAYS_ARRAY = "EMPTY_RELAYS_ARRAY";
    string private constant ERROR_EMPTY_RELAY_URI = "EMPTY_RELAY_URI";
    string private constant ERROR_MAX_STRING_LENGTH_EXCEEDED = "MAX_STRING_LENGTH_EXCEEDED";
    string private constant ERROR_RELAY_URI_ALREADY_EXISTS = "RELAY_URI_ALREADY_EXISTS";
    string private constant ERROR_RELAY_NOT_FOUND = "RELAY_NOT_FOUND";
    string private constant ERROR_DUPLICATE_RELAY_URI = "DUPLICATE_RELAY_URI";

    // -------------
    // CONSTANTS
    // -------------

    /// @notice Maximum length of a string defined in the MEVBoostRelayAllowedList contract
    uint256 private constant MAX_STRING_LENGTH = 1024;

    // ========================================================
    // Dedicated Validation Functions for Each Operation
    // ========================================================

    /// @notice Validates an array of relay structs
    /// @param _relays Array of Relay structs to validate
    /// @param _currentAllowedRelays Current list of allowed relays from the MEVBoostRelayAllowedList contract
    /// @param _expectExistence Switches the expected existence of the relay URIs in the current relay list
    ///                         if true, the relay URIs should exist in the current relay list and will revert otherwise
    ///                         if false, the relay URIs should NOT exist in the current relay list and will revert otherwise
    function validateRelays(
        IMEVBoostRelayAllowedList.Relay[] memory _relays,
        IMEVBoostRelayAllowedList.Relay[] memory _currentAllowedRelays,
        bool _expectExistence
    ) internal pure {
        uint256 relaysCount = _relays.length;

        require(relaysCount > 0, ERROR_EMPTY_RELAYS_ARRAY);

        for (uint256 i; i < relaysCount; ) {
            IMEVBoostRelayAllowedList.Relay memory relay = _relays[i];
            // Validate the Relay parameters: URI, operator, and description
            uint256 relayURILength = bytes(relay.uri).length;

            require(relayURILength > 0, ERROR_EMPTY_RELAY_URI);
            require(relayURILength <= MAX_STRING_LENGTH, ERROR_MAX_STRING_LENGTH_EXCEEDED);
            require(
                bytes(relay.operator).length <= MAX_STRING_LENGTH,
                ERROR_MAX_STRING_LENGTH_EXCEEDED
            );
            require(
                bytes(relay.description).length <= MAX_STRING_LENGTH,
                ERROR_MAX_STRING_LENGTH_EXCEEDED
            );

            _validateNoDuplicateInputFromIndex(i, _relays);

            bool relayExistsInList = _isRelayURIContained(
                bytes(_relays[i].uri),
                _currentAllowedRelays
            );

            if (_expectExistence) {
                require(relayExistsInList, ERROR_RELAY_NOT_FOUND);
            } else {
                require(!relayExistsInList, ERROR_RELAY_URI_ALREADY_EXISTS);
            }

            unchecked {
                ++i;
            }
        }
    }

    /// @notice Validates an array of relays by their URI strings
    /// @param _relayURIs Array of Relay URI strings to validate
    /// @param _currentAllowedRelays Current list of allowed relays from the MEVBoostRelayAllowedList contract
    function validateRelayURIs(
        string[] memory _relayURIs,
        IMEVBoostRelayAllowedList.Relay[] memory _currentAllowedRelays
    ) internal pure {
        require(_relayURIs.length > 0, ERROR_EMPTY_RELAYS_ARRAY);

        uint256 relayURIsCount = _relayURIs.length;

        for (uint256 i; i < relayURIsCount; ) {
            bytes memory uri = bytes(_relayURIs[i]);

            // Validate the URI length and presence
            require(uri.length > 0, ERROR_EMPTY_RELAY_URI);
            require(uri.length <= MAX_STRING_LENGTH, ERROR_MAX_STRING_LENGTH_EXCEEDED);

            _validateNoDuplicateInputFromIndex(i, _relayURIs);

            bool relayExistsInList = _isRelayURIContained(uri, _currentAllowedRelays);
            // This validation is only used for removing relays, so the relay should exist in the list
            require(relayExistsInList, ERROR_RELAY_NOT_FOUND);

            unchecked {
                ++i;
            }
        }
    }

    /// @notice Decodes the call data for a relay struct array
    /// @param _evmScriptCallData Encoded relay struct array
    /// @return Array of Relay structs decoded from the call data
    function decodeCallDataWithRelayStructs(
        bytes memory _evmScriptCallData
    ) internal pure returns (IMEVBoostRelayAllowedList.Relay[] memory) {
        return abi.decode(_evmScriptCallData, (IMEVBoostRelayAllowedList.Relay[]));
    }

    /// @notice Decodes the call data for a relay URI string array
    /// @param _evmScriptCallData Encoded relay URI string array
    /// @return Array of relay URIs decoded from the call data
    function decodeCallDataWithRelayURIs(
        bytes memory _evmScriptCallData
    ) internal pure returns (string[] memory) {
        return abi.decode(_evmScriptCallData, (string[]));
    }

    // ========================================================
    // Private Helper Functions
    // ========================================================

    /// @dev Asserts that a relay URI exists or not in the current relay list according to the expected condition
    function _isRelayURIContained(
        bytes memory _uri,
        IMEVBoostRelayAllowedList.Relay[] memory _currentAllowedRelays
    ) private pure returns (bool exists) {
        uint256 currentAllowedRelaysLength = _currentAllowedRelays.length;
        bytes32 uriHash = keccak256(_uri);

        for (uint256 j; j < currentAllowedRelaysLength; ) {
            if (keccak256(bytes(_currentAllowedRelays[j].uri)) == uriHash) {
                exists = true;
                break;
            }

            unchecked {
                ++j;
            }
        }
    }

    /// @dev Checks for duplicate URIs in a string array of URIs
    ///      Starts checking from the current relay index to optimize gas usage
    function _validateNoDuplicateInputFromIndex(
        uint256 _currentRelayIndex,
        string[] memory _relayURIs
    ) private pure {
        bytes32 currentURIHash = keccak256(bytes(_relayURIs[_currentRelayIndex]));

        for (uint256 i = _currentRelayIndex + 1; i < _relayURIs.length; ) {
            require(keccak256(bytes(_relayURIs[i])) != currentURIHash, ERROR_DUPLICATE_RELAY_URI);

            unchecked {
                ++i;
            }
        }
    }

    /// @dev Checks for duplicate URIs in a Relay struct array
    ///      Starts checking from the current relay index to optimize gas usage
    function _validateNoDuplicateInputFromIndex(
        uint256 _currentRelayIndex,
        IMEVBoostRelayAllowedList.Relay[] memory _relays
    ) private pure {
        bytes32 currentURIHash = keccak256(bytes(_relays[_currentRelayIndex].uri));

        for (uint256 i = _currentRelayIndex + 1; i < _relays.length; ) {
            require(keccak256(bytes(_relays[i].uri)) != currentURIHash, ERROR_DUPLICATE_RELAY_URI);

            unchecked {
                ++i;
            }
        }
    }
}

Settings
{
  "evmVersion": "istanbul",
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "libraries": {
    "AddMEVBoostRelays.sol": {}
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_trustedCaller","type":"address"},{"internalType":"address","name":"_mevBoostRelayAllowedList","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"bytes","name":"_evmScriptCallData","type":"bytes"}],"name":"createEVMScript","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_evmScriptCallData","type":"bytes"}],"name":"decodeEVMScriptCallData","outputs":[{"components":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"string","name":"operator","type":"string"},{"internalType":"bool","name":"is_mandatory","type":"bool"},{"internalType":"string","name":"description","type":"string"}],"internalType":"struct IMEVBoostRelayAllowedList.Relay[]","name":"relays","type":"tuple[]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"mevBoostRelayAllowedList","outputs":[{"internalType":"contract IMEVBoostRelayAllowedList","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedCaller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c06040523480156200001157600080fd5b5060405162001107380380620011078339810160408190526200003491620000dc565b60408051808201909152601e81527f545255535445445f43414c4c45525f49535f5a45524f5f414444524553530000602082015282906001600160a01b0382166200009d5760405162461bcd60e51b815260040162000094919062000114565b60405180910390fd5b506001600160601b0319606091821b811660805291901b1660a052506200016c565b80516001600160a01b0381168114620000d757600080fd5b919050565b60008060408385031215620000f057600080fd5b620000fb83620000bf565b91506200010b60208401620000bf565b90509250929050565b600060208083528351808285015260005b81811015620001435785810183015185820160400152820162000125565b8181111562000156576000604083870101525b50601f01601f1916929092016040019392505050565b60805160601c60a05160601c610f5c620001ab6000396000818160ba015281816101e1015261040c015260008181605601526101490152610f5c6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063268f076014610051578063ecf7c69014610095578063f6396131146100b5578063fea21c9c146100dc575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a86100a3366004610b81565b6100fc565b60405161008c9190610cd7565b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6100ef6100ea366004610989565b610144565b60405161008c9190610d85565b606061013d83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061045e92505050565b9392505050565b6060827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316146040518060400160405280601381526020017221a0a62622a92fa4a9afa327a92124a22222a760691b815250906101cf5760405162461bcd60e51b81526004016101c69190610d85565b60405180910390fd5b5060006101db8461045e565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304e469ea6040518163ffffffff1660e01b815260040160006040518083038186803b15801561023857600080fd5b505afa15801561024c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102749190810190610a23565b90506028825182516102869190610e66565b11156040518060400160405280601781526020017f4d41585f4e554d5f52454c4159535f4558434545444544000000000000000000815250906102dc5760405162461bcd60e51b81526004016101c69190610d85565b506102e98282600061047a565b815160008167ffffffffffffffff81111561030657610306610f10565b60405190808252806020026020018201604052801561033957816020015b60608152602001906001900390816103245790505b50905060005b828110156104065784818151811061035957610359610efa565b60200260200101516000015185828151811061037757610377610efa565b60200260200101516020015186838151811061039557610395610efa565b6020026020010151604001518784815181106103b3576103b3610efa565b6020026020010151606001516040516020016103d29493929190610d98565b6040516020818303038152906040528282815181106103f3576103f3610efa565b602090810291909101015260010161033f565b506104527f00000000000000000000000000000000000000000000000000000000000000007f2e21ecef55faf701b251536f848bf996ff802936f02c3f13d54c4b49cf8e437583610740565b98975050505050505050565b6060818060200190518101906104749190610a23565b92915050565b8251604080518082019091526012815271454d5054595f52454c4159535f415252415960701b6020820152816104c35760405162461bcd60e51b81526004016101c69190610d85565b5060005b818110156107395760008582815181106104e3576104e3610efa565b6020026020010151905060008160000151519050600081116040518060400160405280600f81526020016e454d5054595f52454c41595f55524960881b815250906105415760405162461bcd60e51b81526004016101c69190610d85565b5060408051808201909152601a81527913505617d4d514925391d7d3115391d51217d15610d15151115160321b60208201526104008211156105965760405162461bcd60e51b81526004016101c69190610d85565b5061040082602001515111156040518060400160405280601a81526020017913505617d4d514925391d7d3115391d51217d15610d15151115160321b815250906105f35760405162461bcd60e51b81526004016101c69190610d85565b5061040082606001515111156040518060400160405280601a81526020017913505617d4d514925391d7d3115391d51217d15610d15151115160321b815250906106505760405162461bcd60e51b81526004016101c69190610d85565b5061065b8388610815565b600061068488858151811061067257610672610efa565b602002602001015160000151886108da565b905085156106d65760408051808201909152600f81526e149153105657d393d517d193d55391608a1b6020820152816106d05760405162461bcd60e51b81526004016101c69190610d85565b5061072b565b60408051808201909152601881527f52454c41595f5552495f414c52454144595f4558495354530000000000000000602082015281156107295760405162461bcd60e51b81526004016101c69190610d85565b505b8360010193505050506104c7565b5050505050565b606060005b82518110156107e557818584838151811061076257610762610efa565b60200260200101515160046107779190610e7e565b8686858151811061078a5761078a610efa565b60200260200101516040516020016107a59493929190610c1f565b60408051601f19818403018152908290526107c39291602001610ca8565b6040516020818303038152906040529150806107de90610ec9565b9050610745565b50600160e01b816040516020016107fd929190610c77565b60405160208183030381529060405290509392505050565b600081838151811061082957610829610efa565b602002602001015160000151805190602001209050600083600161084d9190610e66565b90505b82518110156108d4578183828151811061086c5761086c610efa565b602002602001015160000151805190602001201415604051806040016040528060138152602001724455504c49434154455f52454c41595f55524960681b815250906108cb5760405162461bcd60e51b81526004016101c69190610d85565b50600101610850565b50505050565b80518251602084012060009190825b8281101561092e578185828151811061090457610904610efa565b602002602001015160000151805190602001201415610926576001935061092e565b6001016108e9565b50505092915050565b600082601f83011261094857600080fd5b815161095b61095682610e3e565b610e0d565b81815284602083860101111561097057600080fd5b610981826020830160208701610e9d565b949350505050565b6000806040838503121561099c57600080fd5b82356001600160a01b03811681146109b357600080fd5b9150602083013567ffffffffffffffff8111156109cf57600080fd5b8301601f810185136109e057600080fd5b80356109ee61095682610e3e565b818152866020838501011115610a0357600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020808385031215610a3657600080fd5b825167ffffffffffffffff80821115610a4e57600080fd5b818501915085601f830112610a6257600080fd5b815181811115610a7457610a74610f10565b8060051b610a83858201610e0d565b8281528581019085870183870188018b1015610a9e57600080fd5b600093505b84841015610b7357805186811115610aba57600080fd5b87016080818d03601f1901811315610ad157600080fd5b610ad9610de4565b8a83015189811115610aea57600080fd5b610af88f8d83870101610937565b825250604083015189811115610b0d57600080fd5b610b1b8f8d83870101610937565b8c830152506060808401518015158114610b3457600080fd5b6040830152918301519189831115610b4b57600080fd5b610b598f8d85870101610937565b908201528552505060019390930192918701918701610aa3565b509998505050505050505050565b60008060208385031215610b9457600080fd5b823567ffffffffffffffff80821115610bac57600080fd5b818501915085601f830112610bc057600080fd5b813581811115610bcf57600080fd5b866020828501011115610be157600080fd5b60209290920196919550909350505050565b60008151808452610c0b816020860160208601610e9d565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606086901b1681526001600160e01b031960e085901b81166014830152831660188201528151600090610c6781601c850160208701610e9d565b91909101601c0195945050505050565b6001600160e01b0319831681528151600090610c9a816004850160208701610e9d565b919091016004019392505050565b60008351610cba818460208801610e9d565b835190830190610cce818360208801610e9d565b01949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610d7757603f19898403018552815160808151818652610d2482870182610bf3565b915050888201518582038a870152610d3c8282610bf3565b9150508782015115158886015260608083015192508582038187015250610d638183610bf3565b968901969450505090860190600101610cfe565b509098975050505050505050565b60208152600061013d6020830184610bf3565b608081526000610dab6080830187610bf3565b8281036020840152610dbd8187610bf3565b905084151560408401528281036060840152610dd98185610bf3565b979650505050505050565b6040516080810167ffffffffffffffff81118282101715610e0757610e07610f10565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610e3657610e36610f10565b604052919050565b600067ffffffffffffffff821115610e5857610e58610f10565b50601f01601f191660200190565b60008219821115610e7957610e79610ee4565b500190565b600063ffffffff808316818516808303821115610cce57610cce610ee4565b60005b83811015610eb8578181015183820152602001610ea0565b838111156108d45750506000910152565b6000600019821415610edd57610edd610ee4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220f2131aabea8eff006639e21760dd01dac371c2d737d50ec68c28afd6dfa6a1eb64736f6c63430008060033000000000000000000000000418b816a7c3eca151a31d98e30aa7daa33abf83a000000000000000000000000279d3a456212a1294daed0faee98675a52e8a4bf

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063268f076014610051578063ecf7c69014610095578063f6396131146100b5578063fea21c9c146100dc575b600080fd5b6100787f000000000000000000000000418b816a7c3eca151a31d98e30aa7daa33abf83a81565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a86100a3366004610b81565b6100fc565b60405161008c9190610cd7565b6100787f000000000000000000000000279d3a456212a1294daed0faee98675a52e8a4bf81565b6100ef6100ea366004610989565b610144565b60405161008c9190610d85565b606061013d83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061045e92505050565b9392505050565b6060827f000000000000000000000000418b816a7c3eca151a31d98e30aa7daa33abf83a6001600160a01b0316816001600160a01b0316146040518060400160405280601381526020017221a0a62622a92fa4a9afa327a92124a22222a760691b815250906101cf5760405162461bcd60e51b81526004016101c69190610d85565b60405180910390fd5b5060006101db8461045e565b905060007f000000000000000000000000279d3a456212a1294daed0faee98675a52e8a4bf6001600160a01b03166304e469ea6040518163ffffffff1660e01b815260040160006040518083038186803b15801561023857600080fd5b505afa15801561024c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102749190810190610a23565b90506028825182516102869190610e66565b11156040518060400160405280601781526020017f4d41585f4e554d5f52454c4159535f4558434545444544000000000000000000815250906102dc5760405162461bcd60e51b81526004016101c69190610d85565b506102e98282600061047a565b815160008167ffffffffffffffff81111561030657610306610f10565b60405190808252806020026020018201604052801561033957816020015b60608152602001906001900390816103245790505b50905060005b828110156104065784818151811061035957610359610efa565b60200260200101516000015185828151811061037757610377610efa565b60200260200101516020015186838151811061039557610395610efa565b6020026020010151604001518784815181106103b3576103b3610efa565b6020026020010151606001516040516020016103d29493929190610d98565b6040516020818303038152906040528282815181106103f3576103f3610efa565b602090810291909101015260010161033f565b506104527f000000000000000000000000279d3a456212a1294daed0faee98675a52e8a4bf7f2e21ecef55faf701b251536f848bf996ff802936f02c3f13d54c4b49cf8e437583610740565b98975050505050505050565b6060818060200190518101906104749190610a23565b92915050565b8251604080518082019091526012815271454d5054595f52454c4159535f415252415960701b6020820152816104c35760405162461bcd60e51b81526004016101c69190610d85565b5060005b818110156107395760008582815181106104e3576104e3610efa565b6020026020010151905060008160000151519050600081116040518060400160405280600f81526020016e454d5054595f52454c41595f55524960881b815250906105415760405162461bcd60e51b81526004016101c69190610d85565b5060408051808201909152601a81527913505617d4d514925391d7d3115391d51217d15610d15151115160321b60208201526104008211156105965760405162461bcd60e51b81526004016101c69190610d85565b5061040082602001515111156040518060400160405280601a81526020017913505617d4d514925391d7d3115391d51217d15610d15151115160321b815250906105f35760405162461bcd60e51b81526004016101c69190610d85565b5061040082606001515111156040518060400160405280601a81526020017913505617d4d514925391d7d3115391d51217d15610d15151115160321b815250906106505760405162461bcd60e51b81526004016101c69190610d85565b5061065b8388610815565b600061068488858151811061067257610672610efa565b602002602001015160000151886108da565b905085156106d65760408051808201909152600f81526e149153105657d393d517d193d55391608a1b6020820152816106d05760405162461bcd60e51b81526004016101c69190610d85565b5061072b565b60408051808201909152601881527f52454c41595f5552495f414c52454144595f4558495354530000000000000000602082015281156107295760405162461bcd60e51b81526004016101c69190610d85565b505b8360010193505050506104c7565b5050505050565b606060005b82518110156107e557818584838151811061076257610762610efa565b60200260200101515160046107779190610e7e565b8686858151811061078a5761078a610efa565b60200260200101516040516020016107a59493929190610c1f565b60408051601f19818403018152908290526107c39291602001610ca8565b6040516020818303038152906040529150806107de90610ec9565b9050610745565b50600160e01b816040516020016107fd929190610c77565b60405160208183030381529060405290509392505050565b600081838151811061082957610829610efa565b602002602001015160000151805190602001209050600083600161084d9190610e66565b90505b82518110156108d4578183828151811061086c5761086c610efa565b602002602001015160000151805190602001201415604051806040016040528060138152602001724455504c49434154455f52454c41595f55524960681b815250906108cb5760405162461bcd60e51b81526004016101c69190610d85565b50600101610850565b50505050565b80518251602084012060009190825b8281101561092e578185828151811061090457610904610efa565b602002602001015160000151805190602001201415610926576001935061092e565b6001016108e9565b50505092915050565b600082601f83011261094857600080fd5b815161095b61095682610e3e565b610e0d565b81815284602083860101111561097057600080fd5b610981826020830160208701610e9d565b949350505050565b6000806040838503121561099c57600080fd5b82356001600160a01b03811681146109b357600080fd5b9150602083013567ffffffffffffffff8111156109cf57600080fd5b8301601f810185136109e057600080fd5b80356109ee61095682610e3e565b818152866020838501011115610a0357600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020808385031215610a3657600080fd5b825167ffffffffffffffff80821115610a4e57600080fd5b818501915085601f830112610a6257600080fd5b815181811115610a7457610a74610f10565b8060051b610a83858201610e0d565b8281528581019085870183870188018b1015610a9e57600080fd5b600093505b84841015610b7357805186811115610aba57600080fd5b87016080818d03601f1901811315610ad157600080fd5b610ad9610de4565b8a83015189811115610aea57600080fd5b610af88f8d83870101610937565b825250604083015189811115610b0d57600080fd5b610b1b8f8d83870101610937565b8c830152506060808401518015158114610b3457600080fd5b6040830152918301519189831115610b4b57600080fd5b610b598f8d85870101610937565b908201528552505060019390930192918701918701610aa3565b509998505050505050505050565b60008060208385031215610b9457600080fd5b823567ffffffffffffffff80821115610bac57600080fd5b818501915085601f830112610bc057600080fd5b813581811115610bcf57600080fd5b866020828501011115610be157600080fd5b60209290920196919550909350505050565b60008151808452610c0b816020860160208601610e9d565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606086901b1681526001600160e01b031960e085901b81166014830152831660188201528151600090610c6781601c850160208701610e9d565b91909101601c0195945050505050565b6001600160e01b0319831681528151600090610c9a816004850160208701610e9d565b919091016004019392505050565b60008351610cba818460208801610e9d565b835190830190610cce818360208801610e9d565b01949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610d7757603f19898403018552815160808151818652610d2482870182610bf3565b915050888201518582038a870152610d3c8282610bf3565b9150508782015115158886015260608083015192508582038187015250610d638183610bf3565b968901969450505090860190600101610cfe565b509098975050505050505050565b60208152600061013d6020830184610bf3565b608081526000610dab6080830187610bf3565b8281036020840152610dbd8187610bf3565b905084151560408401528281036060840152610dd98185610bf3565b979650505050505050565b6040516080810167ffffffffffffffff81118282101715610e0757610e07610f10565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610e3657610e36610f10565b604052919050565b600067ffffffffffffffff821115610e5857610e58610f10565b50601f01601f191660200190565b60008219821115610e7957610e79610ee4565b500190565b600063ffffffff808316818516808303821115610cce57610cce610ee4565b60005b83811015610eb8578181015183820152602001610ea0565b838111156108d45750506000910152565b6000600019821415610edd57610edd610ee4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220f2131aabea8eff006639e21760dd01dac371c2d737d50ec68c28afd6dfa6a1eb64736f6c63430008060033

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

000000000000000000000000418b816a7c3eca151a31d98e30aa7daa33abf83a000000000000000000000000279d3a456212a1294daed0faee98675a52e8a4bf

-----Decoded View---------------
Arg [0] : _trustedCaller (address): 0x418B816A7c3ecA151A31d98e30aa7DAa33aBf83A
Arg [1] : _mevBoostRelayAllowedList (address): 0x279d3A456212a1294DaEd0faEE98675a52E8A4Bf

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000418b816a7c3eca151a31d98e30aa7daa33abf83a
Arg [1] : 000000000000000000000000279d3a456212a1294daed0faee98675a52e8a4bf


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