Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 210 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deploy Vault | 19425658 | 299 days ago | IN | 0 ETH | 0.01860848 | ||||
Deploy Vault | 19418345 | 300 days ago | IN | 0 ETH | 0.01504795 | ||||
Deploy Vault | 19418268 | 300 days ago | IN | 0 ETH | 0.01366494 | ||||
Deploy Vault | 19418224 | 300 days ago | IN | 0 ETH | 0.01367428 | ||||
Deploy Vault | 19417811 | 300 days ago | IN | 0 ETH | 0.01668456 | ||||
Deploy Vault | 19417324 | 300 days ago | IN | 0 ETH | 0.01569934 | ||||
Deploy Vault | 19417219 | 300 days ago | IN | 0 ETH | 0.0151303 | ||||
Deploy Vault | 19416778 | 300 days ago | IN | 0 ETH | 0.01327323 | ||||
Deploy Vault | 19416680 | 300 days ago | IN | 0 ETH | 0.01285184 | ||||
Deploy Vault | 19416551 | 300 days ago | IN | 0 ETH | 0.01552726 | ||||
Deploy Vault | 19412131 | 300 days ago | IN | 0 ETH | 0.02483088 | ||||
Deploy Vault | 19411864 | 301 days ago | IN | 0 ETH | 0.02049844 | ||||
Deploy Vault | 19410472 | 301 days ago | IN | 0 ETH | 0.01797759 | ||||
Deploy Vault | 19410364 | 301 days ago | IN | 0 ETH | 0.01403526 | ||||
Deploy Vault | 19410312 | 301 days ago | IN | 0 ETH | 0.01422438 | ||||
Deploy Vault | 19410268 | 301 days ago | IN | 0 ETH | 0.01188012 | ||||
Deploy Vault | 19390160 | 304 days ago | IN | 0 ETH | 0.01249415 | ||||
Deploy Vault | 19390079 | 304 days ago | IN | 0 ETH | 0.01301407 | ||||
Deploy Vault | 19389048 | 304 days ago | IN | 0 ETH | 0.01323323 | ||||
Deploy Vault | 19383988 | 304 days ago | IN | 0 ETH | 0.02726663 | ||||
Deploy Vault | 19382350 | 305 days ago | IN | 0 ETH | 0.01380814 | ||||
Deploy Vault | 19381118 | 305 days ago | IN | 0 ETH | 0.01620447 | ||||
Deploy Vault | 19381012 | 305 days ago | IN | 0 ETH | 0.01834037 | ||||
Deploy Vault | 19380935 | 305 days ago | IN | 0 ETH | 0.02096305 | ||||
Deploy Vault | 19375715 | 306 days ago | IN | 0 ETH | 0.0179163 |
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:
Factory
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 100 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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; } }
// 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); } }
// 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 {} }
// 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; } }
// 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); }
// 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, ""); } }
// 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); }
// 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; } }
{ "optimizer": { "enabled": true, "runs": 100 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.