Feature Tip: Add private address tag to any address under My Name Tag !
This nametag was submitted by Kleros Curate.
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 9,758 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Counterfa... | 19016730 | 259 days ago | IN | 0 ETH | 0.01243037 | ||||
Create Counterfa... | 18844473 | 283 days ago | IN | 0 ETH | 0.01114222 | ||||
Create Counterfa... | 17933521 | 411 days ago | IN | 0 ETH | 0.00813296 | ||||
Create Counterfa... | 14810776 | 864 days ago | IN | 0 ETH | 0.01238698 | ||||
Create Counterfa... | 14499605 | 914 days ago | IN | 0 ETH | 0.01492667 | ||||
Create Counterfa... | 14478269 | 917 days ago | IN | 0 ETH | 0.02372146 | ||||
Create Counterfa... | 13954055 | 998 days ago | IN | 0 ETH | 0.05583109 | ||||
Create Counterfa... | 13925591 | 1002 days ago | IN | 0 ETH | 0.0270857 | ||||
Create Counterfa... | 13872110 | 1011 days ago | IN | 0 ETH | 0.0315177 | ||||
Create Counterfa... | 13826101 | 1018 days ago | IN | 0 ETH | 0.04914186 | ||||
Create Counterfa... | 13808373 | 1021 days ago | IN | 0 ETH | 0.02826234 | ||||
Create Counterfa... | 13709147 | 1036 days ago | IN | 0 ETH | 0.0823211 | ||||
Create Counterfa... | 13685935 | 1040 days ago | IN | 0 ETH | 0.04591188 | ||||
Create Counterfa... | 13652017 | 1045 days ago | IN | 0 ETH | 0.04198867 | ||||
Create Counterfa... | 13601987 | 1053 days ago | IN | 0 ETH | 0.06291766 | ||||
Create Counterfa... | 13594606 | 1054 days ago | IN | 0 ETH | 0.05855475 | ||||
Create Counterfa... | 13459858 | 1076 days ago | IN | 0 ETH | 0.03189837 | ||||
Create Counterfa... | 13347862 | 1093 days ago | IN | 0 ETH | 0.05102493 | ||||
Create Counterfa... | 13133638 | 1126 days ago | IN | 0 ETH | 0.04707678 | ||||
Create Counterfa... | 12947945 | 1155 days ago | IN | 0 ETH | 0.02285442 | ||||
Create Counterfa... | 12662919 | 1200 days ago | IN | 0 ETH | 0.00369602 | ||||
Create Counterfa... | 12633750 | 1204 days ago | IN | 0 ETH | 0.01259234 | ||||
Create Counterfa... | 12597954 | 1210 days ago | IN | 0 ETH | 0.00599838 | ||||
Create Counterfa... | 12587922 | 1211 days ago | IN | 0 ETH | 0.00759507 | ||||
Create Counterfa... | 12567131 | 1215 days ago | IN | 0 ETH | 0.00693984 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
WalletFactory
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Multiple files format)
// Copyright (C) 2018 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.6.12; import "./Proxy.sol"; import "./BaseWallet.sol"; import "./Owned.sol"; import "./Managed.sol"; import "./IGuardianStorage.sol"; import "./IModuleRegistry.sol"; import "./IVersionManager.sol"; /** * @title WalletFactory * @notice The WalletFactory contract creates and assigns wallets to accounts. * @author Julien Niset - <[email protected]> */ contract WalletFactory is Owned, Managed { // The address of the module dregistry address public moduleRegistry; // The address of the base wallet implementation address public walletImplementation; // The address of the GuardianStorage address public guardianStorage; // *************** Events *************************** // event ModuleRegistryChanged(address addr); event WalletCreated(address indexed wallet, address indexed owner, address indexed guardian); // *************** Constructor ********************** // /** * @notice Default constructor. */ constructor(address _moduleRegistry, address _walletImplementation, address _guardianStorage) public { require(_moduleRegistry != address(0), "WF: ModuleRegistry address not defined"); require(_walletImplementation != address(0), "WF: WalletImplementation address not defined"); require(_guardianStorage != address(0), "WF: GuardianStorage address not defined"); moduleRegistry = _moduleRegistry; walletImplementation = _walletImplementation; guardianStorage = _guardianStorage; } // *************** External Functions ********************* // /** * @notice Lets the manager create a wallet for an owner account. * The wallet is initialised with the version manager module, a version number and a first guardian. * The wallet is created using the CREATE opcode. * @param _owner The account address. * @param _versionManager The version manager module * @param _guardian The guardian address. * @param _version The version of the feature bundle. */ function createWallet( address _owner, address _versionManager, address _guardian, uint256 _version ) external onlyManager { validateInputs(_owner, _versionManager, _guardian, _version); Proxy proxy = new Proxy(walletImplementation); address payable wallet = address(proxy); configureWallet(BaseWallet(wallet), _owner, _versionManager, _guardian, _version); } /** * @notice Lets the manager create a wallet for an owner account at a specific address. * The wallet is initialised with the version manager module, the version number and a first guardian. * The wallet is created using the CREATE2 opcode. * @param _owner The account address. * @param _versionManager The version manager module * @param _guardian The guardian address. * @param _salt The salt. * @param _version The version of the feature bundle. */ function createCounterfactualWallet( address _owner, address _versionManager, address _guardian, bytes32 _salt, uint256 _version ) external onlyManager returns (address _wallet) { validateInputs(_owner, _versionManager, _guardian, _version); bytes32 newsalt = newSalt(_salt, _owner, _versionManager, _guardian, _version); Proxy proxy = new Proxy{salt: newsalt}(walletImplementation); address payable wallet = address(proxy); configureWallet(BaseWallet(wallet), _owner, _versionManager, _guardian, _version); return wallet; } /** * @notice Gets the address of a counterfactual wallet with a first default guardian. * @param _owner The account address. * @param _versionManager The version manager module * @param _guardian The guardian address. * @param _salt The salt. * @param _version The version of feature bundle. * @return _wallet The address that the wallet will have when created using CREATE2 and the same input parameters. */ function getAddressForCounterfactualWallet( address _owner, address _versionManager, address _guardian, bytes32 _salt, uint256 _version ) external view returns (address _wallet) { validateInputs(_owner, _versionManager, _guardian, _version); bytes32 newsalt = newSalt(_salt, _owner, _versionManager, _guardian, _version); bytes memory code = abi.encodePacked(type(Proxy).creationCode, uint256(walletImplementation)); bytes32 hash = keccak256(abi.encodePacked(bytes1(0xff), address(this), newsalt, keccak256(code))); _wallet = address(uint160(uint256(hash))); } /** * @notice Lets the owner change the address of the module registry contract. * @param _moduleRegistry The address of the module registry contract. */ function changeModuleRegistry(address _moduleRegistry) external onlyOwner { require(_moduleRegistry != address(0), "WF: address cannot be null"); moduleRegistry = _moduleRegistry; emit ModuleRegistryChanged(_moduleRegistry); } /** * @notice Inits the module for a wallet by doing nothing. * The method can only be called by the wallet itself. * @param _wallet The wallet. */ function init(BaseWallet _wallet) external pure { //do nothing } // *************** Internal Functions ********************* // /** * @notice Helper method to configure a wallet for a set of input parameters. * @param _wallet The target wallet * @param _owner The account address. * @param _versionManager The version manager module * @param _guardian The guardian address. * @param _version The version of the feature bundle. */ function configureWallet( BaseWallet _wallet, address _owner, address _versionManager, address _guardian, uint256 _version ) internal { // add the factory to modules so it can add a guardian and upgrade the wallet to the required version address[] memory extendedModules = new address[](2); extendedModules[0] = _versionManager; extendedModules[1] = address(this); // initialise the wallet with the owner and the extended modules _wallet.init(_owner, extendedModules); // add guardian IGuardianStorage(guardianStorage).addGuardian(address(_wallet), _guardian); // upgrade the wallet IVersionManager(_versionManager).upgradeWallet(address(_wallet), _version); // remove the factory from the authorised modules _wallet.authoriseModule(address(this), false); // emit event emit WalletCreated(address(_wallet), _owner, _guardian); } /** * @notice Generates a new salt based on a provided salt, an owner, a list of modules and an optional guardian. * @param _salt The slat provided. * @param _owner The owner address. * @param _versionManager The version manager module * @param _guardian The guardian address. * @param _version The version of feature bundle */ function newSalt(bytes32 _salt, address _owner, address _versionManager, address _guardian, uint256 _version) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_salt, _owner, _versionManager, _guardian, _version)); } /** * @notice Throws if the owner, guardian, version or version manager is invalid. * @param _owner The owner address. * @param _versionManager The version manager module * @param _guardian The guardian address * @param _version The version of feature bundle */ function validateInputs(address _owner, address _versionManager, address _guardian, uint256 _version) internal view { require(_owner != address(0), "WF: owner cannot be null"); require(IModuleRegistry(moduleRegistry).isRegisteredModule(_versionManager), "WF: invalid _versionManager"); require(_guardian != (address(0)), "WF: guardian cannot be null"); require(_version > 0, "WF: invalid _version"); } }
// Copyright (C) 2018 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.6.12; import "./IModule.sol"; import "./IWallet.sol"; /** * @title BaseWallet * @notice Simple modular wallet that authorises modules to call its invoke() method. * @author Julien Niset - <[email protected]> */ contract BaseWallet is IWallet { // The implementation of the proxy address public implementation; // The owner address public override owner; // The authorised modules mapping (address => bool) public override authorised; // The enabled static calls mapping (bytes4 => address) public override enabled; // The number of modules uint public override modules; event AuthorisedModule(address indexed module, bool value); event EnabledStaticCall(address indexed module, bytes4 indexed method); event Invoked(address indexed module, address indexed target, uint indexed value, bytes data); event Received(uint indexed value, address indexed sender, bytes data); event OwnerChanged(address owner); /** * @notice Throws if the sender is not an authorised module. */ modifier moduleOnly { require(authorised[msg.sender], "BW: msg.sender not an authorized module"); _; } /** * @notice Inits the wallet by setting the owner and authorising a list of modules. * @param _owner The owner. * @param _modules The modules to authorise. */ function init(address _owner, address[] calldata _modules) external { require(owner == address(0) && modules == 0, "BW: wallet already initialised"); require(_modules.length > 0, "BW: construction requires at least 1 module"); owner = _owner; modules = _modules.length; for (uint256 i = 0; i < _modules.length; i++) { require(authorised[_modules[i]] == false, "BW: module is already added"); authorised[_modules[i]] = true; IModule(_modules[i]).init(address(this)); emit AuthorisedModule(_modules[i], true); } if (address(this).balance > 0) { emit Received(address(this).balance, address(0), ""); } } /** * @inheritdoc IWallet */ function authoriseModule(address _module, bool _value) external override moduleOnly { if (authorised[_module] != _value) { emit AuthorisedModule(_module, _value); if (_value == true) { modules += 1; authorised[_module] = true; IModule(_module).init(address(this)); } else { modules -= 1; require(modules > 0, "BW: wallet must have at least one module"); delete authorised[_module]; } } } /** * @inheritdoc IWallet */ function enableStaticCall(address _module, bytes4 _method) external override moduleOnly { require(authorised[_module], "BW: must be an authorised module for static call"); enabled[_method] = _module; emit EnabledStaticCall(_module, _method); } /** * @inheritdoc IWallet */ function setOwner(address _newOwner) external override moduleOnly { require(_newOwner != address(0), "BW: address cannot be null"); owner = _newOwner; emit OwnerChanged(_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. */ function invoke(address _target, uint _value, bytes calldata _data) external moduleOnly returns (bytes memory _result) { bool success; (success, _result) = _target.call{value: _value}(_data); if (!success) { // solhint-disable-next-line no-inline-assembly assembly { returndatacopy(0, 0, returndatasize()) revert(0, returndatasize()) } } emit Invoked(msg.sender, _target, _value, _data); } /** * @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 == address(0)) { emit Received(msg.value, msg.sender, msg.data); } else { require(authorised[module], "BW: must be an authorised module for static call"); // 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 { } }
// Copyright (C) 2018 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.6.12; interface IGuardianStorage { /** * @notice Lets an authorised module add a guardian to a wallet. * @param _wallet The target wallet. * @param _guardian The guardian to add. */ function addGuardian(address _wallet, address _guardian) external; /** * @notice Lets an authorised module revoke a guardian from a wallet. * @param _wallet The target wallet. * @param _guardian The guardian to revoke. */ function revokeGuardian(address _wallet, address _guardian) external; /** * @notice Checks if an account is a guardian for a wallet. * @param _wallet The target wallet. * @param _guardian The account. * @return true if the account is a guardian for a wallet. */ function isGuardian(address _wallet, address _guardian) external view returns (bool); function isLocked(address _wallet) external view returns (bool); function getLock(address _wallet) external view returns (uint256); function getLocker(address _wallet) external view returns (address); function setLock(address _wallet, uint256 _releaseAfter) external; function getGuardians(address _wallet) external view returns (address[] memory); function guardianCount(address _wallet) external view returns (uint256); }
// This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.6.12; pragma experimental ABIEncoderV2; /** * @title ILimitStorage * @notice LimitStorage interface */ interface ILimitStorage { struct Limit { // the current limit uint128 current; // the pending limit if any uint128 pending; // when the pending limit becomes the current limit uint64 changeAfter; } struct DailySpent { // The amount already spent during the current period uint128 alreadySpent; // The end of the current period uint64 periodEnd; } function setLimit(address _wallet, Limit memory _limit) external; function getLimit(address _wallet) external view returns (Limit memory _limit); function setDailySpent(address _wallet, DailySpent memory _dailySpent) external; function getDailySpent(address _wallet) external view returns (DailySpent memory _dailySpent); function setLimitAndDailySpent(address _wallet, Limit memory _limit, DailySpent memory _dailySpent) external; function getLimitAndDailySpent(address _wallet) external view returns (Limit memory _limit, DailySpent memory _dailySpent); }
// Copyright (C) 2018 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.6.12; /** * @title IModule * @notice Interface for a module. * A module MUST implement the addModule() method to ensure that a wallet with at least one module * can never end up in a "frozen" state. * @author Julien Niset - <[email protected]> */ interface IModule { /** * @notice Inits a module for a wallet by e.g. setting some wallet specific parameters in storage. * @param _wallet The wallet. */ function init(address _wallet) external; /** * @notice Adds a module to a wallet. Cannot execute when wallet is locked (or under recovery) * @param _wallet The target wallet. * @param _module The modules to authorise. */ function addModule(address _wallet, address _module) external; }
// Copyright (C) 2020 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.6.12; /** * @title IModuleRegistry * @notice Interface for the registry of authorised modules. */ interface IModuleRegistry { function registerModule(address _module, bytes32 _name) external; function deregisterModule(address _module) external; function registerUpgrader(address _upgrader, bytes32 _name) external; function deregisterUpgrader(address _upgrader) external; function recoverToken(address _token) external; function moduleInfo(address _module) external view returns (bytes32); function upgraderInfo(address _upgrader) external view returns (bytes32); function isRegisteredModule(address _module) external view returns (bool); function isRegisteredModule(address[] calldata _modules) external view returns (bool); function isRegisteredUpgrader(address _upgrader) external view returns (bool); }
// Copyright (C) 2018 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.6.12; pragma experimental ABIEncoderV2; import "./ILimitStorage.sol"; /** * @title IVersionManager * @notice Interface for the VersionManager module. * @author Olivier VDB - <[email protected]> */ interface IVersionManager { /** * @notice Returns true if the feature is authorised for the wallet * @param _wallet The target wallet. * @param _feature The feature. */ function isFeatureAuthorised(address _wallet, address _feature) external view returns (bool); /** * @notice Lets a feature (caller) invoke a wallet. * @param _wallet The target wallet. * @param _to The target address for the transaction. * @param _value The value of the transaction. * @param _data The data of the transaction. */ function checkAuthorisedFeatureAndInvokeWallet( address _wallet, address _to, uint256 _value, bytes calldata _data ) external returns (bytes memory _res); /* ******* Backward Compatibility with old Storages and BaseWallet *************** */ /** * @notice Sets a new owner for the wallet. * @param _newOwner The new owner. */ function setOwner(address _wallet, address _newOwner) external; /** * @notice Lets a feature write data to a storage contract. * @param _wallet The target wallet. * @param _storage The storage contract. * @param _data The data of the call */ function invokeStorage(address _wallet, address _storage, bytes calldata _data) external; /** * @notice Upgrade a wallet to a new version. * @param _wallet the wallet to upgrade * @param _toVersion the new version */ function upgradeWallet(address _wallet, uint256 _toVersion) external; }
// Copyright (C) 2018 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.4 <0.7.0; /** * @title IWallet * @notice Interface for the BaseWallet */ interface IWallet { /** * @notice Returns the wallet owner. * @return The wallet 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 (uint); /** * @notice Sets a new owner for the wallet. * @param _newOwner The new owner. */ function setOwner(address _newOwner) external; /** * @notice Checks if a module is authorised on the wallet. * @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 for a static call redirection. * @param _sig The signature of the static call. * @return the module doing the redirection */ function enabled(bytes4 _sig) external view returns (address); /** * @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) external; /** * @notice Enables a static method by specifying the target module to which the call must be delegated. * @param _module The target module. * @param _method The static method signature. */ function enableStaticCall(address _module, bytes4 _method) external; }
// Copyright (C) 2018 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.4 <0.7.0; import "./Owned.sol"; /** * @title Managed * @notice Basic contract that defines a set of managers. Only the owner can add/remove managers. * @author Julien Niset - <[email protected]> */ contract Managed is Owned { // The managers mapping (address => bool) public managers; /** * @notice Throws if the sender is not a manager. */ modifier onlyManager { require(managers[msg.sender] == true, "M: Must be manager"); _; } event ManagerAdded(address indexed _manager); event ManagerRevoked(address indexed _manager); /** * @notice Adds a manager. * @param _manager The address of the manager. */ function addManager(address _manager) external onlyOwner { require(_manager != address(0), "M: Address must not be null"); if (managers[_manager] == false) { managers[_manager] = true; emit ManagerAdded(_manager); } } /** * @notice Revokes a manager. * @param _manager The address of the manager. */ function revokeManager(address _manager) external onlyOwner { require(managers[_manager] == true, "M: Target must be an existing manager"); delete managers[_manager]; emit ManagerRevoked(_manager); } }
// Copyright (C) 2018 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.4 <0.7.0; /** * @title Owned * @notice Basic contract to define an owner. * @author Julien Niset - <[email protected]> */ contract Owned { // The owner address public owner; event OwnerChanged(address indexed _newOwner); /** * @notice Throws if the sender is not the owner. */ modifier onlyOwner { require(msg.sender == owner, "Must be owner"); _; } constructor() public { owner = msg.sender; } /** * @notice Lets the owner transfer ownership of the contract to a new owner. * @param _newOwner The new owner. */ function changeOwner(address _newOwner) external onlyOwner { require(_newOwner != address(0), "Address must not be null"); owner = _newOwner; emit OwnerChanged(_newOwner); } }
// Copyright (C) 2018 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.6.12; /** * @title Proxy * @notice Basic proxy that delegates all calls to a fixed implementing contract. * The implementing contract cannot be upgraded. * @author Julien Niset - <[email protected]> */ contract Proxy { address implementation; event Received(uint indexed value, address indexed sender, bytes data); constructor(address _implementation) public { implementation = _implementation; } fallback() external payable { // solhint-disable-next-line no-inline-assembly assembly { let target := sload(0) calldatacopy(0, 0, calldatasize()) let result := delegatecall(gas(), target, 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, msg.data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_moduleRegistry","type":"address"},{"internalType":"address","name":"_walletImplementation","type":"address"},{"internalType":"address","name":"_guardianStorage","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_manager","type":"address"}],"name":"ManagerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_manager","type":"address"}],"name":"ManagerRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"ModuleRegistryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"guardian","type":"address"}],"name":"WalletCreated","type":"event"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"addManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_moduleRegistry","type":"address"}],"name":"changeModuleRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_versionManager","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"uint256","name":"_version","type":"uint256"}],"name":"createCounterfactualWallet","outputs":[{"internalType":"address","name":"_wallet","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_versionManager","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"uint256","name":"_version","type":"uint256"}],"name":"createWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_versionManager","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"uint256","name":"_version","type":"uint256"}],"name":"getAddressForCounterfactualWallet","outputs":[{"internalType":"address","name":"_wallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guardianStorage","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract BaseWallet","name":"_wallet","type":"address"}],"name":"init","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"managers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moduleRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"revokeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516113043803806113048339818101604052606081101561003357600080fd5b5080516020820151604090920151600080546001600160a01b031916331790559091906001600160a01b03831661009b5760405162461bcd60e51b815260040180806020018281038252602681526020018061128b6026913960400191505060405180910390fd5b6001600160a01b0382166100e05760405162461bcd60e51b815260040180806020018281038252602c8152602001806112d8602c913960400191505060405180910390fd5b6001600160a01b0381166101255760405162461bcd60e51b81526004018080602001828103825260278152602001806112b16027913960400191505060405180910390fd5b600280546001600160a01b039485166001600160a01b03199182161790915560038054938516938216939093179092556004805491909316911617905561111a806101716000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638117abc11161008c578063a6f9dae111610066578063a6f9dae11461026a578063b95459e414610290578063d89784fc14610298578063fdff9b4d146102a0576100df565b80638117abc1146102185780638b334686146102205780638da5cb5b14610262576100df565b80632d06177a116100bd5780632d06177a1461019057806330b53798146101b6578063377e32e6146101f2576100df565b806308d668bc146100e457806319ab453c1461010c5780632cfc5d0b14610132575b600080fd5b61010a600480360360208110156100fa57600080fd5b50356001600160a01b03166102da565b005b61010a6004803603602081101561012257600080fd5b50356001600160a01b03166103e5565b610174600480360360a081101561014857600080fd5b506001600160a01b038135811691602081013582169160408201351690606081013590608001356103e8565b604080516001600160a01b039092168252519081900360200190f35b61010a600480360360208110156101a657600080fd5b50356001600160a01b0316610507565b61010a600480360360808110156101cc57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610620565b61010a6004803603602081101561020857600080fd5b50356001600160a01b03166106f8565b6101746107ed565b610174600480360360a081101561023657600080fd5b506001600160a01b038135811691602081013582169160408201351690606081013590608001356107fc565b6101746108ee565b61010a6004803603602081101561028057600080fd5b50356001600160a01b03166108fd565b6101746109fc565b610174610a0b565b6102c6600480360360208110156102b657600080fd5b50356001600160a01b0316610a1a565b604080519115158252519081900360200190f35b6000546001600160a01b03163314610329576040805162461bcd60e51b815260206004820152600d60248201526c26bab9ba1031329037bbb732b960991b604482015290519081900360640190fd5b6001600160a01b038116610384576040805162461bcd60e51b815260206004820152601a60248201527f57463a20616464726573732063616e6e6f74206265206e756c6c000000000000604482015290519081900360640190fd5b600280546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f9bf4baeb20b6008af8dfd7fed5c50dce707a05623b022e5d61a00c7db7f90c729181900360200190a150565b50565b60006103f686868685610a2f565b60006104058488888887610c23565b905060606040518060200161041990610f72565b601f1982820381018352601f90910116604081905260035482516001600160a01b039091169160209081019182918501908083835b6020831061046d5780518252601f19909201916020918201910161044e565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815284830182528051908301207fff00000000000000000000000000000000000000000000000000000000000000828601523060601b6041860152605585019790975260758085019790975280518085039097018752609590930190925250835193019290922098975050505050505050565b6000546001600160a01b03163314610556576040805162461bcd60e51b815260206004820152600d60248201526c26bab9ba1031329037bbb732b960991b604482015290519081900360640190fd5b6001600160a01b0381166105b1576040805162461bcd60e51b815260206004820152601b60248201527f4d3a2041646472657373206d757374206e6f74206265206e756c6c0000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205460ff166103e5576001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a9190a250565b3360009081526001602081905260409091205460ff1615151461068a576040805162461bcd60e51b815260206004820152601260248201527f4d3a204d757374206265206d616e616765720000000000000000000000000000604482015290519081900360640190fd5b61069684848484610a2f565b6003546040516000916001600160a01b0316906106b290610f72565b6001600160a01b03909116815260405190819003602001906000f0801580156106df573d6000803e3d6000fd5b509050806106f08187878787610c80565b505050505050565b6000546001600160a01b03163314610747576040805162461bcd60e51b815260206004820152600d60248201526c26bab9ba1031329037bbb732b960991b604482015290519081900360640190fd5b6001600160a01b03811660009081526001602081905260409091205460ff161515146107a45760405162461bcd60e51b81526004018080602001828103825260258152602001806110c06025913960400191505060405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fe5def11e0516f317f9c37b8835aec29fc01db4d4b6d6fecaca339d3596a29bc19190a250565b6003546001600160a01b031681565b33600090815260016020819052604082205460ff16151514610865576040805162461bcd60e51b815260206004820152601260248201527f4d3a204d757374206265206d616e616765720000000000000000000000000000604482015290519081900360640190fd5b61087186868685610a2f565b60006108808488888887610c23565b60035460405191925060009183916001600160a01b0316906108a190610f72565b6001600160a01b0390911681526040518291819003602001906000f59050801580156108d1573d6000803e3d6000fd5b509050806108e2818a8a8a89610c80565b98975050505050505050565b6000546001600160a01b031681565b6000546001600160a01b0316331461094c576040805162461bcd60e51b815260206004820152600d60248201526c26bab9ba1031329037bbb732b960991b604482015290519081900360640190fd5b6001600160a01b0381166109a7576040805162461bcd60e51b815260206004820152601860248201527f41646472657373206d757374206e6f74206265206e756c6c0000000000000000604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825560405190917fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3691a250565b6002546001600160a01b031681565b6004546001600160a01b031681565b60016020526000908152604090205460ff1681565b6001600160a01b038416610a8a576040805162461bcd60e51b815260206004820152601860248201527f57463a206f776e65722063616e6e6f74206265206e756c6c0000000000000000604482015290519081900360640190fd5b600254604080517f0bcd4ebb0000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015291519190921691630bcd4ebb916024808301926020929190829003018186803b158015610af057600080fd5b505afa158015610b04573d6000803e3d6000fd5b505050506040513d6020811015610b1a57600080fd5b5051610b6d576040805162461bcd60e51b815260206004820152601b60248201527f57463a20696e76616c6964205f76657273696f6e4d616e616765720000000000604482015290519081900360640190fd5b6001600160a01b038216610bc8576040805162461bcd60e51b815260206004820152601b60248201527f57463a20677561726469616e2063616e6e6f74206265206e756c6c0000000000604482015290519081900360640190fd5b60008111610c1d576040805162461bcd60e51b815260206004820152601460248201527f57463a20696e76616c6964205f76657273696f6e000000000000000000000000604482015290519081900360640190fd5b50505050565b604080516020808201979097526bffffffffffffffffffffffff19606096871b81168284015294861b851660548201529290941b9092166068820152607c8082019290925282518082039092018252609c01909152805191012090565b60408051600280825260608083018452926020830190803683370190505090508381600081518110610cae57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610cdc57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050856001600160a01b0316633c5a3cea86836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610d6b578181015183820152602001610d53565b505050509050019350505050600060405180830381600087803b158015610d9157600080fd5b505af1158015610da5573d6000803e3d6000fd5b505060048054604080517fc68452100000000000000000000000000000000000000000000000000000000081526001600160a01b038c8116948201949094528884166024820152905192909116935063c6845210925060448082019260009290919082900301818387803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b50505050836001600160a01b031663e3495a3987846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b5050604080517f1f17732d00000000000000000000000000000000000000000000000000000000815230600482015260006024820181905291516001600160a01b038b169450631f17732d93506044808301939282900301818387803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50505050826001600160a01b0316856001600160a01b0316876001600160a01b03167fca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf560405160405180910390a4505050505050565b61014080610f808339019056fe608060405234801561001057600080fd5b506040516101403803806101408339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b031990921691909117905560dc806100646000396000f3fe6080604052366083573373ffffffffffffffffffffffffffffffffffffffff16347f606834f57405380c4fb88d1f4850326ad3885f014bab3b568dfbf7a041eef73860003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a3005b600080543682833781823684845af490503d82833e80801560a2573d83f35b3d83fdfea264697066735822122081653946f6f0f024eb94b19bdaf1d69dc04d346dcb6092fa1369c9e2dacfa42164736f6c634300060c00334d3a20546172676574206d75737420626520616e206578697374696e67206d616e61676572a26469706673582212203e6230ba2430e25bbb7062a66cec02cd0bf3330e16f132008055dee6ded6c82f64736f6c634300060c003357463a204d6f64756c6552656769737472792061646472657373206e6f7420646566696e656457463a20477561726469616e53746f726167652061646472657373206e6f7420646566696e656457463a2057616c6c6574496d706c656d656e746174696f6e2061646472657373206e6f7420646566696e6564000000000000000000000000c17d432bd8e8850fd7b32b0270f5afac65db010500000000000000000000000029b94b045a0b828d9eb99136a16d97c7ff3d260000000000000000000000000044da3a8051ba88eab0440db3779cab9d679ae76f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100df5760003560e01c80638117abc11161008c578063a6f9dae111610066578063a6f9dae11461026a578063b95459e414610290578063d89784fc14610298578063fdff9b4d146102a0576100df565b80638117abc1146102185780638b334686146102205780638da5cb5b14610262576100df565b80632d06177a116100bd5780632d06177a1461019057806330b53798146101b6578063377e32e6146101f2576100df565b806308d668bc146100e457806319ab453c1461010c5780632cfc5d0b14610132575b600080fd5b61010a600480360360208110156100fa57600080fd5b50356001600160a01b03166102da565b005b61010a6004803603602081101561012257600080fd5b50356001600160a01b03166103e5565b610174600480360360a081101561014857600080fd5b506001600160a01b038135811691602081013582169160408201351690606081013590608001356103e8565b604080516001600160a01b039092168252519081900360200190f35b61010a600480360360208110156101a657600080fd5b50356001600160a01b0316610507565b61010a600480360360808110156101cc57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610620565b61010a6004803603602081101561020857600080fd5b50356001600160a01b03166106f8565b6101746107ed565b610174600480360360a081101561023657600080fd5b506001600160a01b038135811691602081013582169160408201351690606081013590608001356107fc565b6101746108ee565b61010a6004803603602081101561028057600080fd5b50356001600160a01b03166108fd565b6101746109fc565b610174610a0b565b6102c6600480360360208110156102b657600080fd5b50356001600160a01b0316610a1a565b604080519115158252519081900360200190f35b6000546001600160a01b03163314610329576040805162461bcd60e51b815260206004820152600d60248201526c26bab9ba1031329037bbb732b960991b604482015290519081900360640190fd5b6001600160a01b038116610384576040805162461bcd60e51b815260206004820152601a60248201527f57463a20616464726573732063616e6e6f74206265206e756c6c000000000000604482015290519081900360640190fd5b600280546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f9bf4baeb20b6008af8dfd7fed5c50dce707a05623b022e5d61a00c7db7f90c729181900360200190a150565b50565b60006103f686868685610a2f565b60006104058488888887610c23565b905060606040518060200161041990610f72565b601f1982820381018352601f90910116604081905260035482516001600160a01b039091169160209081019182918501908083835b6020831061046d5780518252601f19909201916020918201910161044e565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815284830182528051908301207fff00000000000000000000000000000000000000000000000000000000000000828601523060601b6041860152605585019790975260758085019790975280518085039097018752609590930190925250835193019290922098975050505050505050565b6000546001600160a01b03163314610556576040805162461bcd60e51b815260206004820152600d60248201526c26bab9ba1031329037bbb732b960991b604482015290519081900360640190fd5b6001600160a01b0381166105b1576040805162461bcd60e51b815260206004820152601b60248201527f4d3a2041646472657373206d757374206e6f74206265206e756c6c0000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205460ff166103e5576001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a9190a250565b3360009081526001602081905260409091205460ff1615151461068a576040805162461bcd60e51b815260206004820152601260248201527f4d3a204d757374206265206d616e616765720000000000000000000000000000604482015290519081900360640190fd5b61069684848484610a2f565b6003546040516000916001600160a01b0316906106b290610f72565b6001600160a01b03909116815260405190819003602001906000f0801580156106df573d6000803e3d6000fd5b509050806106f08187878787610c80565b505050505050565b6000546001600160a01b03163314610747576040805162461bcd60e51b815260206004820152600d60248201526c26bab9ba1031329037bbb732b960991b604482015290519081900360640190fd5b6001600160a01b03811660009081526001602081905260409091205460ff161515146107a45760405162461bcd60e51b81526004018080602001828103825260258152602001806110c06025913960400191505060405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fe5def11e0516f317f9c37b8835aec29fc01db4d4b6d6fecaca339d3596a29bc19190a250565b6003546001600160a01b031681565b33600090815260016020819052604082205460ff16151514610865576040805162461bcd60e51b815260206004820152601260248201527f4d3a204d757374206265206d616e616765720000000000000000000000000000604482015290519081900360640190fd5b61087186868685610a2f565b60006108808488888887610c23565b60035460405191925060009183916001600160a01b0316906108a190610f72565b6001600160a01b0390911681526040518291819003602001906000f59050801580156108d1573d6000803e3d6000fd5b509050806108e2818a8a8a89610c80565b98975050505050505050565b6000546001600160a01b031681565b6000546001600160a01b0316331461094c576040805162461bcd60e51b815260206004820152600d60248201526c26bab9ba1031329037bbb732b960991b604482015290519081900360640190fd5b6001600160a01b0381166109a7576040805162461bcd60e51b815260206004820152601860248201527f41646472657373206d757374206e6f74206265206e756c6c0000000000000000604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825560405190917fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3691a250565b6002546001600160a01b031681565b6004546001600160a01b031681565b60016020526000908152604090205460ff1681565b6001600160a01b038416610a8a576040805162461bcd60e51b815260206004820152601860248201527f57463a206f776e65722063616e6e6f74206265206e756c6c0000000000000000604482015290519081900360640190fd5b600254604080517f0bcd4ebb0000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015291519190921691630bcd4ebb916024808301926020929190829003018186803b158015610af057600080fd5b505afa158015610b04573d6000803e3d6000fd5b505050506040513d6020811015610b1a57600080fd5b5051610b6d576040805162461bcd60e51b815260206004820152601b60248201527f57463a20696e76616c6964205f76657273696f6e4d616e616765720000000000604482015290519081900360640190fd5b6001600160a01b038216610bc8576040805162461bcd60e51b815260206004820152601b60248201527f57463a20677561726469616e2063616e6e6f74206265206e756c6c0000000000604482015290519081900360640190fd5b60008111610c1d576040805162461bcd60e51b815260206004820152601460248201527f57463a20696e76616c6964205f76657273696f6e000000000000000000000000604482015290519081900360640190fd5b50505050565b604080516020808201979097526bffffffffffffffffffffffff19606096871b81168284015294861b851660548201529290941b9092166068820152607c8082019290925282518082039092018252609c01909152805191012090565b60408051600280825260608083018452926020830190803683370190505090508381600081518110610cae57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610cdc57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050856001600160a01b0316633c5a3cea86836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610d6b578181015183820152602001610d53565b505050509050019350505050600060405180830381600087803b158015610d9157600080fd5b505af1158015610da5573d6000803e3d6000fd5b505060048054604080517fc68452100000000000000000000000000000000000000000000000000000000081526001600160a01b038c8116948201949094528884166024820152905192909116935063c6845210925060448082019260009290919082900301818387803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b50505050836001600160a01b031663e3495a3987846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b5050604080517f1f17732d00000000000000000000000000000000000000000000000000000000815230600482015260006024820181905291516001600160a01b038b169450631f17732d93506044808301939282900301818387803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50505050826001600160a01b0316856001600160a01b0316876001600160a01b03167fca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf560405160405180910390a4505050505050565b61014080610f808339019056fe608060405234801561001057600080fd5b506040516101403803806101408339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b031990921691909117905560dc806100646000396000f3fe6080604052366083573373ffffffffffffffffffffffffffffffffffffffff16347f606834f57405380c4fb88d1f4850326ad3885f014bab3b568dfbf7a041eef73860003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a3005b600080543682833781823684845af490503d82833e80801560a2573d83f35b3d83fdfea264697066735822122081653946f6f0f024eb94b19bdaf1d69dc04d346dcb6092fa1369c9e2dacfa42164736f6c634300060c00334d3a20546172676574206d75737420626520616e206578697374696e67206d616e61676572a26469706673582212203e6230ba2430e25bbb7062a66cec02cd0bf3330e16f132008055dee6ded6c82f64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c17d432bd8e8850fd7b32b0270f5afac65db010500000000000000000000000029b94b045a0b828d9eb99136a16d97c7ff3d260000000000000000000000000044da3a8051ba88eab0440db3779cab9d679ae76f
-----Decoded View---------------
Arg [0] : _moduleRegistry (address): 0xc17D432Bd8e8850Fd7b32B0270f5AfAc65DB0105
Arg [1] : _walletImplementation (address): 0x29b94b045a0b828d9eb99136A16d97c7fF3d2600
Arg [2] : _guardianStorage (address): 0x44DA3A8051bA88EAB0440DB3779cAB9D679ae76f
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c17d432bd8e8850fd7b32b0270f5afac65db0105
Arg [1] : 00000000000000000000000029b94b045a0b828d9eb99136a16d97c7ff3d2600
Arg [2] : 00000000000000000000000044da3a8051ba88eab0440db3779cab9d679ae76f
Deployed Bytecode Sourcemap
1122:7890:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5724:254;;;;;;;;;;;;;;;;-1:-1:-1;5724:254:10;-1:-1:-1;;;;;5724:254:10;;:::i;:::-;;6156:76;;;;;;;;;;;;;;;;-1:-1:-1;6156:76:10;-1:-1:-1;;;;;6156:76:10;;:::i;4869:676::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4869:676:10;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;4869:676:10;;;;;;;;;;;;;;1455:269:7;;;;;;;;;;;;;;;;-1:-1:-1;1455:269:7;-1:-1:-1;;;;;1455:269:7;;:::i;2796:451:10:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2796:451:10;;;;;;;;;;;;;;;;;;;;;;:::i;1828:227:7:-;;;;;;;;;;;;;;;;-1:-1:-1;1828:227:7;-1:-1:-1;;;;;1828:227:7;;:::i;1301:35:10:-;;;:::i;3761:648::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3761:648:10;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;934:20:8:-;;;:::i;1379:201::-;;;;;;;;;;;;;;;;-1:-1:-1;1379:201:8;-1:-1:-1;;;;;1379:201:8;;:::i;1213:29:10:-;;;:::i;1384:30::-;;;:::i;1025:41:7:-;;;;;;;;;;;;;;;;-1:-1:-1;1025:41:7;-1:-1:-1;;;;;1025:41:7;;:::i;:::-;;;;;;;;;;;;;;;;;;5724:254:10;1134:5:8;;-1:-1:-1;;;;;1134:5:8;1120:10;:19;1112:45;;;;;-1:-1:-1;;;1112:45:8;;;;;;;;;;;;-1:-1:-1;;;1112:45:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;5816:29:10;::::1;5808:68;;;::::0;;-1:-1:-1;;;5808:68:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;5886:14;:32:::0;;-1:-1:-1;;;;;5886:32:10;::::1;-1:-1:-1::0;;5886:32:10;;::::1;::::0;::::1;::::0;;;5933:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;5724:254:::0;:::o;6156:76::-;;:::o;4869:676::-;5098:15;5129:60;5144:6;5152:15;5169:9;5180:8;5129:14;:60::i;:::-;5199:15;5217:60;5225:5;5232:6;5240:15;5257:9;5268:8;5217:7;:60::i;:::-;5199:78;;5287:17;5324:24;;;;;;;;:::i;:::-;-1:-1:-1;;5324:24:10;;;;;;;;;;;;;;;;5358:20;;5307:73;;-1:-1:-1;;;;;5358:20:10;;;;5324:24;5307:73;;;;;;5324:24;;;5307:73;;5324:24;5307:73;;;;;;;;;;-1:-1:-1;;5307:73:10;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5307:73:10;;;;;;;;;;;;;;;;-1:-1:-1;5307:73:10;;;;;;;;;;;;;5470:15;;;;;;5432:12;5415:71;;;;5454:4;5415:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5405:82:10;;;;;;;;;;-1:-1:-1;;;;;;;;4869:676:10:o;1455:269:7:-;1134:5:8;;-1:-1:-1;;;;;1134:5:8;1120:10;:19;1112:45;;;;;-1:-1:-1;;;1112:45:8;;;;;;;;;;;;-1:-1:-1;;;1112:45:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;1530:22:7;::::1;1522:62;;;::::0;;-1:-1:-1;;;1522:62:7;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;1598:18:7;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;1594:124;;-1:-1:-1::0;;;;;1641:18:7;::::1;;::::0;;;1662:4:::1;1641:18;::::0;;;;;;;:25;;-1:-1:-1;;1641:25:7::1;::::0;;::::1;::::0;;;1685:22;::::1;::::0;1641:18;1685:22:::1;1455:269:::0;:::o;2796:451:10:-;1191:10:7;1182:20;;;;:8;:20;;;;;;;;;;;:28;;;1174:59;;;;;-1:-1:-1;;;1174:59:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;2985:60:10::1;3000:6;3008:15;3025:9;3036:8;2985:14;:60::i;:::-;3079:20;::::0;3069:31:::1;::::0;3055:11:::1;::::0;-1:-1:-1;;;;;3079:20:10::1;::::0;3069:31:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;3069:31:10;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;::::1;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;3055:45:10;-1:-1:-1;3055:45:10;3159:81:::1;3055:45:::0;3195:6;3203:15;3220:9;3231:8;3159:15:::1;:81::i;:::-;1243:1:7;;2796:451:10::0;;;;:::o;1828:227:7:-;1134:5:8;;-1:-1:-1;;;;;1134:5:8;1120:10;:19;1112:45;;;;;-1:-1:-1;;;1112:45:8;;;;;;;;;;;;-1:-1:-1;;;1112:45:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;1906:18:7;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;;;::::1;;:26;;;1898:76;;;;-1:-1:-1::0;;;1898:76:7::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;1991:18:7;::::1;;::::0;;;:8:::1;:18;::::0;;;;;1984:25;;-1:-1:-1;;1984:25:7::1;::::0;;2024:24;::::1;::::0;1991:18;2024:24:::1;1828:227:::0;:::o;1301:35:10:-;;;-1:-1:-1;;;;;1301:35:10;;:::o;3761:648::-;1191:10:7;3990:15:10;1182:20:7;;;:8;:20;;;;;;;;;;:28;;;1174:59;;;;;-1:-1:-1;;;1174:59:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;4021:60:10::1;4036:6;4044:15;4061:9;4072:8;4021:14;:60::i;:::-;4091:15;4109:60;4117:5;4124:6;4132:15;4149:9;4160:8;4109:7;:60::i;:::-;4218:20;::::0;4193:46:::1;::::0;4091:78;;-1:-1:-1;4179:11:10::1;::::0;4091:78;;-1:-1:-1;;;;;4218:20:10::1;::::0;4193:46:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;4193:46:10;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;4179:60:10;-1:-1:-1;4179:60:10;4298:81:::1;4179:60:::0;4334:6;4342:15;4359:9;4370:8;4298:15:::1;:81::i;:::-;4396:6:::0;3761:648;-1:-1:-1;;;;;;;;3761:648:10:o;934:20:8:-;;;-1:-1:-1;;;;;934:20:8;;:::o;1379:201::-;1134:5;;-1:-1:-1;;;;;1134:5:8;1120:10;:19;1112:45;;;;;-1:-1:-1;;;1112:45:8;;;;;;;;;;;;-1:-1:-1;;;1112:45:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;1456:23:8;::::1;1448:60;;;::::0;;-1:-1:-1;;;1448:60:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1518:5;:17:::0;;-1:-1:-1;;1518:17:8::1;-1:-1:-1::0;;;;;1518:17:8;::::1;::::0;;::::1;::::0;;1550:23:::1;::::0;1518:17;;1550:23:::1;::::0;::::1;1379:201:::0;:::o;1213:29:10:-;;;-1:-1:-1;;;;;1213:29:10;;:::o;1384:30::-;;;-1:-1:-1;;;;;1384:30:10;;:::o;1025:41:7:-;;;;;;;;;;;;;;;:::o;8573:437:10:-;-1:-1:-1;;;;;8707:20:10;;8699:57;;;;;-1:-1:-1;;;8699:57:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;8790:14;;8774:67;;;;;;-1:-1:-1;;;;;8774:67:10;;;;;;;;;8790:14;;;;;8774:50;;:67;;;;;;;;;;;;;;8790:14;8774:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8774:67:10;8766:107;;;;;-1:-1:-1;;;8766:107:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8891:25:10;;8883:65;;;;;-1:-1:-1;;;8883:65:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;8977:1;8966:8;:12;8958:45;;;;;-1:-1:-1;;;8958:45:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;8573:437;;;;:::o;8025:246::-;8194:69;;;;;;;;;;;-1:-1:-1;;8194:69:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8184:80;;;;;;8025:246::o;6647:1005::-;6992:16;;;7006:1;6992:16;;;6957:32;6992:16;;;;;6957:32;6992:16;;;;;;;;;;-1:-1:-1;6992:16:10;6957:51;;7039:15;7018;7034:1;7018:18;;;;;;;;;;;;;:36;-1:-1:-1;;;;;7018:36:10;;;-1:-1:-1;;;;;7018:36:10;;;;;7093:4;7064:15;7080:1;7064:18;;;;;;;;;;;;;:34;-1:-1:-1;;;;;7064:34:10;;;-1:-1:-1;;;;;7064:34:10;;;;;7182:7;-1:-1:-1;;;;;7182:12:10;;7195:6;7203:15;7182:37;;;;;;;;;;;;;-1:-1:-1;;;;;7182:37:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7271:15:10;;;7254:74;;;;;;-1:-1:-1;;;;;7254:74:10;;;;;;;;;;;;;;;;;;;7271:15;;;;;-1:-1:-1;7254:45:10;;-1:-1:-1;7254:74:10;;;;;7271:15;;7254:74;;;;;;;;7271:15;;7254:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7385:15;-1:-1:-1;;;;;7369:46:10;;7424:7;7434:8;7369:74;;;;;;;;;;;;;-1:-1:-1;;;;;7369:74:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7512:45:10;;;;;;7544:4;7512:45;;;;7551:5;7512:45;;;;;;;;-1:-1:-1;;;;;7512:23:10;;;-1:-1:-1;7512:23:10;;-1:-1:-1;7512:45:10;;;;;7551:5;7512:45;;;;;7551:5;7512:23;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7635:9;-1:-1:-1;;;;;7595:50:10;7627:6;-1:-1:-1;;;;;7595:50:10;7617:7;-1:-1:-1;;;;;7595:50:10;;;;;;;;;;;6647:1005;;;;;;:::o;-1:-1:-1:-;;;;;;;;:::o
Swarm Source
ipfs://3e6230ba2430e25bbb7062a66cec02cd0bf3330e16f132008055dee6ded6c82f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.