ETH Price: $3,625.15 (+0.32%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deploy Vault194256582024-03-13 10:48:59299 days ago1710326939IN
0x0D76cBF6...7112414a3
0 ETH0.0186084868.06272083
Deploy Vault194183452024-03-12 10:17:11300 days ago1710238631IN
0x0D76cBF6...7112414a3
0 ETH0.0150479555.03965797
Deploy Vault194182682024-03-12 10:01:35300 days ago1710237695IN
0x0D76cBF6...7112414a3
0 ETH0.0136649449.98115426
Deploy Vault194182242024-03-12 9:52:35300 days ago1710237155IN
0x0D76cBF6...7112414a3
0 ETH0.0136742850.01531539
Deploy Vault194178112024-03-12 8:29:35300 days ago1710232175IN
0x0D76cBF6...7112414a3
0 ETH0.0166845661.02577828
Deploy Vault194173242024-03-12 6:51:23300 days ago1710226283IN
0x0D76cBF6...7112414a3
0 ETH0.0156993457.42221246
Deploy Vault194172192024-03-12 6:29:59300 days ago1710224999IN
0x0D76cBF6...7112414a3
0 ETH0.015130355.34086476
Deploy Vault194167782024-03-12 5:01:23300 days ago1710219683IN
0x0D76cBF6...7112414a3
0 ETH0.0132732348.54841206
Deploy Vault194166802024-03-12 4:41:47300 days ago1710218507IN
0x0D76cBF6...7112414a3
0 ETH0.0128518447.00713064
Deploy Vault194165512024-03-12 4:15:35300 days ago1710216935IN
0x0D76cBF6...7112414a3
0 ETH0.0155272656.79279045
Deploy Vault194121312024-03-11 13:23:35300 days ago1710163415IN
0x0D76cBF6...7112414a3
0 ETH0.0248308890.82186978
Deploy Vault194118642024-03-11 12:29:47301 days ago1710160187IN
0x0D76cBF6...7112414a3
0 ETH0.0204984474.97547616
Deploy Vault194104722024-03-11 7:50:23301 days ago1710143423IN
0x0D76cBF6...7112414a3
0 ETH0.0179775965.75518059
Deploy Vault194103642024-03-11 7:28:35301 days ago1710142115IN
0x0D76cBF6...7112414a3
0 ETH0.0140352651.33563226
Deploy Vault194103122024-03-11 7:18:11301 days ago1710141491IN
0x0D76cBF6...7112414a3
0 ETH0.0142243852.02736383
Deploy Vault194102682024-03-11 7:09:23301 days ago1710140963IN
0x0D76cBF6...7112414a3
0 ETH0.0118801243.45296578
Deploy Vault193901602024-03-08 11:30:11304 days ago1709897411IN
0x0D76cBF6...7112414a3
0 ETH0.0124941545.69882647
Deploy Vault193900792024-03-08 11:13:59304 days ago1709896439IN
0x0D76cBF6...7112414a3
0 ETH0.0130140747.60052465
Deploy Vault193890482024-03-08 7:46:23304 days ago1709883983IN
0x0D76cBF6...7112414a3
0 ETH0.0132332348.40209924
Deploy Vault193839882024-03-07 14:47:35304 days ago1709822855IN
0x0D76cBF6...7112414a3
0 ETH0.0272666399.73093622
Deploy Vault193823502024-03-07 9:18:47305 days ago1709803127IN
0x0D76cBF6...7112414a3
0 ETH0.0138081450.50490982
Deploy Vault193811182024-03-07 5:10:23305 days ago1709788223IN
0x0D76cBF6...7112414a3
0 ETH0.0162044759.26977326
Deploy Vault193810122024-03-07 4:49:11305 days ago1709786951IN
0x0D76cBF6...7112414a3
0 ETH0.0183403767.08206831
Deploy Vault193809352024-03-07 4:33:47305 days ago1709786027IN
0x0D76cBF6...7112414a3
0 ETH0.0209630576.67822371
Deploy Vault193757152024-03-06 11:04:47306 days ago1709723087IN
0x0D76cBF6...7112414a3
0 ETH0.017916365.53099246
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
194256582024-03-13 10:48:59299 days ago1710326939
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194183452024-03-12 10:17:11300 days ago1710238631
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194182682024-03-12 10:01:35300 days ago1710237695
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194182242024-03-12 9:52:35300 days ago1710237155
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194178112024-03-12 8:29:35300 days ago1710232175
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194173242024-03-12 6:51:23300 days ago1710226283
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194172192024-03-12 6:29:59300 days ago1710224999
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194167782024-03-12 5:01:23300 days ago1710219683
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194166802024-03-12 4:41:47300 days ago1710218507
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194165512024-03-12 4:15:35300 days ago1710216935
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194121312024-03-11 13:23:35300 days ago1710163415
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194118642024-03-11 12:29:47301 days ago1710160187
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194104722024-03-11 7:50:23301 days ago1710143423
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194103642024-03-11 7:28:35301 days ago1710142115
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194103122024-03-11 7:18:11301 days ago1710141491
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
194102682024-03-11 7:09:23301 days ago1710140963
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
193901602024-03-08 11:30:11304 days ago1709897411
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
193900792024-03-08 11:13:59304 days ago1709896439
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
193890482024-03-08 7:46:23304 days ago1709883983
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
193839882024-03-07 14:47:35304 days ago1709822855
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
193823502024-03-07 9:18:47305 days ago1709803127
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
193811182024-03-07 5:10:23305 days ago1709788223
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
193810122024-03-07 4:49:11305 days ago1709786951
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
193809352024-03-07 4:33:47305 days ago1709786027
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
193757152024-03-06 11:04:47306 days ago1709723087
0x0D76cBF6...7112414a3
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Factory

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 100 runs

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

import {VaultProxy} from "../vault/VaultProxy.sol";
import {BaseVault} from "../vault/BaseVault.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @title Factory
 * @notice Contract to deploy Proxy Vaults.
 */
contract Factory is Ownable {

    // deployed instance of the base vault.
    address private baseVaultImpl;

    // Emitted for every new deployment of a proxy vault contract.
    event NewVaultDeployed(address indexed newProxy, address indexed owner, address[] modules, bytes[] initData);

    // Emitted when base vault implementation address is changed.
    event BaseVaultImplChanged(address indexed _newBaseVaultImpl);

    /**
     * @param _baseVaultImpl - deployed instance of the implementation base vault.
     */
    constructor(address _baseVaultImpl) {
        require(
            _baseVaultImpl != address(0),
            "F: Invalid address"
        );
        baseVaultImpl = _baseVaultImpl;
    }

    /**
     * Function to be executed by Kresus deployer to deploy a new instance of {Proxy}.
     * @param _owner - address of the owner of base vault contract.
     * @param _modules - Modules to be authorized to make changes to the state of vault contract.
     */
    function deployVault(
        address _owner,
        address[] calldata _modules,
        bytes[] calldata _initData
    ) 
        external
        onlyOwner()
    {
        address payable newProxy = payable(new VaultProxy(baseVaultImpl));
        BaseVault(newProxy).init(_owner, _modules, _initData);
        emit NewVaultDeployed(newProxy, _owner, _modules, _initData);
    }

    /**
     * Function to change base vault implrmrntation address.
     * @param _newBaseVaultImpl - implementation address of new base vault.
     */
    function changeBaseVaultImpl(address _newBaseVaultImpl) external onlyOwner() {
        baseVaultImpl =  _newBaseVaultImpl;
        emit BaseVaultImplChanged(_newBaseVaultImpl);
    }

    /**
     * Function to get current base vault implementation contract address.
     */
    function getBaseVaultImpl() external view returns(address) {
        return baseVaultImpl;
    }
}

File 2 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 8 : Proxy.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback() external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive() external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overridden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {}
}

File 4 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

/**
 * @title IModule
 * @notice Interface for a Module.
 */
interface IModule {

    /**	
     * @notice Adds a module to a vault. Cannot execute when vault is locked (or under recovery)	
     * @param _vault The target vault.	
     * @param _module The modules to authorise.	
     */	
    function addModule(address _vault, address _module, bytes memory _initData) external;

    /**
     * @notice Inits a Module for a vault by e.g. setting some vault specific parameters in storage.
     * @param _vault The target vault.
     * @param _initData - Data to be initialised specific to a module when it is authorized.
     */
    function init(address _vault, bytes calldata _initData) external;


    /**
     * @notice Returns whether the module implements a callback for a given static call method.
     * @param _methodId The method id.
     */
    function supportsStaticCall(bytes4 _methodId) external view returns (bool _isSupported);
}

File 6 of 8 : BaseVault.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import "../modules/common/IModule.sol";
import "./IVault.sol";
// import "hardhat/console.sol";

/**
 * @title BaseVault
 * @notice Simple modular vault that authorises modules to call its invoke() method.
 */
contract BaseVault is IVault {

    // Zero address
    address constant internal ZERO_ADDRESS = address(0);
    // The owner
    address public owner;
    // The authorised modules
    mapping (address => bool) public authorised;
    // module executing static calls
    address public staticCallExecutor;
    // The number of modules
    uint256 public modules;

    event AuthorisedModule(address indexed module, bool value);
    event Invoked(address indexed module, address indexed target, uint256 indexed value, bytes data);
    event Received(uint256 indexed value, address indexed sender, bytes data);
    event StaticCallEnabled(address indexed module);

    /**
     * @notice Throws if the sender is not an authorised module.
     */
    modifier moduleOnly {
        require(authorised[msg.sender], "BV: sender not authorized");
        _;
    }

    constructor() {
        owner = msg.sender;
    }

    /**
     * @notice Inits the vault by setting the owner and authorising a list of modules.
     * @param _owner The owner.
     * @param _initData bytes32 initialization data specific to the module.
     * @param _modules The modules to authorise.
     */
    function init(address _owner, address[] calldata _modules, bytes[] calldata _initData) external {
        uint256 len = _modules.length;
        require(owner == ZERO_ADDRESS, "BV: vault already initialised");
        require(_owner != ZERO_ADDRESS, "BV: Invalid address");
        require(len > 0, "BV: empty modules");
        require(_initData.length == len, "BV: inconsistent lengths");
        owner = _owner;
        modules = len;
        for (uint256 i = 0; i < len; i++) {
            require(_modules[i] != ZERO_ADDRESS, "BV: Invalid address");
            require(!authorised[_modules[i]], "BV: Invalid module");
            authorised[_modules[i]] = true;
            IModule(_modules[i]).init(address(this), _initData[i]);
            emit AuthorisedModule(_modules[i], true);
        }
    }

    /**
     * @inheritdoc IVault
     */
    function authoriseModule(
        address _module,
        bool _value,
        bytes memory _initData
    ) 
        external
        moduleOnly
    {
        if (authorised[_module] != _value) {
            emit AuthorisedModule(_module, _value);
            if (_value) {
                modules += 1;
                authorised[_module] = true;
                IModule(_module).init(address(this), _initData);
            } else {
                modules -= 1;
                require(modules > 0, "BV: cannot remove last module");
                delete authorised[_module];
            }
        }
    }

    /**
    * @inheritdoc IVault
    */
    function enabled(bytes4 _sig) public view returns (address) {
        address executor = staticCallExecutor;
        if(executor != ZERO_ADDRESS && IModule(executor).supportsStaticCall(_sig)) {
            return executor;
        }
        return ZERO_ADDRESS;
    }

    /**
    * @inheritdoc IVault
    */
    function enableStaticCall(address _module) external moduleOnly {
        if(staticCallExecutor != _module) {
            require(authorised[_module], "BV: unauthorized executor");
            staticCallExecutor = _module;
            emit StaticCallEnabled(_module);
        }
    }

    /**
     * @inheritdoc IVault
     */
    function setOwner(address _newOwner) external moduleOnly {
        require(_newOwner != ZERO_ADDRESS, "BV: address cannot be null");
        owner = _newOwner;
    }

    /**
     * @notice Performs a generic transaction.
     * @param _target The address for the transaction.
     * @param _value The value of the transaction.
     * @param _data The data of the transaction.
     * @return _result The bytes result after call.
     */
    function invoke(
        address _target,
        uint256 _value,
        bytes calldata _data
    ) 
        external 
        moduleOnly 
        returns(bytes memory _result) 
    {
        bool success;
        require(address(this).balance >= _value, "BV: Insufficient balance");
        emit Invoked(msg.sender, _target, _value, _data);
        (success, _result) = _target.call{value: _value}(_data);
        if (!success) {
            // solhint-disable-next-line no-inline-assembly
            assembly {
                returndatacopy(0, 0, returndatasize())
                revert(0, returndatasize())
            }
        }
    }

    /**
     * @notice This method delegates the static call to a target contract if the data corresponds
     * to an enabled module, or logs the call otherwise.
     */
    fallback() external payable {
        address module = enabled(msg.sig);
        if (module == ZERO_ADDRESS) {
            emit Received(msg.value, msg.sender, msg.data);
        } else {
            require(authorised[module], "BV: unauthorised module");

            // solhint-disable-next-line no-inline-assembly
            assembly {
                calldatacopy(0, 0, calldatasize())
                let result := staticcall(gas(), module, 0, calldatasize(), 0, 0)
                returndatacopy(0, 0, returndatasize())
                switch result
                case 0 {revert(0, returndatasize())}
                default {return (0, returndatasize())}
            }
        }
    }

    receive() external payable {
        emit Received(msg.value, msg.sender, "");
    }
}

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

/**
 * @title IVault
 * @notice Interface for the BaseVault
 */
interface IVault {

    /**
     * @notice Enables/Disables a module.
     * @param _module The target module.
     * @param _value Set to `true` to authorise the module.
     */
    function authoriseModule(address _module, bool _value, bytes memory _initData) external;

    /**
     * @notice Enables a static method by specifying the target module to which the call must be delegated.
     * @param _module The target module.
     */
    function enableStaticCall(address _module) external;


    /**
     * @notice Inits the vault by setting the owner and authorising a list of modules.
     * @param _owner The owner.
     * @param _initData bytes32 initialization data specific to the module.
     * @param _modules The modules to authorise.
     */
    function init(address _owner, address[] calldata _modules, bytes[] calldata _initData) external;

    /**
     * @notice Sets a new owner for the vault.
     * @param _newOwner The new owner.
     */
    function setOwner(address _newOwner) external;

    /**
     * @notice Returns the vault owner.
     * @return The vault owner address.
     */
    function owner() external view returns (address);

    /**
     * @notice Returns the number of authorised modules.
     * @return The number of authorised modules.
     */
    function modules() external view returns (uint256);

    /**
     * @notice Checks if a module is authorised on the vault.
     * @param _module The module address to check.
     * @return `true` if the module is authorised, otherwise `false`.
     */
    function authorised(address _module) external view returns (bool);

    /**
     * @notice Returns the module responsible, if static call is enabled for `_sig`, otherwise return zero address.
     * @param _sig The signature of the static call.
     * @return the module doing the redirection or zero address
     */
    function enabled(bytes4 _sig) external view returns (address);
}

File 8 of 8 : VaultProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import {Proxy} from "@openzeppelin/contracts/proxy/Proxy.sol";

/**
 * @title VaultProxy
 * @notice Basic proxy that delegates all calls to a fixed implementing contract.
 * The implementing contract cannot be upgraded.
 */
contract VaultProxy is Proxy{

    address public immutable implementation;

    /**
     * @param _impl deployed instance of base vault.
     */
    constructor(address _impl) {
        implementation = _impl;
    }

    /**
     * @inheritdoc Proxy
     */
    function _implementation() internal view override returns(address) {
        return implementation;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_baseVaultImpl","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newBaseVaultImpl","type":"address"}],"name":"BaseVaultImplChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newProxy","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address[]","name":"modules","type":"address[]"},{"indexed":false,"internalType":"bytes[]","name":"initData","type":"bytes[]"}],"name":"NewVaultDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_newBaseVaultImpl","type":"address"}],"name":"changeBaseVaultImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address[]","name":"_modules","type":"address[]"},{"internalType":"bytes[]","name":"_initData","type":"bytes[]"}],"name":"deployVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseVaultImpl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5060405161091b38038061091b83398101604081905261002f916100fc565b610038336100ac565b6001600160a01b0381166100875760405162461bcd60e51b8152602060048201526012602482015271463a20496e76616c6964206164647265737360701b604482015260640160405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905561012c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561010e57600080fd5b81516001600160a01b038116811461012557600080fd5b9392505050565b6107e08061013b6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806339123aba146100675780635203fab41461007c578063715018a6146100a55780638da5cb5b146100ad578063d6f50cbb146100be578063f2fde38b146100d1575b600080fd5b61007a6100753660046103ae565b6100e4565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61007a610136565b6000546001600160a01b0316610089565b61007a6100cc36600461041c565b61014a565b61007a6100df3660046103ae565b61025d565b6100ec6102db565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fa655996a579f155400df4743ebf6e06b8f70cb0d0f5793335d50ce4cefee839390600090a250565b61013e6102db565b6101486000610335565b565b6101526102db565b6001546040516000916001600160a01b03169061016e90610385565b6001600160a01b039091168152602001604051809103906000f08015801561019a573d6000803e3d6000fd5b5060405163744e172160e01b81529091506001600160a01b0382169063744e1721906101d290899089908990899089906004016105a3565b600060405180830381600087803b1580156101ec57600080fd5b505af1158015610200573d6000803e3d6000fd5b50505050856001600160a01b0316816001600160a01b03167fe8cb11b4faa8fec491e16eba28df7f5b6100c5851c156bf4afb15ea9fa7e8bdb8787878760405161024d94939291906105e7565b60405180910390a3505050505050565b6102656102db565b6001600160a01b0381166102cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6102d881610335565b50565b6000546001600160a01b031633146101485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6101918061061a83390190565b80356001600160a01b03811681146103a957600080fd5b919050565b6000602082840312156103c057600080fd5b6103c982610392565b9392505050565b60008083601f8401126103e257600080fd5b50813567ffffffffffffffff8111156103fa57600080fd5b6020830191508360208260051b850101111561041557600080fd5b9250929050565b60008060008060006060868803121561043457600080fd5b61043d86610392565b9450602086013567ffffffffffffffff8082111561045a57600080fd5b61046689838a016103d0565b9096509450604088013591508082111561047f57600080fd5b5061048c888289016103d0565b969995985093965092949392505050565b8183526000602080850194508260005b858110156104d9576001600160a01b036104c683610392565b16875295820195908201906001016104ad565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008383855260208086019550808560051b8301018460005b8781101561059657848303601f19018952813536889003601e1901811261054c57600080fd5b8701848101903567ffffffffffffffff81111561056857600080fd5b80360382131561057757600080fd5b6105828582846104e4565b9a86019a9450505090830190600101610526565b5090979650505050505050565b6001600160a01b03861681526060602082018190526000906105c8908301868861049d565b82810360408401526105db81858761050d565b98975050505050505050565b6040815260006105fb60408301868861049d565b828103602084015261060e81858761050d565b97965050505050505056fe60a060405234801561001057600080fd5b5060405161019138038061019183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516101016100906000396000818160410152608301526101016000f3fe608060405260043610601f5760003560e01c80635c60da1b14603157602b565b36602b576029607f565b005b6029607f565b348015603c57600080fd5b5060637f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b60a67f000000000000000000000000000000000000000000000000000000000000000060a8565b565b3660008037600080366000845af43d6000803e80801560c6573d6000f35b3d6000fdfea26469706673582212206a6cbec1f40a551aa540c16f451d44e6770af011a03e8928e1f04d21c950faab64736f6c63430008110033a2646970667358221220d6a661367490f32422a8065e1ee6950050e1d01623a6cfe5f2c91ec50161ba2f64736f6c634300081100330000000000000000000000005ac5b59dbb2bf622f0239ca264b79942ecf8488d

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100625760003560e01c806339123aba146100675780635203fab41461007c578063715018a6146100a55780638da5cb5b146100ad578063d6f50cbb146100be578063f2fde38b146100d1575b600080fd5b61007a6100753660046103ae565b6100e4565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61007a610136565b6000546001600160a01b0316610089565b61007a6100cc36600461041c565b61014a565b61007a6100df3660046103ae565b61025d565b6100ec6102db565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fa655996a579f155400df4743ebf6e06b8f70cb0d0f5793335d50ce4cefee839390600090a250565b61013e6102db565b6101486000610335565b565b6101526102db565b6001546040516000916001600160a01b03169061016e90610385565b6001600160a01b039091168152602001604051809103906000f08015801561019a573d6000803e3d6000fd5b5060405163744e172160e01b81529091506001600160a01b0382169063744e1721906101d290899089908990899089906004016105a3565b600060405180830381600087803b1580156101ec57600080fd5b505af1158015610200573d6000803e3d6000fd5b50505050856001600160a01b0316816001600160a01b03167fe8cb11b4faa8fec491e16eba28df7f5b6100c5851c156bf4afb15ea9fa7e8bdb8787878760405161024d94939291906105e7565b60405180910390a3505050505050565b6102656102db565b6001600160a01b0381166102cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6102d881610335565b50565b6000546001600160a01b031633146101485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6101918061061a83390190565b80356001600160a01b03811681146103a957600080fd5b919050565b6000602082840312156103c057600080fd5b6103c982610392565b9392505050565b60008083601f8401126103e257600080fd5b50813567ffffffffffffffff8111156103fa57600080fd5b6020830191508360208260051b850101111561041557600080fd5b9250929050565b60008060008060006060868803121561043457600080fd5b61043d86610392565b9450602086013567ffffffffffffffff8082111561045a57600080fd5b61046689838a016103d0565b9096509450604088013591508082111561047f57600080fd5b5061048c888289016103d0565b969995985093965092949392505050565b8183526000602080850194508260005b858110156104d9576001600160a01b036104c683610392565b16875295820195908201906001016104ad565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008383855260208086019550808560051b8301018460005b8781101561059657848303601f19018952813536889003601e1901811261054c57600080fd5b8701848101903567ffffffffffffffff81111561056857600080fd5b80360382131561057757600080fd5b6105828582846104e4565b9a86019a9450505090830190600101610526565b5090979650505050505050565b6001600160a01b03861681526060602082018190526000906105c8908301868861049d565b82810360408401526105db81858761050d565b98975050505050505050565b6040815260006105fb60408301868861049d565b828103602084015261060e81858761050d565b97965050505050505056fe60a060405234801561001057600080fd5b5060405161019138038061019183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516101016100906000396000818160410152608301526101016000f3fe608060405260043610601f5760003560e01c80635c60da1b14603157602b565b36602b576029607f565b005b6029607f565b348015603c57600080fd5b5060637f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b60a67f000000000000000000000000000000000000000000000000000000000000000060a8565b565b3660008037600080366000845af43d6000803e80801560c6573d6000f35b3d6000fdfea26469706673582212206a6cbec1f40a551aa540c16f451d44e6770af011a03e8928e1f04d21c950faab64736f6c63430008110033a2646970667358221220d6a661367490f32422a8065e1ee6950050e1d01623a6cfe5f2c91ec50161ba2f64736f6c63430008110033

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

0000000000000000000000005ac5b59dbb2bf622f0239ca264b79942ecf8488d

-----Decoded View---------------
Arg [0] : _baseVaultImpl (address): 0x5AC5b59DbB2bF622f0239Ca264b79942EcF8488d

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005ac5b59dbb2bf622f0239ca264b79942ecf8488d


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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