Overview
ETH Balance
ETH Value
$0.00Latest 25 from a total of 51 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Create Proxy | 404115362 | 60 days ago | IN | 0 ETH | 0.00001141 | ||||
| Create Proxy | 403786819 | 61 days ago | IN | 0 ETH | 0.00001083 | ||||
| Create Proxy | 403786816 | 61 days ago | IN | 0 ETH | 0.00001097 | ||||
| Create Proxy | 401941844 | 67 days ago | IN | 0 ETH | 0.00010377 | ||||
| Create Proxy | 401926619 | 67 days ago | IN | 0 ETH | 0.00009968 | ||||
| Create Proxy | 392108797 | 95 days ago | IN | 0 ETH | 0.00001099 | ||||
| Create Proxy | 392108793 | 95 days ago | IN | 0 ETH | 0.00001099 | ||||
| Create Proxy | 383550666 | 120 days ago | IN | 0 ETH | 0.00005984 | ||||
| Create Proxy | 378003083 | 136 days ago | IN | 0 ETH | 0.00001116 | ||||
| Create Proxy | 378003074 | 136 days ago | IN | 0 ETH | 0.00001077 | ||||
| Create Proxy | 378003070 | 136 days ago | IN | 0 ETH | 0.00001085 | ||||
| Create Proxy | 378003065 | 136 days ago | IN | 0 ETH | 0.00001084 | ||||
| Create Proxy | 375317880 | 143 days ago | IN | 0 ETH | 0.00001111 | ||||
| Create Proxy | 374330601 | 146 days ago | IN | 0 ETH | 0.00001101 | ||||
| Create Proxy | 374330590 | 146 days ago | IN | 0 ETH | 0.00001078 | ||||
| Create Proxy | 374325362 | 146 days ago | IN | 0 ETH | 0.00001116 | ||||
| Create Proxy | 374325358 | 146 days ago | IN | 0 ETH | 0.00001094 | ||||
| Create Proxy | 374325354 | 146 days ago | IN | 0 ETH | 0.00001099 | ||||
| Create Proxy | 374325350 | 146 days ago | IN | 0 ETH | 0.00001082 | ||||
| Create Proxy | 374325346 | 146 days ago | IN | 0 ETH | 0.00001099 | ||||
| Create Proxy | 374325342 | 146 days ago | IN | 0 ETH | 0.00001094 | ||||
| Create Proxy | 374325339 | 146 days ago | IN | 0 ETH | 0.00001094 | ||||
| Create Proxy | 374325336 | 146 days ago | IN | 0 ETH | 0.00001094 | ||||
| Create Proxy | 374325332 | 146 days ago | IN | 0 ETH | 0.00001082 | ||||
| Create Proxy | 374325329 | 146 days ago | IN | 0 ETH | 0.00001099 |
Latest 25 internal transactions (View All)
Cross-Chain Transactions
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity ^0.8.0;
import {BeaconProxy} from "./BeaconProxy.sol";
import {MetaProxyDeployer} from "./MetaProxyDeployer.sol";
/// @title IComponent
/// @notice Minimal interface which must be implemented by the contract deployed by the factory
interface IComponent {
/// @notice Function replacing the constructor in proxied contracts
/// @param creator The new contract's creator address
function initialize(address creator) external;
}
/// @title GenericFactory
/// @custom:security-contact [email protected]
/// @author Euler Labs (https://www.eulerlabs.com/)
/// @notice The factory allows permissionless creation of upgradeable or non-upgradeable proxy contracts and serves as a
/// beacon for the upgradeable ones
contract GenericFactory is MetaProxyDeployer {
// Constants
uint256 internal constant REENTRANCYLOCK__UNLOCKED = 1;
uint256 internal constant REENTRANCYLOCK__LOCKED = 2;
// State
/// @title ProxyConfig
/// @notice This struct is used to store the configuration of a proxy deployed by the factory
struct ProxyConfig {
// If true, proxy is an instance of the BeaconProxy
bool upgradeable;
// Address of the implementation contract
// May be an out-of-date value, if upgradeable (handled by getProxyConfig)
address implementation;
// The metadata attached to every call passing through the proxy
bytes trailingData;
}
uint256 private reentrancyLock;
/// @notice Address of the account authorized to upgrade the implementation contract
address public upgradeAdmin;
/// @notice Address of the implementation contract, which the deployed proxies will delegate-call to
/// @dev The contract must implement the `IComponent` interface
address public implementation;
/// @notice A lookup for configurations of the proxy contracts deployed by the factory
mapping(address proxy => ProxyConfig) internal proxyLookup;
/// @notice An array of addresses of all the proxies deployed by the factory
address[] public proxyList;
// Events
/// @notice The factory is created
event Genesis();
/// @notice A new proxy is created
/// @param proxy Address of the new proxy
/// @param upgradeable If true, proxy is an instance of the BeaconProxy. If false, the proxy is a minimal meta proxy
/// @param implementation Address of the implementation contract, at the time the proxy was deployed
/// @param trailingData The metadata that will be attached to every call passing through the proxy
event ProxyCreated(address indexed proxy, bool upgradeable, address implementation, bytes trailingData);
/// @notice Set a new implementation contract. All the BeaconProxies are upgraded to the new logic
/// @param newImplementation Address of the new implementation contract
event SetImplementation(address indexed newImplementation);
/// @notice Set a new upgrade admin
/// @param newUpgradeAdmin Address of the new admin
event SetUpgradeAdmin(address indexed newUpgradeAdmin);
// Errors
error E_Reentrancy();
error E_Unauthorized();
error E_Implementation();
error E_BadAddress();
error E_BadQuery();
// Modifiers
modifier nonReentrant() {
if (reentrancyLock == REENTRANCYLOCK__LOCKED) revert E_Reentrancy();
reentrancyLock = REENTRANCYLOCK__LOCKED;
_;
reentrancyLock = REENTRANCYLOCK__UNLOCKED;
}
modifier adminOnly() {
if (msg.sender != upgradeAdmin) revert E_Unauthorized();
_;
}
constructor(address admin) {
emit Genesis();
if (admin == address(0)) revert E_BadAddress();
reentrancyLock = REENTRANCYLOCK__UNLOCKED;
upgradeAdmin = admin;
emit SetUpgradeAdmin(admin);
}
/// @notice A permissionless funtion to deploy new proxies
/// @param desiredImplementation Address of the implementation contract expected to be registered in the factory
/// during proxy creation
/// @param upgradeable If true, the proxy will be an instance of the BeaconProxy. If false, a minimal meta proxy
/// will be deployed
/// @param trailingData Metadata to be attached to every call passing through the new proxy
/// @return The address of the new proxy
/// @dev The desired implementation serves as a protection against (unintentional) front-running of upgrades
function createProxy(address desiredImplementation, bool upgradeable, bytes memory trailingData)
external
nonReentrant
returns (address)
{
address _implementation = implementation;
if (desiredImplementation == address(0)) desiredImplementation = _implementation;
if (desiredImplementation == address(0) || desiredImplementation != _implementation) revert E_Implementation();
// The provided trailing data is prefixed with 4 zero bytes to avoid potential selector clashing in case the
// proxy is called with empty calldata.
bytes memory prefixTrailingData = abi.encodePacked(bytes4(0), trailingData);
address proxy;
if (upgradeable) {
proxy = address(new BeaconProxy(prefixTrailingData));
} else {
proxy = deployMetaProxy(desiredImplementation, prefixTrailingData);
}
proxyLookup[proxy] =
ProxyConfig({upgradeable: upgradeable, implementation: desiredImplementation, trailingData: trailingData});
proxyList.push(proxy);
IComponent(proxy).initialize(msg.sender);
emit ProxyCreated(proxy, upgradeable, desiredImplementation, trailingData);
return proxy;
}
// EVault beacon upgrade
/// @notice Set a new implementation contract
/// @param newImplementation Address of the new implementation contract
/// @dev Upgrades all existing BeaconProxies to the new logic immediately
function setImplementation(address newImplementation) external nonReentrant adminOnly {
if (newImplementation.code.length == 0) revert E_BadAddress();
implementation = newImplementation;
emit SetImplementation(newImplementation);
}
// Admin role
/// @notice Transfer admin rights to a new address
/// @param newUpgradeAdmin Address of the new admin
/// @dev For creating non upgradeable factories, or to finalize all upgradeable proxies to current implementation,
/// @dev set the admin to zero address.
/// @dev If setting to address zero, make sure the implementation contract is already set
function setUpgradeAdmin(address newUpgradeAdmin) external nonReentrant adminOnly {
upgradeAdmin = newUpgradeAdmin;
emit SetUpgradeAdmin(newUpgradeAdmin);
}
// Proxy getters
/// @notice Get current proxy configuration
/// @param proxy Address of the proxy to query
/// @return config The proxy's configuration, including current implementation
function getProxyConfig(address proxy) external view returns (ProxyConfig memory config) {
config = proxyLookup[proxy];
if (config.upgradeable) config.implementation = implementation;
}
/// @notice Check if an address is a proxy deployed with this factory
/// @param proxy Address to check
/// @return True if the address is a proxy
function isProxy(address proxy) external view returns (bool) {
return proxyLookup[proxy].implementation != address(0);
}
/// @notice Fetch the length of the deployed proxies list
/// @return The length of the proxy list array
function getProxyListLength() external view returns (uint256) {
return proxyList.length;
}
/// @notice Get a slice of the deployed proxies array
/// @param start Start index of the slice
/// @param end End index of the slice
/// @return list An array containing the slice of the proxy list
function getProxyListSlice(uint256 start, uint256 end) external view returns (address[] memory list) {
if (end == type(uint256).max) end = proxyList.length;
if (end < start || end > proxyList.length) revert E_BadQuery();
list = new address[](end - start);
for (uint256 i; i < end - start; ++i) {
list[i] = proxyList[start + i];
}
}
}// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; /// @title BeaconProxy /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice A proxy contract, forwarding all calls to an implementation contract, fetched from a beacon /// @dev The proxy attaches up to 128 bytes of metadata to the delegated call data. contract BeaconProxy { // ERC-1967 beacon address slot. bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1) bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; // Beacon implementation() selector bytes32 internal constant IMPLEMENTATION_SELECTOR = 0x5c60da1b00000000000000000000000000000000000000000000000000000000; // Max trailing data length, 4 immutable slots uint256 internal constant MAX_TRAILING_DATA_LENGTH = 128; address internal immutable beacon; uint256 internal immutable metadataLength; bytes32 internal immutable metadata0; bytes32 internal immutable metadata1; bytes32 internal immutable metadata2; bytes32 internal immutable metadata3; event Genesis(); constructor(bytes memory trailingData) { emit Genesis(); require(trailingData.length <= MAX_TRAILING_DATA_LENGTH, "trailing data too long"); // Beacon is always the proxy creator; store it in immutable beacon = msg.sender; // Store the beacon address in ERC-1967 slot for compatibility with block explorers assembly { sstore(BEACON_SLOT, caller()) } // Record length as immutable metadataLength = trailingData.length; // Pad length with uninitialized memory so the decode will succeed assembly { mstore(trailingData, MAX_TRAILING_DATA_LENGTH) } (metadata0, metadata1, metadata2, metadata3) = abi.decode(trailingData, (bytes32, bytes32, bytes32, bytes32)); } fallback() external payable { address beacon_ = beacon; uint256 metadataLength_ = metadataLength; bytes32 metadata0_ = metadata0; bytes32 metadata1_ = metadata1; bytes32 metadata2_ = metadata2; bytes32 metadata3_ = metadata3; assembly { // Fetch implementation address from the beacon mstore(0, IMPLEMENTATION_SELECTOR) // Implementation call is trusted not to revert and to return an address let result := staticcall(gas(), beacon_, 0, 4, 0, 32) let implementation := mload(0) // delegatecall to the implementation with trailing metadata calldatacopy(0, 0, calldatasize()) mstore(calldatasize(), metadata0_) mstore(add(32, calldatasize()), metadata1_) mstore(add(64, calldatasize()), metadata2_) mstore(add(96, calldatasize()), metadata3_) result := delegatecall(gas(), implementation, 0, add(metadataLength_, calldatasize()), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; /// @title MetaProxyDeployer /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice Contract for deploying minimal proxies with metadata, based on EIP-3448. /// @dev The metadata of the proxies does not include the data length as defined by EIP-3448, saving gas at a cost of /// supporting variable size data. contract MetaProxyDeployer { error E_DeploymentFailed(); // Meta proxy bytecode from EIP-3488 https://eips.ethereum.org/EIPS/eip-3448 bytes constant BYTECODE_HEAD = hex"600b380380600b3d393df3363d3d373d3d3d3d60368038038091363936013d73"; bytes constant BYTECODE_TAIL = hex"5af43d3d93803e603457fd5bf3"; /// @dev Creates a proxy for `targetContract` with metadata from `metadata`. /// @return addr A non-zero address if successful. function deployMetaProxy(address targetContract, bytes memory metadata) internal returns (address addr) { bytes memory code = abi.encodePacked(BYTECODE_HEAD, targetContract, BYTECODE_TAIL, metadata); assembly ("memory-safe") { addr := create(0, add(code, 32), mload(code)) } if (addr == address(0)) revert E_DeploymentFailed(); } }
{
"remappings": [
"lib/euler-price-oracle:@openzeppelin/contracts/=lib/euler-price-oracle/lib/openzeppelin-contracts/contracts/",
"lib/euler-earn:@openzeppelin/=lib/euler-earn/lib/openzeppelin-contracts/",
"lib/euler-earn:@openzeppelin-upgradeable/=lib/euler-earn/lib/openzeppelin-contracts-upgradeable/contracts/",
"lib/euler-earn:ethereum-vault-connector/=lib/euler-earn/lib/ethereum-vault-connector/src/",
"lib/layerzero-devtools/packages/oft-evm/contracts:@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts/contracts/",
"lib/layerzero-devtools/packages/oft-evm-upgradeable/contracts:@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"lib/layerzero-devtools/packages/oapp-evm-upgradeable/contracts:@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@layerzerolabs/oft-evm/=lib/layerzero-devtools/packages/oft-evm/",
"@layerzerolabs/oapp-evm/=lib/layerzero-devtools/packages/oapp-evm/",
"@layerzerolabs/oapp-evm-upgradeable/=lib/layerzero-devtools/packages/oapp-evm-upgradeable/",
"@layerzerolabs/lz-evm-protocol-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/protocol/",
"@layerzerolabs/lz-evm-messagelib-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/messagelib/",
"@layerzerolabs/lz-evm-oapp-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/oapp/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"ethereum-vault-connector/=lib/ethereum-vault-connector/src/",
"evc/=lib/ethereum-vault-connector/src/",
"evk/=lib/euler-vault-kit/src/",
"evk-test/=lib/euler-vault-kit/test/",
"euler-price-oracle/=lib/euler-price-oracle/src/",
"euler-price-oracle-test/=lib/euler-price-oracle/test/",
"fee-flow/=lib/fee-flow/src/",
"reward-streams/=lib/reward-streams/src/",
"@openzeppelin/=lib/openzeppelin-contracts/contracts/",
"euler-earn/=lib/euler-earn/src/",
"layerzero/oft-evm/=lib/layerzero-devtools/packages/oft-evm/contracts/",
"layerzero/oft-evm-upgradeable/=lib/layerzero-devtools/packages/oft-evm-upgradeable/contracts/",
"solidity-bytes-utils/=lib/solidity-bytes-utils/",
"@openzeppelin-upgradeable/=lib/euler-earn/lib/openzeppelin-contracts-upgradeable/contracts/",
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@pendle/core-v2/=lib/euler-price-oracle/lib/pendle-core-v2-public/contracts/",
"@pyth/=lib/euler-price-oracle/lib/pyth-sdk-solidity/",
"@redstone/evm-connector/=lib/euler-price-oracle/lib/redstone-oracles-monorepo/packages/evm-connector/contracts/",
"@solady/=lib/euler-price-oracle/lib/solady/src/",
"@uniswap/v3-core/=lib/euler-price-oracle/lib/v3-core/",
"@uniswap/v3-periphery/=lib/euler-price-oracle/lib/v3-periphery/",
"ERC4626/=lib/euler-earn/lib/properties/lib/ERC4626/contracts/",
"crytic-properties/=lib/euler-earn/lib/properties/contracts/",
"ds-test/=lib/ethereum-vault-connector/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"euler-vault-kit/=lib/euler-vault-kit/",
"forge-gas-snapshot/=lib/euler-vault-kit/lib/permit2/lib/forge-gas-snapshot/src/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
"layerzero-devtools/=lib/layerzero-devtools/packages/toolbox-foundry/src/",
"layerzero-v2/=lib/layerzero-v2/",
"openzeppelin/=lib/ethereum-vault-connector/lib/openzeppelin-contracts/contracts/",
"pendle-core-v2-public/=lib/euler-price-oracle/lib/pendle-core-v2-public/contracts/",
"permit2/=lib/euler-vault-kit/lib/permit2/",
"properties/=lib/euler-earn/lib/properties/contracts/",
"pyth-sdk-solidity/=lib/euler-price-oracle/lib/pyth-sdk-solidity/",
"redstone-oracles-monorepo/=lib/euler-price-oracle/lib/",
"solady/=lib/euler-price-oracle/lib/solady/src/",
"solmate/=lib/fee-flow/lib/solmate/src/",
"v3-core/=lib/euler-price-oracle/lib/v3-core/contracts/",
"v3-periphery/=lib/euler-price-oracle/lib/v3-periphery/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 20000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"E_BadAddress","type":"error"},{"inputs":[],"name":"E_BadQuery","type":"error"},{"inputs":[],"name":"E_DeploymentFailed","type":"error"},{"inputs":[],"name":"E_Implementation","type":"error"},{"inputs":[],"name":"E_Reentrancy","type":"error"},{"inputs":[],"name":"E_Unauthorized","type":"error"},{"anonymous":false,"inputs":[],"name":"Genesis","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":false,"internalType":"bool","name":"upgradeable","type":"bool"},{"indexed":false,"internalType":"address","name":"implementation","type":"address"},{"indexed":false,"internalType":"bytes","name":"trailingData","type":"bytes"}],"name":"ProxyCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newImplementation","type":"address"}],"name":"SetImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newUpgradeAdmin","type":"address"}],"name":"SetUpgradeAdmin","type":"event"},{"inputs":[{"internalType":"address","name":"desiredImplementation","type":"address"},{"internalType":"bool","name":"upgradeable","type":"bool"},{"internalType":"bytes","name":"trailingData","type":"bytes"}],"name":"createProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxy","type":"address"}],"name":"getProxyConfig","outputs":[{"components":[{"internalType":"bool","name":"upgradeable","type":"bool"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"trailingData","type":"bytes"}],"internalType":"struct GenericFactory.ProxyConfig","name":"config","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProxyListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getProxyListSlice","outputs":[{"internalType":"address[]","name":"list","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"proxy","type":"address"}],"name":"isProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proxyList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"setImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newUpgradeAdmin","type":"address"}],"name":"setUpgradeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradeAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561000f575f80fd5b5060405161170538038061170583398101604081905261002e916100cc565b6040517f6bf6eaff5e9af8fbccb949f4c38cc016936f8775363ccf4224db160365785d52905f90a16001600160a01b03811661007d576040516306e1f36760e31b815260040160405180910390fd5b60015f81815581546001600160a01b0319166001600160a01b0384169081179092556040517f7b1ebd0f3ec81bf1cd5f478166ec87beaea1eee7f3bc2612295ae161048a239f9190a2506100f9565b5f602082840312156100dc575f80fd5b81516001600160a01b03811681146100f2575f80fd5b9392505050565b6115ff806101065f395ff3fe608060405234801562000010575f80fd5b5060043610620000c8575f3560e01c80639342f417116200007b578063c0e96df6116200005f578063c0e96df614620001e9578063c4d5608a146200020f578063d784d4261462000230575f80fd5b80639342f41714620001aa578063a20ea5c114620001c3575f80fd5b8063378cdb6211620000af578063378cdb6214620001355780635c60da1b146200017257806383e85b271462000193575f80fd5b80630a68b7ba14620000cc5780632971038814620000e2575b5f80fd5b6004546040519081526020015b60405180910390f35b62000124620000f336600462000bfc565b73ffffffffffffffffffffffffffffffffffffffff9081165f90815260036020526040902054610100900416151590565b6040519015158152602001620000d9565b6200014c6200014636600462000c1f565b62000247565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620000d9565b6002546200014c9073ffffffffffffffffffffffffffffffffffffffff1681565b6200014c620001a436600462000c64565b6200027d565b620001c1620001bb36600462000bfc565b620005e2565b005b620001da620001d436600462000bfc565b620006e6565b604051620000d9919062000dcf565b62000200620001fa36600462000e1f565b62000812565b604051620000d9919062000e40565b6001546200014c9073ffffffffffffffffffffffffffffffffffffffff1681565b620001c16200024136600462000bfc565b62000987565b6004818154811062000257575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f60025f5403620002ba576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f8190555473ffffffffffffffffffffffffffffffffffffffff908116908516620002e5578094505b73ffffffffffffffffffffffffffffffffffffffff851615806200033557508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156200036d576040517f3c02e77800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f9062000384908290869060200162000e9b565b60405160208183030381529060405290505f8515620003db5781604051620003ac9062000bca565b620003b8919062000ee4565b604051809103905ff080158015620003d2573d5f803e3d5ffd5b509050620003ea565b620003e7878362000adc565b90505b60408051606081018252871515815273ffffffffffffffffffffffffffffffffffffffff89811660208084019182528385018a81528684165f90815260039092529490208351815492517fffffffffffffffffffffff0000000000000000000000000000000000000000009093169015157fffffffffffffffffffffff0000000000000000000000000000000000000000ff1617610100929093169190910291909117815591519091906001820190620004a5908262000f9b565b5050600480546001810182555f8290527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040517fc4d66de80000000000000000000000000000000000000000000000000000000081523392810192909252915063c4d66de8906024015f604051808303815f87803b15801562000569575f80fd5b505af11580156200057c573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff167f04e664079117e113faa9684bc14aecb41651cbf098b14eda271248c6d0cda57c878988604051620005cc93929190620010c4565b60405180910390a260015f559695505050505050565b60025f54036200061e576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f5560015473ffffffffffffffffffffffffffffffffffffffff16331462000674576040517f08e2ce1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f7b1ebd0f3ec81bf1cd5f478166ec87beaea1eee7f3bc2612295ae161048a239f905f90a25060015f55565b60408051606080820183525f808352602080840182905283850183905273ffffffffffffffffffffffffffffffffffffffff8681168352600382529185902085519384018652805460ff8116151585526101009004909216908301526001810180549394929391928401916200075c9062000ef8565b80601f01602080910402602001604051908101604052809291908181526020018280546200078a9062000ef8565b8015620007d95780601f10620007af57610100808354040283529160200191620007d9565b820191905f5260205f20905b815481529060010190602001808311620007bb57829003601f168201915b5050505050815250509050805f0151156200080d5760025473ffffffffffffffffffffffffffffffffffffffff1660208201525b919050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620008425760045491505b8282108062000852575060045482115b156200088a576040517fa66618e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000896838362001132565b67ffffffffffffffff811115620008b157620008b162000c37565b604051908082528060200260200182016040528015620008db578160200160208202803683370190505b5090505f5b620008ec848462001132565b811015620009805760046200090282866200114e565b8154811062000915576200091562001164565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682828151811062000952576200095262001164565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101620008e0565b5092915050565b60025f5403620009c3576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f5560015473ffffffffffffffffffffffffffffffffffffffff16331462000a19576040517f08e2ce1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163b5f0362000a6a576040517f370f9b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fddebe6de740fe0dd01cc33ffa314d11c6ac6acbbe50b80513c4c360ae7aa4f04905f90a25060015f55565b5f806040518060400160405280602081526020017f600b380380600b3d393df3363d3d373d3d3d3d60368038038091363936013d73815250846040518060400160405280600d81526020017f5af43d3d93803e603457fd5bf3000000000000000000000000000000000000008152508560405160200162000b61949392919062001191565b60405160208183030381529060405290508051602082015ff0915073ffffffffffffffffffffffffffffffffffffffff821662000980576040517fbe4dab5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103bd806200120d83390190565b803573ffffffffffffffffffffffffffffffffffffffff811681146200080d575f80fd5b5f6020828403121562000c0d575f80fd5b62000c188262000bd8565b9392505050565b5f6020828403121562000c30575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f805f6060848603121562000c77575f80fd5b62000c828462000bd8565b92506020840135801515811462000c97575f80fd5b9150604084013567ffffffffffffffff8082111562000cb4575f80fd5b818601915086601f83011262000cc8575f80fd5b81358181111562000cdd5762000cdd62000c37565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171562000d265762000d2662000c37565b8160405282815289602084870101111562000d3f575f80fd5b826020860160208301375f6020848301015280955050505050509250925092565b5f5b8381101562000d7c57818101518382015260200162000d62565b50505f910152565b5f815180845262000d9d81602086016020860162000d60565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815281511515602082015273ffffffffffffffffffffffffffffffffffffffff60208301511660408201525f604083015160608084015262000e17608084018262000d84565b949350505050565b5f806040838503121562000e31575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b8181101562000e8f57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010162000e5b565b50909695505050505050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681525f825162000ed681600485016020870162000d60565b919091016004019392505050565b602081525f62000c18602083018462000d84565b600181811c9082168062000f0d57607f821691505b60208210810362000f45577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b601f82111562000f9657805f5260205f20601f840160051c8101602085101562000f725750805b601f840160051c820191505b8181101562000f93575f815560010162000f7e565b50505b505050565b815167ffffffffffffffff81111562000fb85762000fb862000c37565b62000fd08162000fc9845462000ef8565b8462000f4b565b602080601f83116001811462001025575f841562000fee5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555620010bc565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015620010735788860151825594840194600190910190840162001052565b5085821015620010b057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b831515815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201525f620010fc606083018462000d84565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111562001148576200114862001105565b92915050565b8082018082111562001148576200114862001105565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8551620011a4818460208a0162000d60565b80830190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528451620011e681601484016020890162000d60565b8451910190620011fe81601484016020880162000d60565b01601401969550505050505056fe610140604052348015610010575f80fd5b506040516103bd3803806103bd83398101604081905261002f91610119565b6040517f6bf6eaff5e9af8fbccb949f4c38cc016936f8775363ccf4224db160365785d52905f90a16080815111156100ad5760405162461bcd60e51b815260206004820152601660248201527f747261696c696e67206461746120746f6f206c6f6e6700000000000000000000604482015260640160405180910390fd5b3360808181527fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5091909155815160a09081529082526100f1908201602083016101db565b610120526101005260e05260c0525061020e565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561012a575f80fd5b82516001600160401b0380821115610140575f80fd5b818501915085601f830112610153575f80fd5b81518181111561016557610165610105565b604051601f8201601f19908116603f0116810190838211818310171561018d5761018d610105565b8160405282815288868487010111156101a4575f80fd5b5f93505b828410156101c557848401860151818501870152928501926101a8565b5f86848301015280965050505050505092915050565b5f805f80608085870312156101ee575f80fd5b505082516020840151604085015160609095015191969095509092509050565b60805160a05160c05160e051610100516101205161016e61024f5f395f60d501525f60b301525f609101525f606f01525f604d01525f602b015261016e5ff3fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000005f9081527f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090602090600481895afa5f51365f80378536528436602001528336604001528236606001525f803689015f845af49150503d5f803e808015610134573d5ff35b3d5ffdfea2646970667358221220790fe9d1cd064f0c23daceddb779ebd37b1955af4ff80f2c522d35fb2eb695d864736f6c63430008180033a26469706673582212204f7a7fe27ed0169c2b0d837cc6670a55e63ba1b5a4b524e28ce95fbda16551e364736f6c63430008180033000000000000000000000000aee4e2e8024c1b58f4686d1cb1646a6d5755f05c
Deployed Bytecode
0x608060405234801562000010575f80fd5b5060043610620000c8575f3560e01c80639342f417116200007b578063c0e96df6116200005f578063c0e96df614620001e9578063c4d5608a146200020f578063d784d4261462000230575f80fd5b80639342f41714620001aa578063a20ea5c114620001c3575f80fd5b8063378cdb6211620000af578063378cdb6214620001355780635c60da1b146200017257806383e85b271462000193575f80fd5b80630a68b7ba14620000cc5780632971038814620000e2575b5f80fd5b6004546040519081526020015b60405180910390f35b62000124620000f336600462000bfc565b73ffffffffffffffffffffffffffffffffffffffff9081165f90815260036020526040902054610100900416151590565b6040519015158152602001620000d9565b6200014c6200014636600462000c1f565b62000247565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620000d9565b6002546200014c9073ffffffffffffffffffffffffffffffffffffffff1681565b6200014c620001a436600462000c64565b6200027d565b620001c1620001bb36600462000bfc565b620005e2565b005b620001da620001d436600462000bfc565b620006e6565b604051620000d9919062000dcf565b62000200620001fa36600462000e1f565b62000812565b604051620000d9919062000e40565b6001546200014c9073ffffffffffffffffffffffffffffffffffffffff1681565b620001c16200024136600462000bfc565b62000987565b6004818154811062000257575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f60025f5403620002ba576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f8190555473ffffffffffffffffffffffffffffffffffffffff908116908516620002e5578094505b73ffffffffffffffffffffffffffffffffffffffff851615806200033557508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156200036d576040517f3c02e77800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f9062000384908290869060200162000e9b565b60405160208183030381529060405290505f8515620003db5781604051620003ac9062000bca565b620003b8919062000ee4565b604051809103905ff080158015620003d2573d5f803e3d5ffd5b509050620003ea565b620003e7878362000adc565b90505b60408051606081018252871515815273ffffffffffffffffffffffffffffffffffffffff89811660208084019182528385018a81528684165f90815260039092529490208351815492517fffffffffffffffffffffff0000000000000000000000000000000000000000009093169015157fffffffffffffffffffffff0000000000000000000000000000000000000000ff1617610100929093169190910291909117815591519091906001820190620004a5908262000f9b565b5050600480546001810182555f8290527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040517fc4d66de80000000000000000000000000000000000000000000000000000000081523392810192909252915063c4d66de8906024015f604051808303815f87803b15801562000569575f80fd5b505af11580156200057c573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff167f04e664079117e113faa9684bc14aecb41651cbf098b14eda271248c6d0cda57c878988604051620005cc93929190620010c4565b60405180910390a260015f559695505050505050565b60025f54036200061e576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f5560015473ffffffffffffffffffffffffffffffffffffffff16331462000674576040517f08e2ce1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f7b1ebd0f3ec81bf1cd5f478166ec87beaea1eee7f3bc2612295ae161048a239f905f90a25060015f55565b60408051606080820183525f808352602080840182905283850183905273ffffffffffffffffffffffffffffffffffffffff8681168352600382529185902085519384018652805460ff8116151585526101009004909216908301526001810180549394929391928401916200075c9062000ef8565b80601f01602080910402602001604051908101604052809291908181526020018280546200078a9062000ef8565b8015620007d95780601f10620007af57610100808354040283529160200191620007d9565b820191905f5260205f20905b815481529060010190602001808311620007bb57829003601f168201915b5050505050815250509050805f0151156200080d5760025473ffffffffffffffffffffffffffffffffffffffff1660208201525b919050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620008425760045491505b8282108062000852575060045482115b156200088a576040517fa66618e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000896838362001132565b67ffffffffffffffff811115620008b157620008b162000c37565b604051908082528060200260200182016040528015620008db578160200160208202803683370190505b5090505f5b620008ec848462001132565b811015620009805760046200090282866200114e565b8154811062000915576200091562001164565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682828151811062000952576200095262001164565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101620008e0565b5092915050565b60025f5403620009c3576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f5560015473ffffffffffffffffffffffffffffffffffffffff16331462000a19576040517f08e2ce1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163b5f0362000a6a576040517f370f9b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fddebe6de740fe0dd01cc33ffa314d11c6ac6acbbe50b80513c4c360ae7aa4f04905f90a25060015f55565b5f806040518060400160405280602081526020017f600b380380600b3d393df3363d3d373d3d3d3d60368038038091363936013d73815250846040518060400160405280600d81526020017f5af43d3d93803e603457fd5bf3000000000000000000000000000000000000008152508560405160200162000b61949392919062001191565b60405160208183030381529060405290508051602082015ff0915073ffffffffffffffffffffffffffffffffffffffff821662000980576040517fbe4dab5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103bd806200120d83390190565b803573ffffffffffffffffffffffffffffffffffffffff811681146200080d575f80fd5b5f6020828403121562000c0d575f80fd5b62000c188262000bd8565b9392505050565b5f6020828403121562000c30575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f805f6060848603121562000c77575f80fd5b62000c828462000bd8565b92506020840135801515811462000c97575f80fd5b9150604084013567ffffffffffffffff8082111562000cb4575f80fd5b818601915086601f83011262000cc8575f80fd5b81358181111562000cdd5762000cdd62000c37565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171562000d265762000d2662000c37565b8160405282815289602084870101111562000d3f575f80fd5b826020860160208301375f6020848301015280955050505050509250925092565b5f5b8381101562000d7c57818101518382015260200162000d62565b50505f910152565b5f815180845262000d9d81602086016020860162000d60565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815281511515602082015273ffffffffffffffffffffffffffffffffffffffff60208301511660408201525f604083015160608084015262000e17608084018262000d84565b949350505050565b5f806040838503121562000e31575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b8181101562000e8f57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010162000e5b565b50909695505050505050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681525f825162000ed681600485016020870162000d60565b919091016004019392505050565b602081525f62000c18602083018462000d84565b600181811c9082168062000f0d57607f821691505b60208210810362000f45577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b601f82111562000f9657805f5260205f20601f840160051c8101602085101562000f725750805b601f840160051c820191505b8181101562000f93575f815560010162000f7e565b50505b505050565b815167ffffffffffffffff81111562000fb85762000fb862000c37565b62000fd08162000fc9845462000ef8565b8462000f4b565b602080601f83116001811462001025575f841562000fee5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555620010bc565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015620010735788860151825594840194600190910190840162001052565b5085821015620010b057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b831515815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201525f620010fc606083018462000d84565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111562001148576200114862001105565b92915050565b8082018082111562001148576200114862001105565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8551620011a4818460208a0162000d60565b80830190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528451620011e681601484016020890162000d60565b8451910190620011fe81601484016020880162000d60565b01601401969550505050505056fe610140604052348015610010575f80fd5b506040516103bd3803806103bd83398101604081905261002f91610119565b6040517f6bf6eaff5e9af8fbccb949f4c38cc016936f8775363ccf4224db160365785d52905f90a16080815111156100ad5760405162461bcd60e51b815260206004820152601660248201527f747261696c696e67206461746120746f6f206c6f6e6700000000000000000000604482015260640160405180910390fd5b3360808181527fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5091909155815160a09081529082526100f1908201602083016101db565b610120526101005260e05260c0525061020e565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561012a575f80fd5b82516001600160401b0380821115610140575f80fd5b818501915085601f830112610153575f80fd5b81518181111561016557610165610105565b604051601f8201601f19908116603f0116810190838211818310171561018d5761018d610105565b8160405282815288868487010111156101a4575f80fd5b5f93505b828410156101c557848401860151818501870152928501926101a8565b5f86848301015280965050505050505092915050565b5f805f80608085870312156101ee575f80fd5b505082516020840151604085015160609095015191969095509092509050565b60805160a05160c05160e051610100516101205161016e61024f5f395f60d501525f60b301525f609101525f606f01525f604d01525f602b015261016e5ff3fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000005f9081527f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090602090600481895afa5f51365f80378536528436602001528336604001528236606001525f803689015f845af49150503d5f803e808015610134573d5ff35b3d5ffdfea2646970667358221220790fe9d1cd064f0c23daceddb779ebd37b1955af4ff80f2c522d35fb2eb695d864736f6c63430008180033a26469706673582212204f7a7fe27ed0169c2b0d837cc6670a55e63ba1b5a4b524e28ce95fbda16551e364736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000aee4e2e8024c1b58f4686d1cb1646a6d5755f05c
-----Decoded View---------------
Arg [0] : admin (address): 0xAeE4e2E8024C1B58f4686d1CB1646a6d5755F05C
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000aee4e2e8024c1b58f4686d1cb1646a6d5755f05c
Net Worth in USD
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.