Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
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:
VaultFactory2
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; contract Vault2 is IERC721Receiver { struct Transaction { address to; bytes data; uint256 timestamp; bool executed; uint256 confirmations; uint256 amount; } struct TokenLimit { uint256 fixedLimit; // if set, takes precedence over percentageLimit uint256 percentageLimit; // if fixedLimit is 0, use this limit as percentage of total balance uint256 useBaseLimit; // 0: no limit, 1: use base daily limit, 2: limit = 0 (disallow withdrawals) } address public owner; string public name; address public recoveryAddress; address[] public whitelistedAddresses; uint256 public dailyLimit; // in percentage uint256 public threshold; // number of required signers uint256 public delay; // in seconds address[] public assets; mapping(address => bool) public isWhitelisted; mapping(address => uint256) public dailyWithdrawnAmount; // token => withdrawn amount mapping(address => uint256) public lastWithdrawTimestamp; // token => timestamp mapping(address => TokenLimit) public tokenLimits; Transaction[] public queuedTransactions; uint public queuedTxs; uint public freeze; uint public version; mapping(uint256 => mapping(address => bool)) public confirmed; event TokenDeposited( address token, uint256 amount, address indexed depositor ); event NFTDeposited(address nft, uint256 tokenId, address indexed depositor); event TokenWithdrawn(address token, uint256 amount); event TransactionQueued( uint256 txIndex, address to, bytes data, uint256 amount ); event TransactionExecuted(uint256 txIndex, address to, bytes data); event TransactionConfirmed(uint256 txIndex, address confirmer); modifier onlyOwner() { require(msg.sender == owner, "Not the owner"); _; } modifier onlyWhitelisted() { require(isWhitelisted[msg.sender], "Not a whitelisted address"); _; } modifier onlyRecoveryAddress() { require(msg.sender == recoveryAddress, "Not the recovery address"); _; } function init( address _owner, string memory _name, address _recoveryAddress, address[] memory _whitelistedAddresses, uint256 _dailyLimit, uint256 _threshold, uint256 _delay )public { require(owner == address(0), "Already initialized"); owner = _owner; name = _name; recoveryAddress = _recoveryAddress; dailyLimit = _dailyLimit; threshold = _threshold; delay = _delay; version=1; for (uint256 i = 0; i < _whitelistedAddresses.length; i++) { isWhitelisted[_whitelistedAddresses[i]] = true; } whitelistedAddresses = _whitelistedAddresses; } function depositToken(address token, uint256 amount) public payable { if (token == address(0)) { require(msg.value == amount, "Incorrect ETH amount"); } else { require( IERC20(token).transferFrom(msg.sender, address(this), amount), "Transfer failed" ); } emit TokenDeposited(token, amount, msg.sender); } function depositNFT(address nft, uint256 tokenId) public { IERC721(nft).safeTransferFrom(msg.sender, address(this), tokenId); emit NFTDeposited(nft, tokenId, msg.sender); } function withdrawToken( address to, address token, uint256 amount ) public onlyOwner { uint256 balance = token == address(0) ? address(this).balance : IERC20(token).balanceOf(address(this)); require(balance >= amount, "Insufficient balance"); require(freeze == 0, "Freeze is active"); uint256 limitAmount = getLimitAmount(token); uint256 timeSinceLastWithdrawal = block.timestamp - lastWithdrawTimestamp[token]; if (timeSinceLastWithdrawal >= 1 days) { dailyWithdrawnAmount[token] = 0; } uint256 remainingLimit = limitAmount + (timeSinceLastWithdrawal * limitAmount) / 1 days > dailyWithdrawnAmount[token] ? limitAmount + (timeSinceLastWithdrawal * limitAmount) / 1 days - dailyWithdrawnAmount[token] : 0; if (remainingLimit > limitAmount) { remainingLimit = limitAmount; } if (amount > remainingLimit) { queueWithdrawal(token, to, amount); } else { dailyWithdrawnAmount[token] = limitAmount - remainingLimit+amount; // dailyWithdrawnAmount[token] += amount; lastWithdrawTimestamp[token] = block.timestamp; executeWithdrawal(to, token, amount); } } function getLimit( address to, address token, uint256 amount ) public view returns (uint) { uint256 balance = token == address(0) ? address(this).balance : IERC20(token).balanceOf(address(this)); require(balance >= amount, "Insufficient balance"); uint256 limitAmount = getLimitAmount(token); uint256 timeSinceLastWithdrawal = block.timestamp - lastWithdrawTimestamp[token]; uint dailyWithdrawn = dailyWithdrawnAmount[token]; if (timeSinceLastWithdrawal >= 1 days) { dailyWithdrawn = 0; } uint256 remainingLimit = limitAmount + (timeSinceLastWithdrawal * limitAmount) / 1 days > dailyWithdrawnAmount[token] ? limitAmount + (timeSinceLastWithdrawal * limitAmount) / 1 days - dailyWithdrawnAmount[token] : 0; if (remainingLimit > limitAmount) { remainingLimit = limitAmount; } if (amount <= remainingLimit) { return amount != 0 ? amount : remainingLimit; } else { return 0; } } function queueWithdrawal( address token, address to, uint256 amount ) internal { bytes memory data; if (token == address(0)) { data = ""; queueTransaction(to, data, amount); } else { data = abi.encodeWithSignature( "transfer(address,uint256)", to, amount ); queueTransaction(token, data, 0); } } function queueTransaction( address to, bytes memory data, uint256 amount ) public onlyOwner { require(freeze == 0, "Freeze is active"); Transaction storage newTransaction = queuedTransactions.push(); newTransaction.to = to; newTransaction.data = data; newTransaction.timestamp = block.timestamp; newTransaction.executed = false; newTransaction.amount = amount; queuedTxs += 1; emit TransactionQueued(queuedTransactions.length - 1, to, data, amount); } function confirmTransaction(uint256 txIndex) public { require( msg.sender == owner || isWhitelisted[msg.sender], "Not authorized" ); require(freeze <= 1, "Freeze is active"); Transaction storage transaction = queuedTransactions[txIndex]; require(transaction.timestamp != 0, "Transaction not found"); require(!transaction.executed, "Transaction already executed"); if ( isWhitelisted[msg.sender] && !(msg.sender == owner && transaction.timestamp + delay <= block.timestamp) ) { require( !confirmed[txIndex][msg.sender], "Transaction already confirmed by this address" ); transaction.confirmations += 1; confirmed[txIndex][msg.sender] = true; } if ( msg.sender == owner && transaction.timestamp + delay <= block.timestamp ) { transaction.confirmations = threshold; } emit TransactionConfirmed(txIndex, msg.sender); if (transaction.confirmations >= threshold) { executeTransaction(txIndex); } } function cancelTransaction(uint256 txIndex) public { require( msg.sender == owner || msg.sender == recoveryAddress, "Not authorized" ); Transaction storage transaction = queuedTransactions[txIndex]; require(transaction.timestamp != 0, "Transaction not found"); require(!transaction.executed, "Transaction already executed"); transaction.executed = true; transaction.confirmations=404; } function executeTransaction(uint256 txIndex) internal { Transaction storage transaction = queuedTransactions[txIndex]; require( transaction.confirmations >= threshold, "Not enough confirmations" ); require(!transaction.executed, "Transaction already executed"); transaction.executed = true; (bool success, ) = transaction.to.call{value: transaction.amount}( transaction.data ); require(success, "Transaction execution failed"); emit TransactionExecuted(txIndex, transaction.to, transaction.data); } function executeWithdrawal( address to, address token, uint256 amount ) internal { if (token == address(0)) { (bool success, ) = to.call{value: amount}(""); require(success, "Transfer failed"); } else { require(IERC20(token).transfer(to, amount), "Transfer failed"); } emit TokenWithdrawn(token, amount); // Queue and execute a placeholder transaction Transaction storage newTransaction = queuedTransactions.push(); newTransaction.to = token != address(0) ? token : to; newTransaction.data = abi.encodeWithSignature( "transfer(address,uint256)", to, amount ); newTransaction.timestamp = block.timestamp; newTransaction.executed = true; newTransaction.amount = amount; queuedTxs += 1; emit TransactionQueued(queuedTransactions.length - 1, to, "", 0); emit TransactionExecuted(queuedTransactions.length - 1, to, ""); } function getLimitAmount(address token) public view returns (uint256) { uint256 balance = token == address(0) ? address(this).balance : IERC20(token).balanceOf(address(this)); TokenLimit storage limit = tokenLimits[token]; if (limit.fixedLimit > 0) { return limit.fixedLimit; } else if (limit.percentageLimit > 0) { return (balance * limit.percentageLimit) / 100; } else if (limit.useBaseLimit == 1) { return 0; // disallow withdrawals } else if (limit.useBaseLimit == 2) { return uint256(1000000000000000000000000000000); } else { return (balance * dailyLimit) / 100; } } function updateRecoveryAddress(address newRecoveryAddress) external { require( msg.sender == address(this), "Can only be called by contract itself" ); recoveryAddress = newRecoveryAddress; } function updateWhitelistAddresses( address[] memory newWhitelistedAddresses ) external { require( msg.sender == address(this), "Can only be called by contract itself" ); for (uint256 i = 0; i < whitelistedAddresses.length; i++) { isWhitelisted[whitelistedAddresses[i]] = false; } for (uint256 i = 0; i < newWhitelistedAddresses.length; i++) { isWhitelisted[newWhitelistedAddresses[i]] = true; } whitelistedAddresses = newWhitelistedAddresses; } function updateDailyLimit(uint256 newDailyLimit) external { require( msg.sender == address(this), "Can only be called by contract itself" ); dailyLimit = newDailyLimit; } function updateThreshold(uint256 newThreshold) external { require( msg.sender == address(this), "Can only be called by contract itself" ); threshold = newThreshold; } function updateDelay(uint256 newDelay) external { require( msg.sender == address(this), "Can only be called by contract itself" ); delay = newDelay; } function setTokenLimit( address token, uint256 fixedLimit, uint256 percentageLimit, uint256 useBaseLimit ) external { require( msg.sender == address(this), "Can only be called by contract itself" ); require(useBaseLimit <= 2, "Invalid useBaseLimit value"); tokenLimits[token] = TokenLimit({ fixedLimit: fixedLimit, percentageLimit: percentageLimit, useBaseLimit: useBaseLimit }); } function freezeLock(uint freezeL) external { require( msg.sender == address(this) || msg.sender == owner || msg.sender == recoveryAddress || isWhitelisted[msg.sender], "Can only be called by contract itself, owner, recovery address or whitelisted addresses" ); if (msg.sender != recoveryAddress) { require(freezeL >= freeze, "Cannot unfreeze"); } freeze = freezeL; } receive() external payable { // Accept ETH deposits } function recover( address token, address to, uint256 amount, bytes memory data, uint freezeL ) external onlyRecoveryAddress { if (token == address(0)) { require(address(this).balance >= amount, "Insufficient balance"); (bool success, ) = to.call{value: amount}(data); require(success, "Transfer failed"); } else { require( IERC20(token).balanceOf(address(this)) >= amount, "Insufficient balance" ); require(IERC20(token).transfer(to, amount), "Transfer failed"); } emit TokenWithdrawn(token, amount); freeze = freezeL; } function updateSettings( address newRecoveryAddress, address[] memory newWhitelistedAddresses, uint256 newDailyLimit, uint256 newThreshold, uint256 newDelay, address[] memory tokens, uint256[] memory fixedLimits, uint256[] memory percentageLimits, uint256[] memory useBaseLimits ) external { require( msg.sender == address(this) || msg.sender == recoveryAddress, "Not authorized" ); if (newRecoveryAddress != address(0)) { recoveryAddress = newRecoveryAddress; } if (newWhitelistedAddresses.length > 0) { for (uint256 i = 0; i < whitelistedAddresses.length; i++) { isWhitelisted[whitelistedAddresses[i]] = false; } for (uint256 i = 0; i < newWhitelistedAddresses.length; i++) { isWhitelisted[newWhitelistedAddresses[i]] = true; } whitelistedAddresses = newWhitelistedAddresses; } if (newDailyLimit != 0) { dailyLimit = newDailyLimit; } if (newThreshold != 0) { threshold = newThreshold; } if (newDelay != 0) { delay = newDelay; } if (tokens.length > 0) { require( tokens.length == fixedLimits.length && tokens.length == percentageLimits.length && tokens.length == useBaseLimits.length, "Input arrays length mismatch" ); for (uint256 i = 0; i < tokens.length; i++) { require(useBaseLimits[i] <= 2, "Invalid useBaseLimit value"); tokenLimits[tokens[i]] = TokenLimit({ fixedLimit: fixedLimits[i], percentageLimit: percentageLimits[i], useBaseLimit: useBaseLimits[i] }); } } } function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes memory _data ) external override returns (bytes4) { return this.onERC721Received.selector; } } contract SimpleProxy { /// @notice The address of the implementation contract address public immutable implementation; /// @notice Constructor to set the implementation address /// @param _implementation The address of the implementation contract constructor(address _implementation) { require( _implementation != address(0), "Invalid implementation address" ); implementation = _implementation; } /// @notice Internal function to delegate calls to the implementation contract /// @dev Uses inline assembly to perform the delegatecall /// @param impl The address of the implementation contract function _delegate(address impl) internal virtual { assembly { calldatacopy(0, 0, calldatasize()) let result := delegatecall(gas(), impl, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } /// @notice Fallback function to delegate all calls to the implementation contract /// @dev This function will catch any call to the contract and forward it to the implementation fallback() external payable virtual { _delegate(implementation); } /// @notice Receive function to handle plain Ether transfers /// @dev This function will catch any plain Ether transfers and forward them to the implementation receive() external payable virtual { _delegate(implementation); } } contract VaultFactory2 { address public owner; uint256 public totalVaults; address public vaultImplementation; mapping(string => address) public vaultNames; mapping(address => address[]) public ownerToVaults; event VaultCreated( address vaultAddress, address indexed owner, string name, address recoveryAddress ); modifier onlyOwner() { require(msg.sender == owner, "Not the owner"); _; } constructor(address _vaultImplementation) { owner = 0x9D31e30003f253563Ff108BC60B16Fdf2c93abb5;//msg.sender; vaultImplementation = _vaultImplementation; } function createVault( string memory _name, address _recoveryAddress, address[] memory _whitelistedAddresses, uint256 _dailyLimit, uint256 _threshold, uint256 _delay ) public returns (address) { require(vaultNames[_name] == address(0), "Vault name already exists"); bytes32 salt = keccak256( abi.encodePacked(msg.sender, ownerToVaults[msg.sender].length) ); SimpleProxy proxyc = new SimpleProxy{salt: salt}(vaultImplementation); address proxy = address(proxyc); Vault2(payable(proxy)).init( msg.sender, _name, _recoveryAddress, _whitelistedAddresses, _dailyLimit, _threshold, _delay ); vaultNames[_name] = proxy; ownerToVaults[msg.sender].push(proxy); totalVaults += 1; emit VaultCreated(proxy, msg.sender, _name, _recoveryAddress); return proxy; } function updateVaultImplementation(address _vaultImplementation) public onlyOwner { vaultImplementation = _vaultImplementation; } function getVaultsByOwner( address _owner ) public view returns (address[] memory) { return ownerToVaults[_owner]; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_vaultImplementation","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"vaultAddress","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"address","name":"recoveryAddress","type":"address"}],"name":"VaultCreated","type":"event"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"address","name":"_recoveryAddress","type":"address"},{"internalType":"address[]","name":"_whitelistedAddresses","type":"address[]"},{"internalType":"uint256","name":"_dailyLimit","type":"uint256"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_delay","type":"uint256"}],"name":"createVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getVaultsByOwner","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerToVaults","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVaults","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultImplementation","type":"address"}],"name":"updateVaultImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"vaultNames","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801562000010575f80fd5b506040516200164838038062001648833981810160405281019062000036919062000135565b739d31e30003f253563ff108bc60b16fdf2c93abb55f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000165565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620000ff82620000d4565b9050919050565b6200011181620000f3565b81146200011c575f80fd5b50565b5f815190506200012f8162000106565b92915050565b5f602082840312156200014d576200014c620000d0565b5b5f6200015c848285016200011f565b91505092915050565b6114d580620001735f395ff3fe608060405234801562000010575f80fd5b506004361062000092575f3560e01c80638d65402311620000615780638d65402314620001585780638da5cb5b146200017a578063ac818711146200019c578063bba48a9014620001d25762000092565b80630c5bc6a9146200009657806310195f9514620000cc578063174ef86a14620001025780632cf08fd11462000122575b5f80fd5b620000b46004803603810190620000ae919062000897565b620001f4565b604051620000c39190620008ed565b60405180910390f35b620000ea6004803603810190620000e4919062000b37565b6200023d565b604051620000f99190620008ed565b60405180910390f35b6200012060048036038101906200011a919062000c0d565b620005ac565b005b6200014060048036038101906200013a919062000c3d565b6200067f565b6040516200014f9190620008ed565b60405180910390f35b62000162620006c7565b60405162000171919062000c9d565b60405180910390f35b62000184620006cd565b604051620001939190620008ed565b60405180910390f35b620001ba6004803603810190620001b4919062000c0d565b620006f0565b604051620001c9919062000d7f565b60405180910390f35b620001dc620007ba565b604051620001eb9190620008ed565b60405180910390f35b6004602052815f5260405f2081815481106200020e575f80fd5b905f5260205f20015f915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8073ffffffffffffffffffffffffffffffffffffffff1660038860405162000267919062000e15565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620002ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e59062000e8b565b60405180910390fd5b5f3360045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506040516020016200034492919062000f1c565b6040516020818303038152906040528051906020012090505f8160025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200038e90620007df565b6200039a9190620008ed565b8190604051809103905ff5905080158015620003b8573d5f803e3d5ffd5b5090505f8190508073ffffffffffffffffffffffffffffffffffffffff1663d63da95c338c8c8c8c8c8c6040518863ffffffff1660e01b815260040162000406979695949392919062000f8b565b5f604051808303815f87803b1580156200041e575f80fd5b505af115801562000431573d5f803e3d5ffd5b505050508060038b60405162000448919062000e15565b90815260200160405180910390205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f82825462000541919062001041565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f86c9dd70a6de5b89643ead0c76a7d9c215afd05c87f64d8eaff050b89c341bb3828c8c60405162000594939291906200107b565b60405180910390a28093505050509695505050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200063c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000633906200110b565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6003818051602081018201805184825260208301602085012081835280955050505050505f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015620007ae57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162000764575b50505050509050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610374806200112c83390190565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200082982620007fe565b9050919050565b6200083b816200081d565b811462000846575f80fd5b50565b5f81359050620008598162000830565b92915050565b5f819050919050565b62000873816200085f565b81146200087e575f80fd5b50565b5f81359050620008918162000868565b92915050565b5f8060408385031215620008b057620008af620007f6565b5b5f620008bf8582860162000849565b9250506020620008d28582860162000881565b9150509250929050565b620008e7816200081d565b82525050565b5f602082019050620009025f830184620008dc565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620009588262000910565b810181811067ffffffffffffffff821117156200097a576200097962000920565b5b80604052505050565b5f6200098e620007ed565b90506200099c82826200094d565b919050565b5f67ffffffffffffffff821115620009be57620009bd62000920565b5b620009c98262000910565b9050602081019050919050565b828183375f83830152505050565b5f620009fa620009f484620009a1565b62000983565b90508281526020810184848401111562000a195762000a186200090c565b5b62000a26848285620009d6565b509392505050565b5f82601f83011262000a455762000a4462000908565b5b813562000a57848260208601620009e4565b91505092915050565b5f67ffffffffffffffff82111562000a7d5762000a7c62000920565b5b602082029050602081019050919050565b5f80fd5b5f62000aa862000aa28462000a60565b62000983565b9050808382526020820190506020840283018581111562000ace5762000acd62000a8e565b5b835b8181101562000afb578062000ae6888262000849565b84526020840193505060208101905062000ad0565b5050509392505050565b5f82601f83011262000b1c5762000b1b62000908565b5b813562000b2e84826020860162000a92565b91505092915050565b5f805f805f8060c0878903121562000b545762000b53620007f6565b5b5f87013567ffffffffffffffff81111562000b745762000b73620007fa565b5b62000b8289828a0162000a2e565b965050602062000b9589828a0162000849565b955050604087013567ffffffffffffffff81111562000bb95762000bb8620007fa565b5b62000bc789828a0162000b05565b945050606062000bda89828a0162000881565b935050608062000bed89828a0162000881565b92505060a062000c0089828a0162000881565b9150509295509295509295565b5f6020828403121562000c255762000c24620007f6565b5b5f62000c348482850162000849565b91505092915050565b5f6020828403121562000c555762000c54620007f6565b5b5f82013567ffffffffffffffff81111562000c755762000c74620007fa565b5b62000c838482850162000a2e565b91505092915050565b62000c97816200085f565b82525050565b5f60208201905062000cb25f83018462000c8c565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b62000cec816200081d565b82525050565b5f62000cff838362000ce1565b60208301905092915050565b5f602082019050919050565b5f62000d238262000cb8565b62000d2f818562000cc2565b935062000d3c8362000cd2565b805f5b8381101562000d7257815162000d56888262000cf2565b975062000d638362000d0b565b92505060018101905062000d3f565b5085935050505092915050565b5f6020820190508181035f83015262000d99818462000d17565b905092915050565b5f81519050919050565b5f81905092915050565b5f5b8381101562000dd457808201518184015260208101905062000db7565b5f8484015250505050565b5f62000deb8262000da1565b62000df7818562000dab565b935062000e0981856020860162000db5565b80840191505092915050565b5f62000e22828462000ddf565b915081905092915050565b5f82825260208201905092915050565b7f5661756c74206e616d6520616c726561647920657869737473000000000000005f82015250565b5f62000e7360198362000e2d565b915062000e808262000e3d565b602082019050919050565b5f6020820190508181035f83015262000ea48162000e65565b9050919050565b5f8160601b9050919050565b5f62000ec38262000eab565b9050919050565b5f62000ed68262000eb7565b9050919050565b62000ef262000eec826200081d565b62000eca565b82525050565b5f819050919050565b62000f1662000f10826200085f565b62000ef8565b82525050565b5f62000f29828562000edd565b60148201915062000f3b828462000f01565b6020820191508190509392505050565b5f62000f578262000da1565b62000f63818562000e2d565b935062000f7581856020860162000db5565b62000f808162000910565b840191505092915050565b5f60e08201905062000fa05f83018a620008dc565b818103602083015262000fb4818962000f4b565b905062000fc56040830188620008dc565b818103606083015262000fd9818762000d17565b905062000fea608083018662000c8c565b62000ff960a083018562000c8c565b6200100860c083018462000c8c565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200104d826200085f565b91506200105a836200085f565b925082820190508082111562001075576200107462001014565b5b92915050565b5f606082019050620010905f830186620008dc565b8181036020830152620010a4818562000f4b565b9050620010b56040830184620008dc565b949350505050565b7f4e6f7420746865206f776e6572000000000000000000000000000000000000005f82015250565b5f620010f3600d8362000e2d565b91506200110082620010bd565b602082019050919050565b5f6020820190508181035f8301526200112481620010e5565b905091905056fe60a060405234801561000f575f80fd5b5060405161037438038061037483398181016040528101906100319190610137565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361009f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610096906101bc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506101da565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610106826100dd565b9050919050565b610116816100fc565b8114610120575f80fd5b50565b5f815190506101318161010d565b92915050565b5f6020828403121561014c5761014b6100d9565b5b5f61015984828501610123565b91505092915050565b5f82825260208201905092915050565b7f496e76616c696420696d706c656d656e746174696f6e206164647265737300005f82015250565b5f6101a6601e83610162565b91506101b182610172565b602082019050919050565b5f6020820190508181035f8301526101d38161019a565b9050919050565b6080516101776101fd5f395f8181602b015281816056015260c701526101775ff3fe608060405260043610610021575f3560e01c80635c60da1b1461007c57610051565b366100515761004f7f00000000000000000000000000000000000000000000000000000000000000006100a6565b005b61007a7f00000000000000000000000000000000000000000000000000000000000000006100a6565b005b348015610087575f80fd5b506100906100c5565b60405161009d9190610128565b60405180910390f35b365f80375f80365f845af43d5f803e805f81146100c1573d5ff35b3d5ffd5b7f000000000000000000000000000000000000000000000000000000000000000081565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610112826100e9565b9050919050565b61012281610108565b82525050565b5f60208201905061013b5f830184610119565b9291505056fea2646970667358221220a70daec4d752db8e44a8b5585fd220d5a4e8d713f843790b34228271f76f8d4b64736f6c63430008150033a2646970667358221220f0498bb8d60a32f7e1e6c36eea825ff76185fcbd0b86cf43273223e83f4f4ec764736f6c63430008150033000000000000000000000000714aec7a2ed000729890c3959accfbac577633b1
Deployed Bytecode
0x608060405234801562000010575f80fd5b506004361062000092575f3560e01c80638d65402311620000615780638d65402314620001585780638da5cb5b146200017a578063ac818711146200019c578063bba48a9014620001d25762000092565b80630c5bc6a9146200009657806310195f9514620000cc578063174ef86a14620001025780632cf08fd11462000122575b5f80fd5b620000b46004803603810190620000ae919062000897565b620001f4565b604051620000c39190620008ed565b60405180910390f35b620000ea6004803603810190620000e4919062000b37565b6200023d565b604051620000f99190620008ed565b60405180910390f35b6200012060048036038101906200011a919062000c0d565b620005ac565b005b6200014060048036038101906200013a919062000c3d565b6200067f565b6040516200014f9190620008ed565b60405180910390f35b62000162620006c7565b60405162000171919062000c9d565b60405180910390f35b62000184620006cd565b604051620001939190620008ed565b60405180910390f35b620001ba6004803603810190620001b4919062000c0d565b620006f0565b604051620001c9919062000d7f565b60405180910390f35b620001dc620007ba565b604051620001eb9190620008ed565b60405180910390f35b6004602052815f5260405f2081815481106200020e575f80fd5b905f5260205f20015f915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8073ffffffffffffffffffffffffffffffffffffffff1660038860405162000267919062000e15565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620002ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e59062000e8b565b60405180910390fd5b5f3360045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506040516020016200034492919062000f1c565b6040516020818303038152906040528051906020012090505f8160025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200038e90620007df565b6200039a9190620008ed565b8190604051809103905ff5905080158015620003b8573d5f803e3d5ffd5b5090505f8190508073ffffffffffffffffffffffffffffffffffffffff1663d63da95c338c8c8c8c8c8c6040518863ffffffff1660e01b815260040162000406979695949392919062000f8b565b5f604051808303815f87803b1580156200041e575f80fd5b505af115801562000431573d5f803e3d5ffd5b505050508060038b60405162000448919062000e15565b90815260200160405180910390205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f82825462000541919062001041565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f86c9dd70a6de5b89643ead0c76a7d9c215afd05c87f64d8eaff050b89c341bb3828c8c60405162000594939291906200107b565b60405180910390a28093505050509695505050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200063c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000633906200110b565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6003818051602081018201805184825260208301602085012081835280955050505050505f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015620007ae57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162000764575b50505050509050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610374806200112c83390190565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200082982620007fe565b9050919050565b6200083b816200081d565b811462000846575f80fd5b50565b5f81359050620008598162000830565b92915050565b5f819050919050565b62000873816200085f565b81146200087e575f80fd5b50565b5f81359050620008918162000868565b92915050565b5f8060408385031215620008b057620008af620007f6565b5b5f620008bf8582860162000849565b9250506020620008d28582860162000881565b9150509250929050565b620008e7816200081d565b82525050565b5f602082019050620009025f830184620008dc565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620009588262000910565b810181811067ffffffffffffffff821117156200097a576200097962000920565b5b80604052505050565b5f6200098e620007ed565b90506200099c82826200094d565b919050565b5f67ffffffffffffffff821115620009be57620009bd62000920565b5b620009c98262000910565b9050602081019050919050565b828183375f83830152505050565b5f620009fa620009f484620009a1565b62000983565b90508281526020810184848401111562000a195762000a186200090c565b5b62000a26848285620009d6565b509392505050565b5f82601f83011262000a455762000a4462000908565b5b813562000a57848260208601620009e4565b91505092915050565b5f67ffffffffffffffff82111562000a7d5762000a7c62000920565b5b602082029050602081019050919050565b5f80fd5b5f62000aa862000aa28462000a60565b62000983565b9050808382526020820190506020840283018581111562000ace5762000acd62000a8e565b5b835b8181101562000afb578062000ae6888262000849565b84526020840193505060208101905062000ad0565b5050509392505050565b5f82601f83011262000b1c5762000b1b62000908565b5b813562000b2e84826020860162000a92565b91505092915050565b5f805f805f8060c0878903121562000b545762000b53620007f6565b5b5f87013567ffffffffffffffff81111562000b745762000b73620007fa565b5b62000b8289828a0162000a2e565b965050602062000b9589828a0162000849565b955050604087013567ffffffffffffffff81111562000bb95762000bb8620007fa565b5b62000bc789828a0162000b05565b945050606062000bda89828a0162000881565b935050608062000bed89828a0162000881565b92505060a062000c0089828a0162000881565b9150509295509295509295565b5f6020828403121562000c255762000c24620007f6565b5b5f62000c348482850162000849565b91505092915050565b5f6020828403121562000c555762000c54620007f6565b5b5f82013567ffffffffffffffff81111562000c755762000c74620007fa565b5b62000c838482850162000a2e565b91505092915050565b62000c97816200085f565b82525050565b5f60208201905062000cb25f83018462000c8c565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b62000cec816200081d565b82525050565b5f62000cff838362000ce1565b60208301905092915050565b5f602082019050919050565b5f62000d238262000cb8565b62000d2f818562000cc2565b935062000d3c8362000cd2565b805f5b8381101562000d7257815162000d56888262000cf2565b975062000d638362000d0b565b92505060018101905062000d3f565b5085935050505092915050565b5f6020820190508181035f83015262000d99818462000d17565b905092915050565b5f81519050919050565b5f81905092915050565b5f5b8381101562000dd457808201518184015260208101905062000db7565b5f8484015250505050565b5f62000deb8262000da1565b62000df7818562000dab565b935062000e0981856020860162000db5565b80840191505092915050565b5f62000e22828462000ddf565b915081905092915050565b5f82825260208201905092915050565b7f5661756c74206e616d6520616c726561647920657869737473000000000000005f82015250565b5f62000e7360198362000e2d565b915062000e808262000e3d565b602082019050919050565b5f6020820190508181035f83015262000ea48162000e65565b9050919050565b5f8160601b9050919050565b5f62000ec38262000eab565b9050919050565b5f62000ed68262000eb7565b9050919050565b62000ef262000eec826200081d565b62000eca565b82525050565b5f819050919050565b62000f1662000f10826200085f565b62000ef8565b82525050565b5f62000f29828562000edd565b60148201915062000f3b828462000f01565b6020820191508190509392505050565b5f62000f578262000da1565b62000f63818562000e2d565b935062000f7581856020860162000db5565b62000f808162000910565b840191505092915050565b5f60e08201905062000fa05f83018a620008dc565b818103602083015262000fb4818962000f4b565b905062000fc56040830188620008dc565b818103606083015262000fd9818762000d17565b905062000fea608083018662000c8c565b62000ff960a083018562000c8c565b6200100860c083018462000c8c565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200104d826200085f565b91506200105a836200085f565b925082820190508082111562001075576200107462001014565b5b92915050565b5f606082019050620010905f830186620008dc565b8181036020830152620010a4818562000f4b565b9050620010b56040830184620008dc565b949350505050565b7f4e6f7420746865206f776e6572000000000000000000000000000000000000005f82015250565b5f620010f3600d8362000e2d565b91506200110082620010bd565b602082019050919050565b5f6020820190508181035f8301526200112481620010e5565b905091905056fe60a060405234801561000f575f80fd5b5060405161037438038061037483398181016040528101906100319190610137565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361009f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610096906101bc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506101da565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610106826100dd565b9050919050565b610116816100fc565b8114610120575f80fd5b50565b5f815190506101318161010d565b92915050565b5f6020828403121561014c5761014b6100d9565b5b5f61015984828501610123565b91505092915050565b5f82825260208201905092915050565b7f496e76616c696420696d706c656d656e746174696f6e206164647265737300005f82015250565b5f6101a6601e83610162565b91506101b182610172565b602082019050919050565b5f6020820190508181035f8301526101d38161019a565b9050919050565b6080516101776101fd5f395f8181602b015281816056015260c701526101775ff3fe608060405260043610610021575f3560e01c80635c60da1b1461007c57610051565b366100515761004f7f00000000000000000000000000000000000000000000000000000000000000006100a6565b005b61007a7f00000000000000000000000000000000000000000000000000000000000000006100a6565b005b348015610087575f80fd5b506100906100c5565b60405161009d9190610128565b60405180910390f35b365f80375f80365f845af43d5f803e805f81146100c1573d5ff35b3d5ffd5b7f000000000000000000000000000000000000000000000000000000000000000081565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610112826100e9565b9050919050565b61012281610108565b82525050565b5f60208201905061013b5f830184610119565b9291505056fea2646970667358221220a70daec4d752db8e44a8b5585fd220d5a4e8d713f843790b34228271f76f8d4b64736f6c63430008150033a2646970667358221220f0498bb8d60a32f7e1e6c36eea825ff76185fcbd0b86cf43273223e83f4f4ec764736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000714aec7a2ed000729890c3959accfbac577633b1
-----Decoded View---------------
Arg [0] : _vaultImplementation (address): 0x714AEc7a2ED000729890C3959acCFbAc577633b1
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000714aec7a2ed000729890c3959accfbac577633b1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.