Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,621 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13628003 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 | ||||
Create Proxy | 13627986 | 1175 days ago | IN | 0 ETH | 0.01044208 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
CloneFactory
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-29 */ /** *Submitted for verification at polygonscan.com on 2021-09-28 */ /** *Submitted for verification at Etherscan.io on 2021-09-15 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Library for reading and writing primitive types to specific storage slots. * * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. * This library helps with reading and writing to such slots without the need for inline assembly. * * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. * * Example usage to set ERC1967 implementation slot: * ``` * contract ERC1967 { * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; * * function _getImplementation() internal view returns (address) { * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; * } * * function _setImplementation(address newImplementation) internal { * require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; * } * } * ``` * * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._ */ library StorageSlot { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } /** * @dev Returns an `AddressSlot` with member `value` located at `slot`. */ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { assembly { r.slot := slot } } /** * @dev Returns an `BooleanSlot` with member `value` located at `slot`. */ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { assembly { r.slot := slot } } /** * @dev Returns an `Bytes32Slot` with member `value` located at `slot`. */ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { assembly { r.slot := slot } } /** * @dev Returns an `Uint256Slot` with member `value` located at `slot`. */ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { assembly { r.slot := slot } } } /** * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. * * _Available since v3.4._ */ library Clones { /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create opcode, which should never revert. */ function clone(address implementation) internal returns (address instance) { assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create(0, ptr, 0x37) } require(instance != address(0), "ERC1167: create failed"); } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `implementation` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create2(0, ptr, 0x37, salt) } require(instance != address(0), "ERC1167: create2 failed"); } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt, address deployer ) internal pure returns (address predicted) { assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000) mstore(add(ptr, 0x38), shl(0x60, deployer)) mstore(add(ptr, 0x4c), salt) mstore(add(ptr, 0x6c), keccak256(ptr, 0x37)) predicted := keccak256(add(ptr, 0x37), 0x55) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress(address implementation, bytes32 salt) internal view returns (address predicted) { return predictDeterministicAddress(implementation, salt, address(this)); } } /** * @dev This is the interface that {BeaconProxy} expects of its beacon. */ interface IBeacon { /** * @dev Must return an address that can be used as a delegate call target. * * {BeaconProxy} will check that this address is a contract. */ function implementation() external view returns (address); } /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to * be specified by overriding the virtual {_implementation} function. * * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a * different contract through the {_delegate} function. * * The success and return data of the delegated call will be returned back to the caller of the proxy. */ abstract contract Proxy { /** * @dev Delegates the current call to `implementation`. * * This function does not return to its internall call site, it will return directly to the external caller. */ function _delegate(address implementation) internal virtual { assembly { // Copy msg.data. We take full control of memory in this inline assembly // block because it will not return to Solidity code. We overwrite the // Solidity scratch pad at memory position 0. calldatacopy(0, 0, calldatasize()) // Call the implementation. // out and outsize are 0 because we don't know the size yet. let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) // Copy the returned data. returndatacopy(0, 0, returndatasize()) switch result // delegatecall returns 0 on error. case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } /** * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function * and {_fallback} should delegate. */ function _implementation() internal view virtual returns (address); /** * @dev Delegates the current call to the address returned by `_implementation()`. * * This function does not return to its internall call site, it will return directly to the external caller. */ function _fallback() internal virtual { _beforeFallback(); _delegate(_implementation()); } /** * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other * function in the contract matches the call data. */ fallback() external payable virtual { _fallback(); } /** * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data * is empty. */ receive() external payable virtual { _fallback(); } /** * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback` * call, or as part of the Solidity `fallback` or `receive` functions. * * If overriden should call `super._beforeFallback()`. */ function _beforeFallback() internal virtual {} } /** * @dev This abstract contract provides getters and event emitting update functions for * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. * * _Available since v4.1._ * * @custom:oz-upgrades-unsafe-allow delegatecall */ abstract contract ERC1967Upgrade { // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1 bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143; /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /** * @dev Emitted when the implementation is upgraded. */ event Upgraded(address indexed implementation); /** * @dev Returns the current implementation address. */ function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } /** * @dev Stores a new address in the EIP1967 implementation slot. */ function _setImplementation(address newImplementation) private { require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } /** * @dev Perform implementation upgrade * * Emits an {Upgraded} event. */ function _upgradeTo(address newImplementation) internal { _setImplementation(newImplementation); emit Upgraded(newImplementation); } /** * @dev Perform implementation upgrade with additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCall( address newImplementation, bytes memory data, bool forceCall ) internal { _upgradeTo(newImplementation); if (data.length > 0 || forceCall) { Address.functionDelegateCall(newImplementation, data); } } /** * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCallSecure( address newImplementation, bytes memory data, bool forceCall ) internal { address oldImplementation = _getImplementation(); // Initial upgrade and setup call _setImplementation(newImplementation); if (data.length > 0 || forceCall) { Address.functionDelegateCall(newImplementation, data); } // Perform rollback test if not already in progress StorageSlot.BooleanSlot storage rollbackTesting = StorageSlot.getBooleanSlot(_ROLLBACK_SLOT); if (!rollbackTesting.value) { // Trigger rollback using upgradeTo from the new implementation rollbackTesting.value = true; Address.functionDelegateCall( newImplementation, abi.encodeWithSignature("upgradeTo(address)", oldImplementation) ); rollbackTesting.value = false; // Check rollback was effective require(oldImplementation == _getImplementation(), "ERC1967Upgrade: upgrade breaks further upgrades"); // Finally reset to the new implementation and log the upgrade _upgradeTo(newImplementation); } } /** * @dev Storage slot with the admin of the contract. * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /** * @dev Emitted when the admin account has changed. */ event AdminChanged(address previousAdmin, address newAdmin); /** * @dev Returns the current admin. */ function _getAdmin() internal view returns (address) { return StorageSlot.getAddressSlot(_ADMIN_SLOT).value; } /** * @dev Stores a new address in the EIP1967 admin slot. */ function _setAdmin(address newAdmin) private { require(newAdmin != address(0), "ERC1967: new admin is the zero address"); StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin; } /** * @dev Changes the admin of the proxy. * * Emits an {AdminChanged} event. */ function _changeAdmin(address newAdmin) internal { emit AdminChanged(_getAdmin(), newAdmin); _setAdmin(newAdmin); } /** * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor. */ bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; /** * @dev Emitted when the beacon is upgraded. */ event BeaconUpgraded(address indexed beacon); /** * @dev Returns the current beacon. */ function _getBeacon() internal view returns (address) { return StorageSlot.getAddressSlot(_BEACON_SLOT).value; } /** * @dev Stores a new beacon in the EIP1967 beacon slot. */ function _setBeacon(address newBeacon) private { require(Address.isContract(newBeacon), "ERC1967: new beacon is not a contract"); require( Address.isContract(IBeacon(newBeacon).implementation()), "ERC1967: beacon implementation is not a contract" ); StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon; } /** * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that). * * Emits a {BeaconUpgraded} event. */ function _upgradeBeaconToAndCall( address newBeacon, bytes memory data, bool forceCall ) internal { _setBeacon(newBeacon); emit BeaconUpgraded(newBeacon); if (data.length > 0 || forceCall) { Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data); } } } /** * @title Telcoin, LLC. * @dev Implements Openzeppelin Audited Contracts * * @notice This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}. * * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't * conflict with the storage layout of the implementation behind the proxy. * * _Available since v3.4._ */ contract CloneableProxy is Proxy, ERC1967Upgrade, Initializable { /** * @dev Initializes the proxy with `beacon`. * * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity * constructor. * * Requirements: * * - `beacon` must be a contract with the interface {IBeacon}. */ function initialize(address beacon, bytes memory data) external payable initializer() { assert(_BEACON_SLOT == bytes32(uint256(keccak256("eip1967.proxy.beacon")) - 1)); _upgradeBeaconToAndCall(beacon, data, false); } /** * @dev Returns the current beacon address. */ function _beacon() internal view virtual returns (address) { return _getBeacon(); } /** * @dev Returns the current implementation address of the associated beacon. */ function _implementation() internal view virtual override returns (address) { return IBeacon(_getBeacon()).implementation(); } /** * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}. * * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. * * Requirements: * * - `beacon` must be a contract. * - The implementation returned by `beacon` must be a contract. */ function _setBeacon(address beacon, bytes memory data) internal virtual { _upgradeBeaconToAndCall(beacon, data, false); } } /** * @title Telcoin, LLC. * @dev Implements Openzeppelin Audited Contracts * * @notice Contract is designed to make duplicates of a proxy contract * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract CloneFactory is Ownable { //event emits new contract address event Deployed(address indexed proxyAddress) anonymous; //immutable template for cloning address public immutable proxyImplementation; /** * @notice The creating address becomes the owner * @dev Creates the base clonable template */ constructor() Ownable() { proxyImplementation = address(new CloneableProxy()); } /** * @notice Clones an existing proxy and initializes the contract * @param beacon is the address of the beacon to the logic contract * @param data is the initialization data of the logic contract * Can only be called by the current owner. * * Emits a {Deployed} event. */ function createProxy(address beacon, bytes memory data) external onlyOwner() { address payable clone = payable(Clones.clone(proxyImplementation)); CloneableProxy(clone).initialize(beacon, data); emit Deployed(clone); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"}],"name":"Deployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"beacon","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"createProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b5061002d61002261009160201b60201c565b61009960201b60201c565b6040516100399061015d565b604051809103906000f080158015610055573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505061016a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610d6f80610be783390190565b60805160601c610a5961018e6000396000818160dc01526101810152610a596000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630c870f911461005c57806361b69abd1461007a578063715018a6146100965780638da5cb5b146100a0578063f2fde38b146100be575b600080fd5b6100646100da565b6040516100719190610744565b60405180910390f35b610094600480360381019061008f9190610637565b6100fe565b005b61009e61023b565b005b6100a86102c3565b6040516100b59190610744565b60405180910390f35b6100d860048036038101906100d3919061060a565b6102ec565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b6101066103e4565b73ffffffffffffffffffffffffffffffffffffffff166101246102c3565b73ffffffffffffffffffffffffffffffffffffffff161461017a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610171906107cf565b60405180910390fd5b60006101a57f00000000000000000000000000000000000000000000000000000000000000006103ec565b90508073ffffffffffffffffffffffffffffffffffffffff1663d1f5789484846040518363ffffffff1660e01b81526004016101e292919061075f565b600060405180830381600087803b1580156101fc57600080fd5b505af1158015610210573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1660405160405180910390a1505050565b6102436103e4565b73ffffffffffffffffffffffffffffffffffffffff166102616102c3565b73ffffffffffffffffffffffffffffffffffffffff16146102b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ae906107cf565b60405180910390fd5b6102c160006104c1565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6102f46103e4565b73ffffffffffffffffffffffffffffffffffffffff166103126102c3565b73ffffffffffffffffffffffffffffffffffffffff1614610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035f906107cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156103d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103cf9061078f565b60405180910390fd5b6103e1816104c1565b50565b600033905090565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f0915050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156104bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b3906107af565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061059861059384610814565b6107ef565b9050828152602081018484840111156105b4576105b361094b565b5b6105bf8482856108a4565b509392505050565b6000813590506105d681610a0c565b92915050565b600082601f8301126105f1576105f0610946565b5b8135610601848260208601610585565b91505092915050565b6000602082840312156106205761061f610955565b5b600061062e848285016105c7565b91505092915050565b6000806040838503121561064e5761064d610955565b5b600061065c858286016105c7565b925050602083013567ffffffffffffffff81111561067d5761067c610950565b5b610689858286016105dc565b9150509250929050565b61069c81610872565b82525050565b60006106ad82610845565b6106b78185610850565b93506106c78185602086016108b3565b6106d08161095a565b840191505092915050565b60006106e8602683610861565b91506106f38261096b565b604082019050919050565b600061070b601683610861565b9150610716826109ba565b602082019050919050565b600061072e602083610861565b9150610739826109e3565b602082019050919050565b60006020820190506107596000830184610693565b92915050565b60006040820190506107746000830185610693565b818103602083015261078681846106a2565b90509392505050565b600060208201905081810360008301526107a8816106db565b9050919050565b600060208201905081810360008301526107c8816106fe565b9050919050565b600060208201905081810360008301526107e881610721565b9050919050565b60006107f961080a565b905061080582826108e6565b919050565b6000604051905090565b600067ffffffffffffffff82111561082f5761082e610917565b5b6108388261095a565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061087d82610884565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156108d15780820151818401526020810190506108b6565b838111156108e0576000848401525b50505050565b6108ef8261095a565b810181811067ffffffffffffffff8211171561090e5761090d610917565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313136373a20637265617465206661696c656400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b610a1581610872565b8114610a2057600080fd5b5056fea2646970667358221220174d7d36dc81fe3fa1f0a3410b58d15261f322c3479a9e5b0110dbf349e2476b64736f6c63430008060033608060405234801561001057600080fd5b50610d4f806100206000396000f3fe6080604052600436106100225760003560e01c8063d1f578941461003b57610031565b366100315761002f610057565b005b610039610057565b005b61005560048036038101906100509190610777565b610071565b005b61005f6101bd565b61006f61006a6101bf565b61024b565b565b600060019054906101000a900460ff1680610097575060008054906101000a900460ff16155b6100d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100cd90610902565b60405180910390fd5b60008060019054906101000a900460ff161590508015610126576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b60017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5160001c6101569190610a0a565b60001b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b1461018b5761018a610aed565b5b61019783836000610271565b80156101b85760008060016101000a81548160ff0219169083151502179055505b505050565b565b60006101c961035d565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561020e57600080fd5b505afa158015610222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610246919061074a565b905090565b3660008037600080366000845af43d6000803e806000811461026c573d6000f35b3d6000fd5b61027a836103b4565b8273ffffffffffffffffffffffffffffffffffffffff167f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e60405160405180910390a26000825111806102ca5750805b15610358576103568373ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561031857600080fd5b505afa15801561032c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610350919061074a565b83610532565b505b505050565b600061038b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b61055f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103bd81610569565b6103fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f390610922565b60405180910390fd5b6104828173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561044557600080fd5b505afa158015610459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047d919061074a565b610569565b6104c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b890610962565b60405180910390fd5b806104ee7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b61055f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606105578383604051806060016040528060278152602001610cf36027913961057c565b905092915050565b6000819050919050565b600080823b905060008111915050919050565b606061058784610569565b6105c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bd90610942565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105ee91906108c9565b600060405180830381855af49150503d8060008114610629576040519150601f19603f3d011682016040523d82523d6000602084013e61062e565b606091505b509150915061063e828286610649565b925050509392505050565b60608315610659578290506106a9565b60008351111561066c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a091906108e0565b60405180910390fd5b9392505050565b60006106c36106be846109a7565b610982565b9050828152602081018484840111156106df576106de610b7f565b5b6106ea848285610a7a565b509392505050565b60008135905061070181610cdb565b92915050565b60008151905061071681610cdb565b92915050565b600082601f83011261073157610730610b7a565b5b81356107418482602086016106b0565b91505092915050565b6000602082840312156107605761075f610b89565b5b600061076e84828501610707565b91505092915050565b6000806040838503121561078e5761078d610b89565b5b600061079c858286016106f2565b925050602083013567ffffffffffffffff8111156107bd576107bc610b84565b5b6107c98582860161071c565b9150509250929050565b60006107de826109d8565b6107e881856109ee565b93506107f8818560208601610a89565b80840191505092915050565b600061080f826109e3565b61081981856109f9565b9350610829818560208601610a89565b61083281610b8e565b840191505092915050565b600061084a602e836109f9565b915061085582610b9f565b604082019050919050565b600061086d6025836109f9565b915061087882610bee565b604082019050919050565b60006108906026836109f9565b915061089b82610c3d565b604082019050919050565b60006108b36030836109f9565b91506108be82610c8c565b604082019050919050565b60006108d582846107d3565b915081905092915050565b600060208201905081810360008301526108fa8184610804565b905092915050565b6000602082019050818103600083015261091b8161083d565b9050919050565b6000602082019050818103600083015261093b81610860565b9050919050565b6000602082019050818103600083015261095b81610883565b9050919050565b6000602082019050818103600083015261097b816108a6565b9050919050565b600061098c61099d565b90506109988282610abc565b919050565b6000604051905090565b600067ffffffffffffffff8211156109c2576109c1610b4b565b5b6109cb82610b8e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000610a1582610a70565b9150610a2083610a70565b925082821015610a3357610a32610b1c565b5b828203905092915050565b6000610a4982610a50565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610aa7578082015181840152602081019050610a8c565b83811115610ab6576000848401525b50505050565b610ac582610b8e565b810181811067ffffffffffffffff82111715610ae457610ae3610b4b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b7f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960008201527f73206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b610ce481610a3e565b8114610cef57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207f65d73803df9f9a181dfc6643c8970160137a91633f1cc796eaa787308e508864736f6c63430008060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100575760003560e01c80630c870f911461005c57806361b69abd1461007a578063715018a6146100965780638da5cb5b146100a0578063f2fde38b146100be575b600080fd5b6100646100da565b6040516100719190610744565b60405180910390f35b610094600480360381019061008f9190610637565b6100fe565b005b61009e61023b565b005b6100a86102c3565b6040516100b59190610744565b60405180910390f35b6100d860048036038101906100d3919061060a565b6102ec565b005b7f000000000000000000000000ab4604386dcfff398f0ad560d656539731365cdd81565b6101066103e4565b73ffffffffffffffffffffffffffffffffffffffff166101246102c3565b73ffffffffffffffffffffffffffffffffffffffff161461017a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610171906107cf565b60405180910390fd5b60006101a57f000000000000000000000000ab4604386dcfff398f0ad560d656539731365cdd6103ec565b90508073ffffffffffffffffffffffffffffffffffffffff1663d1f5789484846040518363ffffffff1660e01b81526004016101e292919061075f565b600060405180830381600087803b1580156101fc57600080fd5b505af1158015610210573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1660405160405180910390a1505050565b6102436103e4565b73ffffffffffffffffffffffffffffffffffffffff166102616102c3565b73ffffffffffffffffffffffffffffffffffffffff16146102b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ae906107cf565b60405180910390fd5b6102c160006104c1565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6102f46103e4565b73ffffffffffffffffffffffffffffffffffffffff166103126102c3565b73ffffffffffffffffffffffffffffffffffffffff1614610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035f906107cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156103d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103cf9061078f565b60405180910390fd5b6103e1816104c1565b50565b600033905090565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f0915050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156104bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b3906107af565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061059861059384610814565b6107ef565b9050828152602081018484840111156105b4576105b361094b565b5b6105bf8482856108a4565b509392505050565b6000813590506105d681610a0c565b92915050565b600082601f8301126105f1576105f0610946565b5b8135610601848260208601610585565b91505092915050565b6000602082840312156106205761061f610955565b5b600061062e848285016105c7565b91505092915050565b6000806040838503121561064e5761064d610955565b5b600061065c858286016105c7565b925050602083013567ffffffffffffffff81111561067d5761067c610950565b5b610689858286016105dc565b9150509250929050565b61069c81610872565b82525050565b60006106ad82610845565b6106b78185610850565b93506106c78185602086016108b3565b6106d08161095a565b840191505092915050565b60006106e8602683610861565b91506106f38261096b565b604082019050919050565b600061070b601683610861565b9150610716826109ba565b602082019050919050565b600061072e602083610861565b9150610739826109e3565b602082019050919050565b60006020820190506107596000830184610693565b92915050565b60006040820190506107746000830185610693565b818103602083015261078681846106a2565b90509392505050565b600060208201905081810360008301526107a8816106db565b9050919050565b600060208201905081810360008301526107c8816106fe565b9050919050565b600060208201905081810360008301526107e881610721565b9050919050565b60006107f961080a565b905061080582826108e6565b919050565b6000604051905090565b600067ffffffffffffffff82111561082f5761082e610917565b5b6108388261095a565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061087d82610884565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156108d15780820151818401526020810190506108b6565b838111156108e0576000848401525b50505050565b6108ef8261095a565b810181811067ffffffffffffffff8211171561090e5761090d610917565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313136373a20637265617465206661696c656400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b610a1581610872565b8114610a2057600080fd5b5056fea2646970667358221220174d7d36dc81fe3fa1f0a3410b58d15261f322c3479a9e5b0110dbf349e2476b64736f6c63430008060033
Deployed Bytecode Sourcemap
31520:973:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31691:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32254:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18368:94;;;:::i;:::-;;17717:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18617:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31691:44;;;:::o;32254:236::-;17948:12;:10;:12::i;:::-;17937:23;;:7;:5;:7::i;:::-;:23;;;17929:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32338:21:::1;32370:33;32383:19;32370:12;:33::i;:::-;32338:66;;32426:5;32411:32;;;32444:6;32452:4;32411:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32478:5;32469:15;;;;;;;;;;;32331:159;32254:236:::0;;:::o;18368:94::-;17948:12;:10;:12::i;:::-;17937:23;;:7;:5;:7::i;:::-;:23;;;17929:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18433:21:::1;18451:1;18433:9;:21::i;:::-;18368:94::o:0;17717:87::-;17763:7;17790:6;;;;;;;;;;;17783:13;;17717:87;:::o;18617:192::-;17948:12;:10;:12::i;:::-;17937:23;;:7;:5;:7::i;:::-;:23;;;17929:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18726:1:::1;18706:22;;:8;:22;;;;18698:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18782:19;18792:8;18782:9;:19::i;:::-;18617:192:::0;:::o;16593:98::-;16646:7;16673:10;16666:17;;16593:98;:::o;11319:524::-;11376:16;11446:4;11440:11;11477:66;11472:3;11465:79;11591:14;11585:4;11581:25;11574:4;11569:3;11565:14;11558:49;11644:66;11637:4;11632:3;11628:14;11621:90;11752:4;11747:3;11744:1;11737:20;11725:32;;11414:354;11806:1;11786:22;;:8;:22;;;;11778:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11319:524;;;:::o;18817:173::-;18873:16;18892:6;;;;;;;;;;;18873:25;;18918:8;18909:6;;:17;;;;;;;;;;;;;;;;;;18973:8;18942:40;;18963:8;18942:40;;;;;;;;;;;;18862:128;18817:173;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;475:87;;;;:::o;581:338::-;636:5;685:3;678:4;670:6;666:17;662:27;652:2;;693:79;;:::i;:::-;652:2;810:6;797:20;835:78;909:3;901:6;894:4;886:6;882:17;835:78;:::i;:::-;826:87;;642:277;;;;;:::o;925:329::-;984:6;1033:2;1021:9;1012:7;1008:23;1004:32;1001:2;;;1039:79;;:::i;:::-;1001:2;1159:1;1184:53;1229:7;1220:6;1209:9;1205:22;1184:53;:::i;:::-;1174:63;;1130:117;991:263;;;;:::o;1260:652::-;1337:6;1345;1394:2;1382:9;1373:7;1369:23;1365:32;1362:2;;;1400:79;;:::i;:::-;1362:2;1520:1;1545:53;1590:7;1581:6;1570:9;1566:22;1545:53;:::i;:::-;1535:63;;1491:117;1675:2;1664:9;1660:18;1647:32;1706:18;1698:6;1695:30;1692:2;;;1728:79;;:::i;:::-;1692:2;1833:62;1887:7;1878:6;1867:9;1863:22;1833:62;:::i;:::-;1823:72;;1618:287;1352:560;;;;;:::o;1918:118::-;2005:24;2023:5;2005:24;:::i;:::-;2000:3;1993:37;1983:53;;:::o;2042:360::-;2128:3;2156:38;2188:5;2156:38;:::i;:::-;2210:70;2273:6;2268:3;2210:70;:::i;:::-;2203:77;;2289:52;2334:6;2329:3;2322:4;2315:5;2311:16;2289:52;:::i;:::-;2366:29;2388:6;2366:29;:::i;:::-;2361:3;2357:39;2350:46;;2132:270;;;;;:::o;2408:366::-;2550:3;2571:67;2635:2;2630:3;2571:67;:::i;:::-;2564:74;;2647:93;2736:3;2647:93;:::i;:::-;2765:2;2760:3;2756:12;2749:19;;2554:220;;;:::o;2780:366::-;2922:3;2943:67;3007:2;3002:3;2943:67;:::i;:::-;2936:74;;3019:93;3108:3;3019:93;:::i;:::-;3137:2;3132:3;3128:12;3121:19;;2926:220;;;:::o;3152:366::-;3294:3;3315:67;3379:2;3374:3;3315:67;:::i;:::-;3308:74;;3391:93;3480:3;3391:93;:::i;:::-;3509:2;3504:3;3500:12;3493:19;;3298:220;;;:::o;3524:222::-;3617:4;3655:2;3644:9;3640:18;3632:26;;3668:71;3736:1;3725:9;3721:17;3712:6;3668:71;:::i;:::-;3622:124;;;;:::o;3752:419::-;3891:4;3929:2;3918:9;3914:18;3906:26;;3942:71;4010:1;3999:9;3995:17;3986:6;3942:71;:::i;:::-;4060:9;4054:4;4050:20;4045:2;4034:9;4030:18;4023:48;4088:76;4159:4;4150:6;4088:76;:::i;:::-;4080:84;;3896:275;;;;;:::o;4177:419::-;4343:4;4381:2;4370:9;4366:18;4358:26;;4430:9;4424:4;4420:20;4416:1;4405:9;4401:17;4394:47;4458:131;4584:4;4458:131;:::i;:::-;4450:139;;4348:248;;;:::o;4602:419::-;4768:4;4806:2;4795:9;4791:18;4783:26;;4855:9;4849:4;4845:20;4841:1;4830:9;4826:17;4819:47;4883:131;5009:4;4883:131;:::i;:::-;4875:139;;4773:248;;;:::o;5027:419::-;5193:4;5231:2;5220:9;5216:18;5208:26;;5280:9;5274:4;5270:20;5266:1;5255:9;5251:17;5244:47;5308:131;5434:4;5308:131;:::i;:::-;5300:139;;5198:248;;;:::o;5452:129::-;5486:6;5513:20;;:::i;:::-;5503:30;;5542:33;5570:4;5562:6;5542:33;:::i;:::-;5493:88;;;:::o;5587:75::-;5620:6;5653:2;5647:9;5637:19;;5627:35;:::o;5668:307::-;5729:4;5819:18;5811:6;5808:30;5805:2;;;5841:18;;:::i;:::-;5805:2;5879:29;5901:6;5879:29;:::i;:::-;5871:37;;5963:4;5957;5953:15;5945:23;;5734:241;;;:::o;5981:98::-;6032:6;6066:5;6060:12;6050:22;;6039:40;;;:::o;6085:168::-;6168:11;6202:6;6197:3;6190:19;6242:4;6237:3;6233:14;6218:29;;6180:73;;;;:::o;6259:169::-;6343:11;6377:6;6372:3;6365:19;6417:4;6412:3;6408:14;6393:29;;6355:73;;;;:::o;6434:96::-;6471:7;6500:24;6518:5;6500:24;:::i;:::-;6489:35;;6479:51;;;:::o;6536:126::-;6573:7;6613:42;6606:5;6602:54;6591:65;;6581:81;;;:::o;6668:154::-;6752:6;6747:3;6742;6729:30;6814:1;6805:6;6800:3;6796:16;6789:27;6719:103;;;:::o;6828:307::-;6896:1;6906:113;6920:6;6917:1;6914:13;6906:113;;;7005:1;7000:3;6996:11;6990:18;6986:1;6981:3;6977:11;6970:39;6942:2;6939:1;6935:10;6930:15;;6906:113;;;7037:6;7034:1;7031:13;7028:2;;;7117:1;7108:6;7103:3;7099:16;7092:27;7028:2;6877:258;;;;:::o;7141:281::-;7224:27;7246:4;7224:27;:::i;:::-;7216:6;7212:40;7354:6;7342:10;7339:22;7318:18;7306:10;7303:34;7300:62;7297:2;;;7365:18;;:::i;:::-;7297:2;7405:10;7401:2;7394:22;7184:238;;;:::o;7428:180::-;7476:77;7473:1;7466:88;7573:4;7570:1;7563:15;7597:4;7594:1;7587:15;7614:117;7723:1;7720;7713:12;7737:117;7846:1;7843;7836:12;7860:117;7969:1;7966;7959:12;7983:117;8092:1;8089;8082:12;8106:102;8147:6;8198:2;8194:7;8189:2;8182:5;8178:14;8174:28;8164:38;;8154:54;;;:::o;8214:225::-;8354:34;8350:1;8342:6;8338:14;8331:58;8423:8;8418:2;8410:6;8406:15;8399:33;8320:119;:::o;8445:172::-;8585:24;8581:1;8573:6;8569:14;8562:48;8551:66;:::o;8623:182::-;8763:34;8759:1;8751:6;8747:14;8740:58;8729:76;:::o;8811:122::-;8884:24;8902:5;8884:24;:::i;:::-;8877:5;8874:35;8864:2;;8923:1;8920;8913:12;8864:2;8854:79;:::o
Swarm Source
ipfs://7f65d73803df9f9a181dfc6643c8970160137a91633f1cc796eaa787308e5088
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.