ETH Price: $1,801.34 (+10.44%)

Contract

0x0bd7473CbBf81d9dD936c61117eD230d95006CA2

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Delta Compose11017842025-04-23 4:51:356 hrs ago1745383895IN
0x0bd7473C...d95006CA2
0 ETH0.000020570.1000001
Delta Compose11017842025-04-23 4:51:356 hrs ago1745383895IN
0x0bd7473C...d95006CA2
0 ETH0.000117640.1000001
Delta Compose11016272025-04-23 2:58:358 hrs ago1745377115IN
0x0bd7473C...d95006CA2
0 ETH0.000014340.06
Delta Compose11016242025-04-23 2:56:358 hrs ago1745376995IN
0x0bd7473C...d95006CA2
0 ETH0.000016010.061
Delta Compose11016122025-04-23 2:47:238 hrs ago1745376443IN
0x0bd7473C...d95006CA2
0 ETH0.000015820.066
Delta Compose11016112025-04-23 2:46:598 hrs ago1745376419IN
0x0bd7473C...d95006CA2
0 ETH0.000015490.06465383
Delta Compose11014832025-04-23 1:37:359 hrs ago1745372255IN
0x0bd7473C...d95006CA2
0 ETH0.000022530.1
Delta Compose11014812025-04-23 1:35:359 hrs ago1745372135IN
0x0bd7473C...d95006CA2
0 ETH0.000023330.1
Delta Compose11014802025-04-23 1:34:479 hrs ago1745372087IN
0x0bd7473C...d95006CA2
0 ETH0.000023970.1
Delta Compose11014442025-04-23 1:13:359 hrs ago1745370815IN
0x0bd7473C...d95006CA2
0 ETH0.000022530.1
Delta Compose11014412025-04-23 1:11:479 hrs ago1745370707IN
0x0bd7473C...d95006CA2
0 ETH0.000023330.1
Delta Compose11014392025-04-23 1:09:119 hrs ago1745370551IN
0x0bd7473C...d95006CA2
0 ETH0.000036920.1
Delta Compose11014352025-04-23 1:05:1110 hrs ago1745370311IN
0x0bd7473C...d95006CA2
0 ETH0.00010240.1
Delta Compose11014342025-04-23 1:04:3510 hrs ago1745370275IN
0x0bd7473C...d95006CA2
0 ETH0.00008950.1
Delta Compose11014332025-04-23 1:03:5910 hrs ago1745370239IN
0x0bd7473C...d95006CA2
0 ETH0.00008950.1
Delta Compose11013752025-04-23 0:40:3510 hrs ago1745368835IN
0x0bd7473C...d95006CA2
0 ETH0.000022530.1
Delta Compose11013702025-04-23 0:38:2310 hrs ago1745368703IN
0x0bd7473C...d95006CA2
0 ETH0.000023330.1
Delta Compose11013682025-04-23 0:37:5910 hrs ago1745368679IN
0x0bd7473C...d95006CA2
0 ETH0.000024390.10176943
Delta Compose11013392025-04-23 0:28:2310 hrs ago1745368103IN
0x0bd7473C...d95006CA2
0 ETH0.000051070.1
Delta Compose11013372025-04-23 0:27:3510 hrs ago1745368055IN
0x0bd7473C...d95006CA2
0 ETH0.000051070.1
Delta Compose10997452025-04-22 8:06:2327 hrs ago1745309183IN
0x0bd7473C...d95006CA2
0 ETH0.000145420.1000001
Delta Compose10996682025-04-22 7:35:4727 hrs ago1745307347IN
0x0bd7473C...d95006CA2
0 ETH0.000132760.1000001
Delta Compose10996682025-04-22 7:35:4727 hrs ago1745307347IN
0x0bd7473C...d95006CA2
0 ETH0.000029460.1000001
Delta Compose10996672025-04-22 7:34:2327 hrs ago1745307263IN
0x0bd7473C...d95006CA2
0 ETH0.000131210.1000001
Delta Compose10995202025-04-22 6:48:3528 hrs ago1745304515IN
0x0bd7473C...d95006CA2
0 ETH0.000217780.1000001
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
10921322025-04-20 1:31:473 days ago1745112707
0x0bd7473C...d95006CA2
0.15 ETH
10921212025-04-20 1:27:593 days ago1745112479
0x0bd7473C...d95006CA2
0.16 ETH
10873792025-04-18 12:39:354 days ago1744979975
0x0bd7473C...d95006CA2
0.00750468 ETH
10873792025-04-18 12:39:354 days ago1744979975
0x0bd7473C...d95006CA2
0.00750468 ETH
10784772025-04-15 8:54:478 days ago1744707287
0x0bd7473C...d95006CA2
0.2525318 ETH
10784772025-04-15 8:54:478 days ago1744707287
0x0bd7473C...d95006CA2
0.2525318 ETH
10783522025-04-15 8:07:598 days ago1744704479
0x0bd7473C...d95006CA2
0.81854901 ETH
10783522025-04-15 8:07:598 days ago1744704479
0x0bd7473C...d95006CA2
0.81854901 ETH
10758432025-04-14 14:48:478 days ago1744642127
0x0bd7473C...d95006CA2
0.0072094 ETH
10758432025-04-14 14:48:478 days ago1744642127
0x0bd7473C...d95006CA2
0.0072094 ETH
10733452025-04-13 21:06:239 days ago1744578383
0x0bd7473C...d95006CA2
0.00051841 ETH
10733452025-04-13 21:06:239 days ago1744578383
0x0bd7473C...d95006CA2
0.00051841 ETH
10696842025-04-12 20:44:2310 days ago1744490663
0x0bd7473C...d95006CA2
0.00766624 ETH
10696842025-04-12 20:44:2310 days ago1744490663
0x0bd7473C...d95006CA2
0.00766624 ETH
10687112025-04-12 13:46:5910 days ago1744465619
0x0bd7473C...d95006CA2
0.02785558 ETH
10687112025-04-12 13:46:5910 days ago1744465619
0x0bd7473C...d95006CA2
0.02785558 ETH
10671182025-04-12 3:55:4711 days ago1744430147
0x0bd7473C...d95006CA2
0.0825 ETH
10671162025-04-12 3:55:2311 days ago1744430123
0x0bd7473C...d95006CA2
0.0825 ETH
10660222025-04-11 21:07:1111 days ago1744405631
0x0bd7473C...d95006CA2
0.22 ETH
10659072025-04-11 20:20:2311 days ago1744402823
0x0bd7473C...d95006CA2
0.22348 ETH
10656562025-04-11 18:34:4711 days ago1744396487
0x0bd7473C...d95006CA2
0.22243 ETH
10656532025-04-11 18:33:3511 days ago1744396415
0x0bd7473C...d95006CA2
0.22264 ETH
10656062025-04-11 18:11:3511 days ago1744395095
0x0bd7473C...d95006CA2
0.22219 ETH
10649202025-04-11 12:17:1111 days ago1744373831
0x0bd7473C...d95006CA2
0.001 ETH
10649182025-04-11 12:16:2311 days ago1744373783
0x0bd7473C...d95006CA2
0.001 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeltaBrokerProxyGen2

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
shanghai EvmVersion
File 1 of 3 : DeltaBrokerGen2.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/******************************************************************************\
* Author: Achthar <[email protected]>
/******************************************************************************/

import {LibModules} from "./libraries/LibModules.sol";
import {IModuleConfig} from "./interfaces/IModuleConfig.sol";

contract DeltaBrokerProxyGen2 {
    error NoImplementation();

    // [LibModules.moduleStorage().selectorToModule].slot
    bytes32 private constant IMPLS_SLOT = 0x76a4e0db4b1954ed8d81a6d47b0f62dd8c71c2f4e57cbbe90dd863575a2bc402;

    constructor(address _contractOwner, address _moduleConfig) {
        LibModules.setContractOwner(_contractOwner);

        // Add the moduleConfig external function from the moduleConfigModule
        IModuleConfig.ModuleConfig[] memory cut = new IModuleConfig.ModuleConfig[](1);
        bytes4[] memory functionSelectors = new bytes4[](1);
        functionSelectors[0] = IModuleConfig.configureModules.selector;
        cut[0] = IModuleConfig.ModuleConfig({
            moduleAddress: _moduleConfig,
            action: IModuleConfig.ModuleConfigAction.Add,
            functionSelectors: functionSelectors
        });
        LibModules.configureModules(cut);
    }

    // Find module for function that is called and execute the
    // function if a module is found and return any value.
    fallback() external payable {
        assembly {
            let cdlen := calldatasize()
            // Store at 0x40, to leave 0x00-0x3F for slot calculation below.
            calldatacopy(0x40, 0x00, cdlen)
            let target := and(mload(0x40), 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)

            // Slot for impls[target] is keccak256(target . IMPLS_SLOT).
            mstore(0x00, target)
            mstore(0x20, IMPLS_SLOT)
            let slot := keccak256(0x00, 0x40)
            target := sload(slot) // overwrite target to delegate address
            if iszero(target) {
                // Revert with:
                // abi.encodeWithSelector(
                //   bytes4(keccak256("NoImplementation()")))
                mstore(0x00, 0xc6745ca800000000000000000000000000000000000000000000000000000000)
                revert(0x00, 4)
            }

            let success := delegatecall(gas(), target, 0x40, cdlen, 0x00, 0x00)
            let rdlen := returndatasize()
            returndatacopy(0x00, 0x00, rdlen)
            if success {
                return(0x00, rdlen)
            }
            revert(0x00, rdlen)
        }
    }

    receive() external payable {}
}

File 2 of 3 : IModuleConfig.sol
// SPDX-License-Identifier: MIT
/**
 * Vendored on December 23, 2021 from:
 * https://github.com/mudgen/diamond-3-hardhat/blob/7feb995/contracts/interfaces/IModuleConfig.sol
 */
pragma solidity ^0.8.0;

interface IModuleConfig {
    enum ModuleConfigAction {
        Add,
        Replace,
        Remove
    }
    // Add=0, Replace=1, Remove=2

    struct ModuleConfig {
        address moduleAddress;
        ModuleConfigAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _moduleConfig Contains the module addresses and function selectors
    function configureModules(ModuleConfig[] calldata _moduleConfig) external;
}

File 3 of 3 : LibModules.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/******************************************************************************\
* Author: Achthar - 1delta.io
* Modified diamond module handling library
/******************************************************************************/

import {IModuleConfig} from "../interfaces/IModuleConfig.sol";

// solhint-disable max-line-length

error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata);

library LibModules {
    bytes32 constant MODULE_STORAGE_POSITION = keccak256("diamond.standard.module.storage");

    struct ModuleAddressAndPosition {
        address moduleAddress;
        uint96 functionSelectorPosition; // position in moduleFunctionSelectors.functionSelectors array
    }

    struct ModuleFunctionSelectors {
        bytes4[] functionSelectors;
        uint256 moduleAddressPosition; // position of moduleAddress in moduleAddresses array
    }

    struct ModuleStorage {
        // maps function selector to the module address and
        // the position of the selector in the moduleFunctionSelectors.selectors array
        mapping(bytes4 => ModuleAddressAndPosition) selectorToModuleAndPosition;
        // maps selector to module
        mapping(bytes4 => address) selectorToModule;
        // maps module addresses to function selectors
        mapping(address => ModuleFunctionSelectors) moduleFunctionSelectors;
        // module addresses
        address[] moduleAddresses;
        // Used to query if a contract implements an interface.
        // Used to implement ERC-165.
        mapping(bytes4 => bool) supportedInterfaces;
        // Used to query if a module exits
        mapping(address => bool) moduleExists;
        // owner of the contract
        address contractOwner;
    }

    function moduleStorage() internal pure returns (ModuleStorage storage ds) {
        bytes32 position = MODULE_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function setContractOwner(address _newOwner) internal {
        ModuleStorage storage ds = moduleStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }

    function contractOwner() internal view returns (address contractOwner_) {
        contractOwner_ = moduleStorage().contractOwner;
    }

    function enforceIsContractOwner() internal view {
        require(msg.sender == moduleStorage().contractOwner, "LibModuleConfig: Must be contract owner");
    }

    event Upgrade(IModuleConfig.ModuleConfig[] _moduleChange);

    // Internal function version of diamondCut
    function configureModules(IModuleConfig.ModuleConfig[] memory _moduleChange) internal {
        for (uint256 moduleIndex; moduleIndex < _moduleChange.length; moduleIndex++) {
            IModuleConfig.ModuleConfigAction action = _moduleChange[moduleIndex].action;
            if (action == IModuleConfig.ModuleConfigAction.Add) {
                addFunctions(_moduleChange[moduleIndex].moduleAddress, _moduleChange[moduleIndex].functionSelectors);
            } else if (action == IModuleConfig.ModuleConfigAction.Replace) {
                replaceFunctions(_moduleChange[moduleIndex].moduleAddress, _moduleChange[moduleIndex].functionSelectors);
            } else if (action == IModuleConfig.ModuleConfigAction.Remove) {
                removeFunctions(_moduleChange[moduleIndex].moduleAddress, _moduleChange[moduleIndex].functionSelectors);
            } else {
                revert("LibModuleConfig: Incorrect ModuleConfigAction");
            }
        }
        emit Upgrade(_moduleChange);
    }

    function addFunctions(address _moduleAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibModuleConfig: No selectors in module to cut");
        ModuleStorage storage ds = moduleStorage();
        require(_moduleAddress != address(0), "LibModuleConfig: Add module can't be address(0)");
        uint96 selectorPosition = uint96(ds.moduleFunctionSelectors[_moduleAddress].functionSelectors.length);
        // add new module address if it does not exist
        if (selectorPosition == 0) {
            addModule(ds, _moduleAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldModuleAddress = ds.selectorToModuleAndPosition[selector].moduleAddress;
            require(oldModuleAddress == address(0), "LibModuleConfig: Can't add function that already exists");
            addFunction(ds, selector, selectorPosition, _moduleAddress);
            selectorPosition++;
        }
    }

    function replaceFunctions(address _moduleAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibModuleConfig: No selectors in module to cut");
        ModuleStorage storage ds = moduleStorage();
        require(_moduleAddress != address(0), "LibModuleConfig: Add module can't be address(0)");
        uint96 selectorPosition = uint96(ds.moduleFunctionSelectors[_moduleAddress].functionSelectors.length);
        // add new module address if it does not exist
        if (selectorPosition == 0) {
            addModule(ds, _moduleAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldModuleAddress = ds.selectorToModuleAndPosition[selector].moduleAddress;
            require(oldModuleAddress != _moduleAddress, "LibModuleConfig: Can't replace function with same function");
            removeFunction(ds, oldModuleAddress, selector);
            addFunction(ds, selector, selectorPosition, _moduleAddress);
            selectorPosition++;
        }
    }

    function removeFunctions(address _moduleAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibModuleConfig: No selectors in module to cut");
        ModuleStorage storage ds = moduleStorage();
        // if function does not exist then do nothing and return
        require(_moduleAddress == address(0), "LibModuleConfig: Remove module address must be address(0)");
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldModuleAddress = ds.selectorToModuleAndPosition[selector].moduleAddress;
            removeFunction(ds, oldModuleAddress, selector);
        }
    }

    function addModule(ModuleStorage storage ds, address _moduleAddress) internal {
        enforceHasContractCode(_moduleAddress, "LibModuleConfig: New module has no code");
        ds.moduleFunctionSelectors[_moduleAddress].moduleAddressPosition = ds.moduleAddresses.length;
        ds.moduleAddresses.push(_moduleAddress);
        ds.moduleExists[_moduleAddress] = true;
    }

    function addFunction(
        ModuleStorage storage ds,
        bytes4 _selector,
        uint96 _selectorPosition,
        address _moduleAddress
    ) internal {
        ds.selectorToModuleAndPosition[_selector].functionSelectorPosition = _selectorPosition;
        ds.moduleFunctionSelectors[_moduleAddress].functionSelectors.push(_selector);
        ds.selectorToModuleAndPosition[_selector].moduleAddress = _moduleAddress;
        ds.selectorToModule[_selector] = _moduleAddress;
    }

    function removeFunction(
        ModuleStorage storage ds,
        address _moduleAddress,
        bytes4 _selector
    ) internal {
        require(_moduleAddress != address(0), "LibModuleConfig: Can't remove function that doesn't exist");
        // an immutable function is a function defined directly in a diamond
        require(_moduleAddress != address(this), "LibModuleConfig: Can't remove immutable function");
        // replace selector with last selector, then delete last selector
        uint256 selectorPosition = ds.selectorToModuleAndPosition[_selector].functionSelectorPosition;
        uint256 lastSelectorPosition = ds.moduleFunctionSelectors[_moduleAddress].functionSelectors.length - 1;
        // if not the same then replace _selector with lastSelector
        if (selectorPosition != lastSelectorPosition) {
            bytes4 lastSelector = ds.moduleFunctionSelectors[_moduleAddress].functionSelectors[lastSelectorPosition];
            ds.moduleFunctionSelectors[_moduleAddress].functionSelectors[selectorPosition] = lastSelector;
            ds.selectorToModuleAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);
        }
        // delete the last selector
        ds.moduleFunctionSelectors[_moduleAddress].functionSelectors.pop();
        delete ds.selectorToModuleAndPosition[_selector];
        delete ds.selectorToModule[_selector];

        // if no more selectors for module address then delete the module address
        if (lastSelectorPosition == 0) {
            // replace module address with last module address and delete last module address
            uint256 lastModuleAddressPosition = ds.moduleAddresses.length - 1;
            uint256 moduleAddressPosition = ds.moduleFunctionSelectors[_moduleAddress].moduleAddressPosition;
            if (moduleAddressPosition != lastModuleAddressPosition) {
                address lastModuleAddress = ds.moduleAddresses[lastModuleAddressPosition];
                ds.moduleAddresses[moduleAddressPosition] = lastModuleAddress;
                ds.moduleFunctionSelectors[lastModuleAddress].moduleAddressPosition = moduleAddressPosition;
            }
            ds.moduleAddresses.pop();
            delete ds.moduleFunctionSelectors[_moduleAddress].moduleAddressPosition;
            ds.moduleExists[_moduleAddress] = false;
        }
    }

    function initializeModuleConfig(address _init, bytes memory _calldata) internal {
        if (_init == address(0)) {
            return;
        }
        enforceHasContractCode(_init, "LibModuleConfig: _init address has no code");
        (bool success, bytes memory error) = _init.delegatecall(_calldata);
        if (!success) {
            if (error.length > 0) {
                // bubble up error
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(error)
                    revert(add(32, error), returndata_size)
                }
            } else {
                revert InitializationFunctionReverted(_init, _calldata);
            }
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize > 0, _errorMessage);
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"internalType":"address","name":"_moduleConfig","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NoImplementation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"moduleAddress","type":"address"},{"internalType":"enum IModuleConfig.ModuleConfigAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IModuleConfig.ModuleConfig[]","name":"_moduleChange","type":"tuple[]"}],"name":"Upgrade","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

608060405234801561000f575f80fd5b5060405161121738038061121783398101604081905261002e91610eae565b61003782610124565b6040805160018082528183019092525f91816020015b60408051606080820183525f80835260208301529181019190915281526020019060019003908161004d5750506040805160018082528183019092529192505f9190602080830190803683370190505090506369fc9a8060e01b815f815181106100b9576100b9610edf565b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03851681529081015f815260200182815250825f8151811061010757610107610edf565b602090810291909101015261011b826101a5565b505050506110a5565b7f76a4e0db4b1954ed8d81a6d47b0f62dd8c71c2f4e57cbbe90dd863575a2bc40780546001600160a01b031981166001600160a01b038481169182179093556040515f805160206111b0833981519152939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f5b8151811015610378575f8282815181106101c3576101c3610edf565b60200260200101516020015190505f60028111156101e3576101e3610ef3565b8160028111156101f5576101f5610ef3565b036102485761024383838151811061020f5761020f610edf565b60200260200101515f015184848151811061022c5761022c610edf565b6020026020010151604001516103b360201b60201c565b61036f565b600181600281111561025c5761025c610ef3565b036102aa5761024383838151811061027657610276610edf565b60200260200101515f015184848151811061029357610293610edf565b60200260200101516040015161063560201b60201c565b60028160028111156102be576102be610ef3565b0361030c576102438383815181106102d8576102d8610edf565b60200260200101515f01518484815181106102f5576102f5610edf565b6020026020010151604001516108c060201b60201c565b60405162461bcd60e51b815260206004820152602d60248201527f4c69624d6f64756c65436f6e6669673a20496e636f7272656374204d6f64756c60448201526c32a1b7b73334b3a0b1ba34b7b760991b60648201526084015b60405180910390fd5b506001016101a7565b507f5baa3478e7f762f071cc4e10c54ae2573362a38e93c8ba3f39d9acf6e49ca528816040516103a89190610f07565b60405180910390a150565b5f8151116104075760405162461bcd60e51b815260206004820152602e60248201525f805160206111d083398151915260448201526d081b5bd91d5b19481d1bc818dd5d60921b6064820152608401610366565b5f805160206111b08339815191526001600160a01b0383166104705760405162461bcd60e51b815260206004820152602f60248201525f8051602061119083398151915260448201526e74206265206164647265737328302960881b6064820152608401610366565b6001600160a01b0383165f908152600282016020526040812054906001600160601b03821690036104a5576104a58285610a09565b5f5b835181101561062e575f8482815181106104c3576104c3610edf565b6020908102919091018101516001600160e01b031981165f908152918690526040909120549091506001600160a01b031680156105685760405162461bcd60e51b815260206004820152603760248201527f4c69624d6f64756c65436f6e6669673a2043616e2774206164642066756e637460448201527f696f6e207468617420616c7265616479206578697374730000000000000000006064820152608401610366565b6001600160e01b031982165f8181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c1680855260028b0184528285208054600181810183559187528587206008820401805463ffffffff60079093166004026101000a928302191660e08c901c9290920291909117905595855281546001600160a01b03199081168217909255948a01909252909120805490911690911790558361061d81611002565b945050600190920191506104a79050565b5050505050565b5f8151116106895760405162461bcd60e51b815260206004820152602e60248201525f805160206111d083398151915260448201526d081b5bd91d5b19481d1bc818dd5d60921b6064820152608401610366565b5f805160206111b08339815191526001600160a01b0383166106f25760405162461bcd60e51b815260206004820152602f60248201525f8051602061119083398151915260448201526e74206265206164647265737328302960881b6064820152608401610366565b6001600160a01b0383165f908152600282016020526040812054906001600160601b0382169003610727576107278285610a09565b5f5b835181101561062e575f84828151811061074557610745610edf565b6020908102919091018101516001600160e01b031981165f908152918690526040909120549091506001600160a01b0390811690871681036107ef5760405162461bcd60e51b815260206004820152603a60248201527f4c69624d6f64756c65436f6e6669673a2043616e2774207265706c616365206660448201527f756e6374696f6e20776974682073616d652066756e6374696f6e0000000000006064820152608401610366565b6107fa858284610a8d565b6001600160e01b031982165f8181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c1680855260028b0184528285208054600181810183559187528587206008820401805463ffffffff60079093166004026101000a928302191660e08c901c9290920291909117905595855281546001600160a01b03199081168217909255948a0190925290912080549091169091179055836108af81611002565b945050600190920191506107299050565b5f8151116109145760405162461bcd60e51b815260206004820152602e60248201525f805160206111d083398151915260448201526d081b5bd91d5b19481d1bc818dd5d60921b6064820152608401610366565b5f805160206111b08339815191526001600160a01b0383161561099f5760405162461bcd60e51b815260206004820152603960248201527f4c69624d6f64756c65436f6e6669673a2052656d6f7665206d6f64756c65206160448201527f646472657373206d7573742062652061646472657373283029000000000000006064820152608401610366565b5f5b8251811015610a03575f8382815181106109bd576109bd610edf565b6020908102919091018101516001600160e01b031981165f908152918590526040909120549091506001600160a01b03166109f9848284610a8d565b50506001016109a1565b50505050565b610a2b816040518060600160405280602781526020016111f060279139610e72565b6003820180546001600160a01b039092165f81815260028501602090815260408083206001908101879055808701865594835281832090950180546001600160a01b03191684179055918152600590940190529120805460ff19169091179055565b6001600160a01b038216610b095760405162461bcd60e51b815260206004820152603960248201527f4c69624d6f64756c65436f6e6669673a2043616e27742072656d6f766520667560448201527f6e6374696f6e207468617420646f65736e2774206578697374000000000000006064820152608401610366565b306001600160a01b03831603610b7a5760405162461bcd60e51b815260206004820152603060248201527f4c69624d6f64756c65436f6e6669673a2043616e27742072656d6f766520696d60448201526f36baba30b1363290333ab731ba34b7b760811b6064820152608401610366565b6001600160e01b031981165f90815260208481526040808320546001600160a01b038616845260028701909252822054600160a01b9091046001600160601b03169190610bc99060019061102d565b9050808214610cb8576001600160a01b0384165f9081526002860160205260408120805483908110610bfd57610bfd610edf565b5f91825260208083206008830401546001600160a01b038916845260028a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610c4d57610c4d610edf565b5f91825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b0384165f9081526002860160205260409020805480610ce057610ce0611046565b5f828152602080822060085f1990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b031985168252868152604080832083905560018801909152812080546001600160a01b031916905581900361062e5760038501545f90610d589060019061102d565b6001600160a01b0386165f908152600288016020526040902060010154909150808214610e04575f876003018381548110610d9557610d95610edf565b5f918252602090912001546003890180546001600160a01b039092169250829184908110610dc557610dc5610edf565b5f91825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260028901909152604090206001018190555b86600301805480610e1757610e17611046565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b0388168252600289018152604080832060010183905560058a019091529020805460ff1916905550505050505050565b813b8181610a035760405162461bcd60e51b8152600401610366919061105a565b80516001600160a01b0381168114610ea9575f80fd5b919050565b5f8060408385031215610ebf575f80fd5b610ec883610e93565b9150610ed660208401610e93565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015610fe257868503603f19018452815180516001600160a01b031686526020810151606087019060038110610f7357634e487b7160e01b5f52602160045260245ffd5b8060208901525060408201519150606060408801528082518083526080890191506020840193505f92505b80831015610fca5783516001600160e01b03191682526020938401936001939093019290910190610f9e565b50965050506020938401939190910190600101610f2d565b50929695505050505050565b634e487b7160e01b5f52601160045260245ffd5b5f6001600160601b0382166002600160601b0319810161102457611024610fee565b60010192915050565b8181038181111561104057611040610fee565b92915050565b634e487b7160e01b5f52603160045260245ffd5b602081525f82518060208401525f5b818110156110865760208186018101516040868401015201611069565b505f604082850101526040601f19601f83011684010191505092915050565b60df806110b15f395ff3fe608060405236600a57005b36805f604037604080517fffffffff00000000000000000000000000000000000000000000000000000000165f9081527f76a4e0db4b1954ed8d81a6d47b0f62dd8c71c2f4e57cbbe90dd863575a2bc402602052205480608c577fc6745ca8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80836040845af49150503d805f803e811560a557805ff35b805ffdfea264697066735822122086fe70a19252b382ec3a34bd72b741294d466455f3f5b25734f7cd5d95b0476464736f6c634300081a00334c69624d6f64756c65436f6e6669673a20416464206d6f64756c652063616e2776a4e0db4b1954ed8d81a6d47b0f62dd8c71c2f4e57cbbe90dd863575a2bc4014c69624d6f64756c65436f6e6669673a204e6f2073656c6563746f727320696e4c69624d6f64756c65436f6e6669673a204e6577206d6f64756c6520686173206e6f20636f6465000000000000000000000000999999833d965c275a2c102a4ebf222ca938546f000000000000000000000000cb6eb8df68153cebf60e1872273ef52075a5c297

Deployed Bytecode

0x608060405236600a57005b36805f604037604080517fffffffff00000000000000000000000000000000000000000000000000000000165f9081527f76a4e0db4b1954ed8d81a6d47b0f62dd8c71c2f4e57cbbe90dd863575a2bc402602052205480608c577fc6745ca8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80836040845af49150503d805f803e811560a557805ff35b805ffdfea264697066735822122086fe70a19252b382ec3a34bd72b741294d466455f3f5b25734f7cd5d95b0476464736f6c634300081a0033

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

000000000000000000000000999999833d965c275a2c102a4ebf222ca938546f000000000000000000000000cb6eb8df68153cebf60e1872273ef52075a5c297

-----Decoded View---------------
Arg [0] : _contractOwner (address): 0x999999833d965c275A2C102a4Ebf222ca938546f
Arg [1] : _moduleConfig (address): 0xcB6Eb8df68153cebF60E1872273Ef52075a5C297

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000999999833d965c275a2c102a4ebf222ca938546f
Arg [1] : 000000000000000000000000cb6eb8df68153cebf60e1872273ef52075a5c297


Block Transaction Gas Used Reward
view all blocks sequenced

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
[ 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.