Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 1,572 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632423 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632346 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632346 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632346 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632346 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632346 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632346 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632346 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632346 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632346 | 1563 days ago | IN | 0 ETH | 0.01044208 | ||||
| Create Proxy | 13632346 | 1563 days ago | IN | 0 ETH | 0.01044208 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
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
Contract ABI
API[{"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
0x608060405234801561001057600080fd5b50600436106100575760003560e01c80630c870f911461005c57806361b69abd1461007a578063715018a6146100965780638da5cb5b146100a0578063f2fde38b146100be575b600080fd5b6100646100da565b6040516100719190610744565b60405180910390f35b610094600480360381019061008f9190610637565b6100fe565b005b61009e61023b565b005b6100a86102c3565b6040516100b59190610744565b60405180910390f35b6100d860048036038101906100d3919061060a565b6102ec565b005b7f00000000000000000000000011519a077116b20dedc99d2920b4fd2202d6365481565b6101066103e4565b73ffffffffffffffffffffffffffffffffffffffff166101246102c3565b73ffffffffffffffffffffffffffffffffffffffff161461017a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610171906107cf565b60405180910390fd5b60006101a57f00000000000000000000000011519a077116b20dedc99d2920b4fd2202d636546103ec565b90508073ffffffffffffffffffffffffffffffffffffffff1663d1f5789484846040518363ffffffff1660e01b81526004016101e292919061075f565b600060405180830381600087803b1580156101fc57600080fd5b505af1158015610210573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1660405160405180910390a1505050565b6102436103e4565b73ffffffffffffffffffffffffffffffffffffffff166102616102c3565b73ffffffffffffffffffffffffffffffffffffffff16146102b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ae906107cf565b60405180910390fd5b6102c160006104c1565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6102f46103e4565b73ffffffffffffffffffffffffffffffffffffffff166103126102c3565b73ffffffffffffffffffffffffffffffffffffffff1614610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035f906107cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156103d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103cf9061078f565b60405180910390fd5b6103e1816104c1565b50565b600033905090565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f0915050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156104bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b3906107af565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061059861059384610814565b6107ef565b9050828152602081018484840111156105b4576105b361094b565b5b6105bf8482856108a4565b509392505050565b6000813590506105d681610a0c565b92915050565b600082601f8301126105f1576105f0610946565b5b8135610601848260208601610585565b91505092915050565b6000602082840312156106205761061f610955565b5b600061062e848285016105c7565b91505092915050565b6000806040838503121561064e5761064d610955565b5b600061065c858286016105c7565b925050602083013567ffffffffffffffff81111561067d5761067c610950565b5b610689858286016105dc565b9150509250929050565b61069c81610872565b82525050565b60006106ad82610845565b6106b78185610850565b93506106c78185602086016108b3565b6106d08161095a565b840191505092915050565b60006106e8602683610861565b91506106f38261096b565b604082019050919050565b600061070b601683610861565b9150610716826109ba565b602082019050919050565b600061072e602083610861565b9150610739826109e3565b602082019050919050565b60006020820190506107596000830184610693565b92915050565b60006040820190506107746000830185610693565b818103602083015261078681846106a2565b90509392505050565b600060208201905081810360008301526107a8816106db565b9050919050565b600060208201905081810360008301526107c8816106fe565b9050919050565b600060208201905081810360008301526107e881610721565b9050919050565b60006107f961080a565b905061080582826108e6565b919050565b6000604051905090565b600067ffffffffffffffff82111561082f5761082e610917565b5b6108388261095a565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061087d82610884565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156108d15780820151818401526020810190506108b6565b838111156108e0576000848401525b50505050565b6108ef8261095a565b810181811067ffffffffffffffff8211171561090e5761090d610917565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313136373a20637265617465206661696c656400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b610a1581610872565b8114610a2057600080fd5b5056fea2646970667358221220174d7d36dc81fe3fa1f0a3410b58d15261f322c3479a9e5b0110dbf349e2476b64736f6c63430008060033
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
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.