Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Showing the last 1 transaction (View Advanced Filter)
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| 0x60806040 | 24504037 | 23 hrs ago | IN | 0 ETH | 0.00005217 |
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
There are no matching entriesUpdate your filters to view other transactions | |||||||||
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Mutation
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: PHUNKY
/** Evolve.sol *
* ░░░░░░░░░░░░░░░░░░░░░░░░░ *
* ░░░░░░░░░░░░░░░░░░░░░░░░░ *
* ░░░░░▓▓▓▓░░░░░░▓▓▓▓░░░░░░ *
* ░░░░░▒▒██░░░░░░▒▒██░░░░░░ *
* ░░░░░░░░░░░░░░░░░░░░░░░░░ *
* ░░░░░░░░░░░░░░░░░░░░░░░░░ *
* ░░░░░░░░░████░░░░░░░░░░░░ *
* ░░░░░░░░░░░░░░░░░░░░░░░░░ *
* ░░░░░░░░░░░░░░░░░░░░░░░░░ *
* ░░░░░░░░░██████░░░░░░░░░░ *
* ░░░░░░░░░░░░░░░░░░░░░░░░░ *
* ░░░░░░░░░░░░░░░░░░░░░░░░░ *
****************************/
/* ========================================
∬ EtherPhunks Evolve ∬
========================================
∬ OG ↔ Quantum ethscription swap ∬
∬ 1:1 by tokenId, single tx ∬
∬ One-time fee on first evolve ∬
====================================== */
pragma solidity 0.8.20;
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
contract Mutation is
Initializable,
PausableUpgradeable,
OwnableUpgradeable,
ReentrancyGuardUpgradeable
{
// ─── Events ────────────────────────────────────────────
event ethscriptions_protocol_TransferEthscriptionForPreviousOwner(
address indexed previousOwner,
address indexed recipient,
bytes32 indexed id
);
event Evolved(
address indexed user,
uint256 indexed pairId,
bytes32 ogHashId,
bytes32 quantumHashId
);
event Devolved(
address indexed user,
uint256 indexed pairId,
bytes32 quantumHashId,
bytes32 ogHashId
);
event PairsRegistered(uint256 startPairId, uint256 count);
// ─── Errors ────────────────────────────────────────────
error InvalidDataLength();
error UnknownEthscription();
error PartnerNotAvailable();
error InsufficientFee();
// ─── State ─────────────────────────────────────────────
uint256 public evolveFee;
uint256 public pairCount;
// Pair storage: pairId → hashIds
mapping(uint256 => bytes32) public ogHashId;
mapping(uint256 => bytes32) public quantumHashId;
// Fee tracking: pairId → has first-evolve fee been paid
mapping(uint256 => bool) public feePaid;
// Reverse lookup: hashId → pairId
mapping(bytes32 => uint256) public pairIdOf;
// hashId → true if this is the OG side of the pair
mapping(bytes32 => bool) public isOg;
// hashId → is this a known registered ethscription
mapping(bytes32 => bool) public registered;
// hashId → address that last sent this ethscription to the contract
mapping(bytes32 => address) public depositor;
// ─── Initializer ──────────────────────────────────────
function initialize(uint256 _evolveFee) public initializer {
__Ownable_init(msg.sender);
__Pausable_init();
__ReentrancyGuard_init();
evolveFee = _evolveFee;
}
// ─── Admin: Register pairs ────────────────────────────
function registerPairs(
bytes32[] calldata _ogHashIds,
bytes32[] calldata _quantumHashIds
) external onlyOwner {
require(_ogHashIds.length == _quantumHashIds.length, "Length mismatch");
uint256 startId = pairCount;
for (uint256 i = 0; i < _ogHashIds.length; i++) {
uint256 pid = pairCount++;
ogHashId[pid] = _ogHashIds[i];
quantumHashId[pid] = _quantumHashIds[i];
pairIdOf[_ogHashIds[i]] = pid;
pairIdOf[_quantumHashIds[i]] = pid;
isOg[_ogHashIds[i]] = true;
registered[_ogHashIds[i]] = true;
registered[_quantumHashIds[i]] = true;
}
emit PairsRegistered(startId, _ogHashIds.length);
}
// ─── Fallback: Receive ethscription & auto-swap ───────
fallback() external payable nonReentrant {
if (msg.data.length == 0 || msg.data.length % 32 != 0) revert InvalidDataLength();
uint256 count = msg.data.length / 32;
// Owner can batch-deposit (pre-load) multiple ethscriptions
if (msg.sender == owner()) {
for (uint256 i = 0; i < count; i++) {
bytes32 hId;
assembly {
hId := calldataload(mul(i, 32))
}
if (!registered[hId]) revert UnknownEthscription();
depositor[hId] = msg.sender;
}
return;
}
// Non-owner: single swap only
if (count != 1) revert InvalidDataLength();
bytes32 hashId;
assembly {
hashId := calldataload(0)
}
if (!registered[hashId]) revert UnknownEthscription();
depositor[hashId] = msg.sender;
require(!paused(), "Pausable: paused");
uint256 pid = pairIdOf[hashId];
if (isOg[hashId]) {
_evolve(msg.sender, pid);
} else {
_devolve(msg.sender, pid);
}
}
receive() external payable {}
// ─── Internal: Evolve (OG → Quantum) ──────────────────
function _evolve(address user, uint256 pid) internal {
bytes32 qHashId = quantumHashId[pid];
address qDepositor = depositor[qHashId];
if (qDepositor == address(0)) revert PartnerNotAvailable();
// Charge fee on first evolve only
if (!feePaid[pid]) {
if (msg.value < evolveFee) revert InsufficientFee();
feePaid[pid] = true;
}
// Transfer quantum ethscription to user
emit ethscriptions_protocol_TransferEthscriptionForPreviousOwner(
qDepositor,
user,
qHashId
);
delete depositor[qHashId];
emit Evolved(user, pid, ogHashId[pid], qHashId);
}
// ─── Internal: Devolve (Quantum → OG) ─────────────────
function _devolve(address user, uint256 pid) internal {
bytes32 oHashId = ogHashId[pid];
address oDepositor = depositor[oHashId];
if (oDepositor == address(0)) revert PartnerNotAvailable();
// Devolve is always free
// Transfer OG ethscription to user
emit ethscriptions_protocol_TransferEthscriptionForPreviousOwner(
oDepositor,
user,
oHashId
);
delete depositor[oHashId];
emit Devolved(user, pid, quantumHashId[pid], oHashId);
}
// ─── Explicit swap (for owner or anyone who deposited via fallback) ─
error NotDepositor();
error NotOg();
error NotQuantum();
function evolve(bytes32 hashId) external payable nonReentrant {
if (!registered[hashId]) revert UnknownEthscription();
if (depositor[hashId] != msg.sender) revert NotDepositor();
require(!paused(), "Pausable: paused");
uint256 pid = pairIdOf[hashId];
if (!isOg[hashId]) revert NotOg();
_evolve(msg.sender, pid);
}
function devolve(bytes32 hashId) external payable nonReentrant {
if (!registered[hashId]) revert UnknownEthscription();
if (depositor[hashId] != msg.sender) revert NotDepositor();
require(!paused(), "Pausable: paused");
uint256 pid = pairIdOf[hashId];
if (isOg[hashId]) revert NotQuantum();
_devolve(msg.sender, pid);
}
// ─── Admin functions ──────────────────────────────────
function setFee(uint256 _fee) external onlyOwner {
evolveFee = _fee;
}
function pause() external onlyOwner {
_pause();
}
function unpause() external onlyOwner {
_unpause();
}
function withdrawETH() external onlyOwner {
(bool ok, ) = payable(owner()).call{value: address(this).balance}("");
require(ok, "Transfer failed");
}
function withdrawEthscription(bytes32 hashId, address to) external onlyOwner {
emit ethscriptions_protocol_TransferEthscriptionForPreviousOwner(
address(this),
to,
hashId
);
delete depositor[hashId];
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol";
import {Initializable} from "../proxy/utils/Initializable.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. 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 OwnableUpgradeable is Initializable, ContextUpgradeable {
/// @custom:storage-location erc7201:openzeppelin.storage.Ownable
struct OwnableStorage {
address _owner;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Ownable")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;
function _getOwnableStorage() private pure returns (OwnableStorage storage $) {
assembly {
$.slot := OwnableStorageLocation
}
}
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
function __Ownable_init(address initialOwner) internal onlyInitializing {
__Ownable_init_unchained(initialOwner);
}
function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
OwnableStorage storage $ = _getOwnableStorage();
return $._owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
OwnableStorage storage $ = _getOwnableStorage();
address oldOwner = $._owner;
$._owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)
pragma solidity ^0.8.20;
/**
* @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 proxied contracts do not make use of 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.
*
* The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
* case an upgrade adds a module that needs to be initialized.
*
* For example:
*
* [.hljs-theme-light.nopadding]
* ```solidity
* contract MyToken is ERC20Upgradeable {
* function initialize() initializer public {
* __ERC20_init("MyToken", "MTK");
* }
* }
*
* contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
* function initializeV2() reinitializer(2) public {
* __ERC20Permit_init("MyToken");
* }
* }
* ```
*
* 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.
*
* [CAUTION]
* ====
* Avoid leaving a contract uninitialized.
*
* An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
* contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
* the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
*
* [.hljs-theme-light.nopadding]
* ```
* /// @custom:oz-upgrades-unsafe-allow constructor
* constructor() {
* _disableInitializers();
* }
* ```
* ====
*/
abstract contract Initializable {
/**
* @dev Storage of the initializable contract.
*
* It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions
* when using with upgradeable contracts.
*
* @custom:storage-location erc7201:openzeppelin.storage.Initializable
*/
struct InitializableStorage {
/**
* @dev Indicates that the contract has been initialized.
*/
uint64 _initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool _initializing;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;
/**
* @dev The contract is already initialized.
*/
error InvalidInitialization();
/**
* @dev The contract is not initializing.
*/
error NotInitializing();
/**
* @dev Triggered when the contract has been initialized or reinitialized.
*/
event Initialized(uint64 version);
/**
* @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
* `onlyInitializing` functions can be used to initialize parent contracts.
*
* Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any
* number of times. This behavior in the constructor can be useful during testing and is not expected to be used in
* production.
*
* Emits an {Initialized} event.
*/
modifier initializer() {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
// Cache values to avoid duplicated sloads
bool isTopLevelCall = !$._initializing;
uint64 initialized = $._initialized;
// Allowed calls:
// - initialSetup: the contract is not in the initializing state and no previous version was
// initialized
// - construction: the contract is initialized at version 1 (no reininitialization) and the
// current contract is just being deployed
bool initialSetup = initialized == 0 && isTopLevelCall;
bool construction = initialized == 1 && address(this).code.length == 0;
if (!initialSetup && !construction) {
revert InvalidInitialization();
}
$._initialized = 1;
if (isTopLevelCall) {
$._initializing = true;
}
_;
if (isTopLevelCall) {
$._initializing = false;
emit Initialized(1);
}
}
/**
* @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
* contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
* used to initialize parent contracts.
*
* A reinitializer may be used after the original initialization step. This is essential to configure modules that
* are added through upgrades and that require initialization.
*
* When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
* cannot be nested. If one is invoked in the context of another, execution will revert.
*
* Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
* a contract, executing them in the right order is up to the developer or operator.
*
* WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.
*
* Emits an {Initialized} event.
*/
modifier reinitializer(uint64 version) {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing || $._initialized >= version) {
revert InvalidInitialization();
}
$._initialized = version;
$._initializing = true;
_;
$._initializing = false;
emit Initialized(version);
}
/**
* @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
* {initializer} and {reinitializer} modifiers, directly or indirectly.
*/
modifier onlyInitializing() {
_checkInitializing();
_;
}
/**
* @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.
*/
function _checkInitializing() internal view virtual {
if (!_isInitializing()) {
revert NotInitializing();
}
}
/**
* @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
* Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
* to any version. It is recommended to use this to lock implementation contracts that are designed to be called
* through proxies.
*
* Emits an {Initialized} event the first time it is successfully executed.
*/
function _disableInitializers() internal virtual {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing) {
revert InvalidInitialization();
}
if ($._initialized != type(uint64).max) {
$._initialized = type(uint64).max;
emit Initialized(type(uint64).max);
}
}
/**
* @dev Returns the highest version that has been initialized. See {reinitializer}.
*/
function _getInitializedVersion() internal view returns (uint64) {
return _getInitializableStorage()._initialized;
}
/**
* @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.
*/
function _isInitializing() internal view returns (bool) {
return _getInitializableStorage()._initializing;
}
/**
* @dev Returns a pointer to the storage namespace.
*/
// solhint-disable-next-line var-name-mixedcase
function _getInitializableStorage() private pure returns (InitializableStorage storage $) {
assembly {
$.slot := INITIALIZABLE_STORAGE
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
import {Initializable} from "../proxy/utils/Initializable.sol";
/**
* @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 ContextUpgradeable is Initializable {
function __Context_init() internal onlyInitializing {
}
function __Context_init_unchained() internal onlyInitializing {
}
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)
pragma solidity ^0.8.20;
import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol";
import {Initializable} from "../proxy/utils/Initializable.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract PausableUpgradeable is Initializable, ContextUpgradeable {
/// @custom:storage-location erc7201:openzeppelin.storage.Pausable
struct PausableStorage {
bool _paused;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Pausable")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant PausableStorageLocation = 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300;
function _getPausableStorage() private pure returns (PausableStorage storage $) {
assembly {
$.slot := PausableStorageLocation
}
}
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
/**
* @dev The operation failed because the contract is paused.
*/
error EnforcedPause();
/**
* @dev The operation failed because the contract is not paused.
*/
error ExpectedPause();
/**
* @dev Initializes the contract in unpaused state.
*/
function __Pausable_init() internal onlyInitializing {
__Pausable_init_unchained();
}
function __Pausable_init_unchained() internal onlyInitializing {
PausableStorage storage $ = _getPausableStorage();
$._paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
PausableStorage storage $ = _getPausableStorage();
return $._paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
if (paused()) {
revert EnforcedPause();
}
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
if (!paused()) {
revert ExpectedPause();
}
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
PausableStorage storage $ = _getPausableStorage();
$._paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
PausableStorage storage $ = _getPausableStorage();
$._paused = false;
emit Unpaused(_msgSender());
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
import {Initializable} from "../proxy/utils/Initializable.sol";
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuardUpgradeable is Initializable {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
/// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard
struct ReentrancyGuardStorage {
uint256 _status;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ReentrancyGuard")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;
function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) {
assembly {
$.slot := ReentrancyGuardStorageLocation
}
}
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
function __ReentrancyGuard_init() internal onlyInitializing {
__ReentrancyGuard_init_unchained();
}
function __ReentrancyGuard_init_unchained() internal onlyInitializing {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
$._status = NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
// On the first call to nonReentrant, _status will be NOT_ENTERED
if ($._status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
$._status = ENTERED;
}
function _nonReentrantAfter() private {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
$._status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
return $._status == ENTERED;
}
}{
"evmVersion": "paris",
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InsufficientFee","type":"error"},{"inputs":[],"name":"InvalidDataLength","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotDepositor","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"NotOg","type":"error"},{"inputs":[],"name":"NotQuantum","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PartnerNotAvailable","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"UnknownEthscription","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"quantumHashId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"ogHashId","type":"bytes32"}],"name":"Devolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"ogHashId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"quantumHashId","type":"bytes32"}],"name":"Evolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startPairId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"PairsRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"ethscriptions_protocol_TransferEthscriptionForPreviousOwner","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"depositor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hashId","type":"bytes32"}],"name":"devolve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hashId","type":"bytes32"}],"name":"evolve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"evolveFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feePaid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_evolveFee","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"isOg","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ogHashId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pairIdOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"quantumHashId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_ogHashIds","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_quantumHashIds","type":"bytes32[]"}],"name":"registerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"registered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hashId","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawEthscription","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561001057600080fd5b5061146e806100206000396000f3fe6080604052600436106101395760003560e01c8063715018a6116100ab578063bf4c1d1e1161006f578063bf4c1d1e1461054c578063d96df6bb14610582578063e086e5ec146105af578063f2fde38b146105c4578063f706bb28146105e4578063fe4b84df1461061157610140565b8063715018a6146104a5578063775d62e7146104ba5780637e78ba70146104ea5780638456cb591461050a5780638da5cb5b1461051f57610140565b80634c029bcd116100fd5780634c029bcd146103ad5780635524d548146103ed5780635c975abb1461041d578063646dc34e1461044257806369fe0e2d1461046f5780636cf2fbe31461048f57610140565b806301baa96814610329578063173fd1db1461033c578063275cc66f146103655780633f4ba83a146103855780634ba2056e1461039a57610140565b3661014057005b610148610631565b36158061015e575061015b60203661122e565b15155b1561017c57604051630dfe930960e41b815260040160405180910390fd5b6000610189602036611242565b9050610193610669565b6001600160a01b0316330361021d5760005b81811015610216576020818102356000818152600790925260409091205460ff166101e657604051600162b5736560e01b0319815260040160405180910390fd5b600090815260086020526040902080546001600160a01b031916331790558061020e81611256565b9150506101a5565b5050610310565b8060011461023e57604051630dfe930960e41b815260040160405180910390fd5b60008035808252600760205260409091205460ff1661027357604051600162b5736560e01b0319815260040160405180910390fd5b600081815260086020526040902080546001600160a01b031916331790556102aa6000805160206113f98339815191525460ff1690565b156102d05760405162461bcd60e51b81526004016102c79061127d565b60405180910390fd5b60008181526005602090815260408083205460069092529091205460ff1615610302576102fd3382610697565b61030c565b61030c33826107e4565b5050505b610327600160008051602061141983398151915255565b005b6103276103373660046112a7565b6108e9565b34801561034857600080fd5b5061035260015481565b6040519081526020015b60405180910390f35b34801561037157600080fd5b5061032761038036600461130c565b6109ea565b34801561039157600080fd5b50610327610c35565b6103276103a83660046112a7565b610c47565b3480156103b957600080fd5b506103dd6103c83660046112a7565b60046020526000908152604090205460ff1681565b604051901515815260200161035c565b3480156103f957600080fd5b506103dd6104083660046112a7565b60076020526000908152604090205460ff1681565b34801561042957600080fd5b506000805160206113f98339815191525460ff166103dd565b34801561044e57600080fd5b5061035261045d3660046112a7565b60056020526000908152604090205481565b34801561047b57600080fd5b5061032761048a3660046112a7565b610d2e565b34801561049b57600080fd5b5061035260005481565b3480156104b157600080fd5b50610327610d3b565b3480156104c657600080fd5b506103dd6104d53660046112a7565b60066020526000908152604090205460ff1681565b3480156104f657600080fd5b50610327610505366004611394565b610d4d565b34801561051657600080fd5b50610327610dac565b34801561052b57600080fd5b50610534610669565b6040516001600160a01b03909116815260200161035c565b34801561055857600080fd5b506105346105673660046112a7565b6008602052600090815260409020546001600160a01b031681565b34801561058e57600080fd5b5061035261059d3660046112a7565b60036020526000908152604090205481565b3480156105bb57600080fd5b50610327610dbc565b3480156105d057600080fd5b506103276105df3660046113c0565b610e60565b3480156105f057600080fd5b506103526105ff3660046112a7565b60026020526000908152604090205481565b34801561061d57600080fd5b5061032761062c3660046112a7565b610e9b565b60008051602061141983398151915280546001190161066357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6000818152600360209081526040808320548084526008909252909120546001600160a01b0316806106dc5760405163907acbd960e01b815260040160405180910390fd5b60008381526004602052604090205460ff1661072e576000543410156107145760405162976f7560e21b815260040160405180910390fd5b6000838152600460205260409020805460ff191660011790555b81846001600160a01b0316826001600160a01b03167ff1d95ed4d1680e6f665104f19c296ae52c1f64cd8114e84d55dc6349dbdafea360405160405180910390a4600082815260086020908152604080832080546001600160a01b0319169055858352600282529182902054825190815290810184905284916001600160a01b038716917fe2cc7655adc2d3d6417c85cc6625ead91e70584a837216cf33d67c9f134d068291015b60405180910390a350505050565b6000818152600260209081526040808320548084526008909252909120546001600160a01b0316806108295760405163907acbd960e01b815260040160405180910390fd5b81846001600160a01b0316826001600160a01b03167ff1d95ed4d1680e6f665104f19c296ae52c1f64cd8114e84d55dc6349dbdafea360405160405180910390a4600082815260086020908152604080832080546001600160a01b0319169055858352600382529182902054825190815290810184905284916001600160a01b038716917f56dfe63fc5336339fe1f543c1194ff5a117fe2f99c4b0fe7630b5a0bcbb9852d91016107d6565b600160008051602061141983398151915255565b6108f1610631565b60008181526007602052604090205460ff1661092357604051600162b5736560e01b0319815260040160405180910390fd5b6000818152600860205260409020546001600160a01b0316331461095a57604051633cc50b4560e01b815260040160405180910390fd5b6000805160206113f98339815191525460ff161561098a5760405162461bcd60e51b81526004016102c79061127d565b60008181526005602090815260408083205460069092529091205460ff166109c55760405163137fee4960e31b815260040160405180910390fd5b6109cf3382610697565b506109e7600160008051602061141983398151915255565b50565b6109f2610fc0565b828114610a335760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064016102c7565b60015460005b84811015610bf4576001805460009182610a5283611256565b919050559050868683818110610a6a57610a6a6113e2565b905060200201356002600083815260200190815260200160002081905550848483818110610a9a57610a9a6113e2565b60008481526003602090815260408220920293909301359055508190600590898986818110610acb57610acb6113e2565b905060200201358152602001908152602001600020819055508060056000878786818110610afb57610afb6113e2565b90506020020135815260200190815260200160002081905550600160066000898986818110610b2c57610b2c6113e2565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000898986818110610b7057610b706113e2565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000878786818110610bb457610bb46113e2565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550508080610bec90611256565b915050610a39565b5060408051828152602081018690527f260949f03012255a3e46a11551602eaaf3dd3416d78f8ab172f2e324a84ffaef910160405180910390a15050505050565b610c3d610fc0565b610c45610ff2565b565b610c4f610631565b60008181526007602052604090205460ff16610c8157604051600162b5736560e01b0319815260040160405180910390fd5b6000818152600860205260409020546001600160a01b03163314610cb857604051633cc50b4560e01b815260040160405180910390fd5b6000805160206113f98339815191525460ff1615610ce85760405162461bcd60e51b81526004016102c79061127d565b60008181526005602090815260408083205460069092529091205460ff1615610d24576040516341f6f50160e01b815260040160405180910390fd5b6109cf33826107e4565b610d36610fc0565b600055565b610d43610fc0565b610c456000611052565b610d55610fc0565b60405182906001600160a01b0383169030907ff1d95ed4d1680e6f665104f19c296ae52c1f64cd8114e84d55dc6349dbdafea390600090a450600090815260086020526040902080546001600160a01b0319169055565b610db4610fc0565b610c456110c3565b610dc4610fc0565b6000610dce610669565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610e18576040519150601f19603f3d011682016040523d82523d6000602084013e610e1d565b606091505b50509050806109e75760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016102c7565b610e68610fc0565b6001600160a01b038116610e9257604051631e4fbdf760e01b8152600060048201526024016102c7565b6109e781611052565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ee15750825b905060008267ffffffffffffffff166001148015610efe5750303b155b905081158015610f0c575080155b15610f2a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f5457845460ff60401b1916600160401b1785555b610f5d3361110c565b610f6561111d565b610f6d61112d565b60008690558315610fb857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b33610fc9610669565b6001600160a01b031614610c455760405163118cdaa760e01b81523360048201526024016102c7565b610ffa61113d565b6000805160206113f9833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6110cb61116d565b6000805160206113f9833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611034565b61111461119e565b6109e7816111e7565b61112561119e565b610c456111ef565b61113561119e565b610c45611210565b6000805160206113f98339815191525460ff16610c4557604051638dfc202b60e01b815260040160405180910390fd5b6000805160206113f98339815191525460ff1615610c455760405163d93c066560e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c4557604051631afcd79f60e31b815260040160405180910390fd5b610e6861119e565b6111f761119e565b6000805160206113f9833981519152805460ff19169055565b6108d561119e565b634e487b7160e01b600052601260045260246000fd5b60008261123d5761123d611218565b500690565b60008261125157611251611218565b500490565b60006001820161127657634e487b7160e01b600052601160045260246000fd5b5060010190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6000602082840312156112b957600080fd5b5035919050565b60008083601f8401126112d257600080fd5b50813567ffffffffffffffff8111156112ea57600080fd5b6020830191508360208260051b850101111561130557600080fd5b9250929050565b6000806000806040858703121561132257600080fd5b843567ffffffffffffffff8082111561133a57600080fd5b611346888389016112c0565b9096509450602087013591508082111561135f57600080fd5b5061136c878288016112c0565b95989497509550505050565b80356001600160a01b038116811461138f57600080fd5b919050565b600080604083850312156113a757600080fd5b823591506113b760208401611378565b90509250929050565b6000602082840312156113d257600080fd5b6113db82611378565b9392505050565b634e487b7160e01b600052603260045260246000fdfecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122034534381eccda46fadd3a390194acb468b76afec8d9b44446d1cfb693d3dce2b64736f6c63430008140033
Deployed Bytecode
0x6080604052600436106101395760003560e01c8063715018a6116100ab578063bf4c1d1e1161006f578063bf4c1d1e1461054c578063d96df6bb14610582578063e086e5ec146105af578063f2fde38b146105c4578063f706bb28146105e4578063fe4b84df1461061157610140565b8063715018a6146104a5578063775d62e7146104ba5780637e78ba70146104ea5780638456cb591461050a5780638da5cb5b1461051f57610140565b80634c029bcd116100fd5780634c029bcd146103ad5780635524d548146103ed5780635c975abb1461041d578063646dc34e1461044257806369fe0e2d1461046f5780636cf2fbe31461048f57610140565b806301baa96814610329578063173fd1db1461033c578063275cc66f146103655780633f4ba83a146103855780634ba2056e1461039a57610140565b3661014057005b610148610631565b36158061015e575061015b60203661122e565b15155b1561017c57604051630dfe930960e41b815260040160405180910390fd5b6000610189602036611242565b9050610193610669565b6001600160a01b0316330361021d5760005b81811015610216576020818102356000818152600790925260409091205460ff166101e657604051600162b5736560e01b0319815260040160405180910390fd5b600090815260086020526040902080546001600160a01b031916331790558061020e81611256565b9150506101a5565b5050610310565b8060011461023e57604051630dfe930960e41b815260040160405180910390fd5b60008035808252600760205260409091205460ff1661027357604051600162b5736560e01b0319815260040160405180910390fd5b600081815260086020526040902080546001600160a01b031916331790556102aa6000805160206113f98339815191525460ff1690565b156102d05760405162461bcd60e51b81526004016102c79061127d565b60405180910390fd5b60008181526005602090815260408083205460069092529091205460ff1615610302576102fd3382610697565b61030c565b61030c33826107e4565b5050505b610327600160008051602061141983398151915255565b005b6103276103373660046112a7565b6108e9565b34801561034857600080fd5b5061035260015481565b6040519081526020015b60405180910390f35b34801561037157600080fd5b5061032761038036600461130c565b6109ea565b34801561039157600080fd5b50610327610c35565b6103276103a83660046112a7565b610c47565b3480156103b957600080fd5b506103dd6103c83660046112a7565b60046020526000908152604090205460ff1681565b604051901515815260200161035c565b3480156103f957600080fd5b506103dd6104083660046112a7565b60076020526000908152604090205460ff1681565b34801561042957600080fd5b506000805160206113f98339815191525460ff166103dd565b34801561044e57600080fd5b5061035261045d3660046112a7565b60056020526000908152604090205481565b34801561047b57600080fd5b5061032761048a3660046112a7565b610d2e565b34801561049b57600080fd5b5061035260005481565b3480156104b157600080fd5b50610327610d3b565b3480156104c657600080fd5b506103dd6104d53660046112a7565b60066020526000908152604090205460ff1681565b3480156104f657600080fd5b50610327610505366004611394565b610d4d565b34801561051657600080fd5b50610327610dac565b34801561052b57600080fd5b50610534610669565b6040516001600160a01b03909116815260200161035c565b34801561055857600080fd5b506105346105673660046112a7565b6008602052600090815260409020546001600160a01b031681565b34801561058e57600080fd5b5061035261059d3660046112a7565b60036020526000908152604090205481565b3480156105bb57600080fd5b50610327610dbc565b3480156105d057600080fd5b506103276105df3660046113c0565b610e60565b3480156105f057600080fd5b506103526105ff3660046112a7565b60026020526000908152604090205481565b34801561061d57600080fd5b5061032761062c3660046112a7565b610e9b565b60008051602061141983398151915280546001190161066357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6000818152600360209081526040808320548084526008909252909120546001600160a01b0316806106dc5760405163907acbd960e01b815260040160405180910390fd5b60008381526004602052604090205460ff1661072e576000543410156107145760405162976f7560e21b815260040160405180910390fd5b6000838152600460205260409020805460ff191660011790555b81846001600160a01b0316826001600160a01b03167ff1d95ed4d1680e6f665104f19c296ae52c1f64cd8114e84d55dc6349dbdafea360405160405180910390a4600082815260086020908152604080832080546001600160a01b0319169055858352600282529182902054825190815290810184905284916001600160a01b038716917fe2cc7655adc2d3d6417c85cc6625ead91e70584a837216cf33d67c9f134d068291015b60405180910390a350505050565b6000818152600260209081526040808320548084526008909252909120546001600160a01b0316806108295760405163907acbd960e01b815260040160405180910390fd5b81846001600160a01b0316826001600160a01b03167ff1d95ed4d1680e6f665104f19c296ae52c1f64cd8114e84d55dc6349dbdafea360405160405180910390a4600082815260086020908152604080832080546001600160a01b0319169055858352600382529182902054825190815290810184905284916001600160a01b038716917f56dfe63fc5336339fe1f543c1194ff5a117fe2f99c4b0fe7630b5a0bcbb9852d91016107d6565b600160008051602061141983398151915255565b6108f1610631565b60008181526007602052604090205460ff1661092357604051600162b5736560e01b0319815260040160405180910390fd5b6000818152600860205260409020546001600160a01b0316331461095a57604051633cc50b4560e01b815260040160405180910390fd5b6000805160206113f98339815191525460ff161561098a5760405162461bcd60e51b81526004016102c79061127d565b60008181526005602090815260408083205460069092529091205460ff166109c55760405163137fee4960e31b815260040160405180910390fd5b6109cf3382610697565b506109e7600160008051602061141983398151915255565b50565b6109f2610fc0565b828114610a335760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064016102c7565b60015460005b84811015610bf4576001805460009182610a5283611256565b919050559050868683818110610a6a57610a6a6113e2565b905060200201356002600083815260200190815260200160002081905550848483818110610a9a57610a9a6113e2565b60008481526003602090815260408220920293909301359055508190600590898986818110610acb57610acb6113e2565b905060200201358152602001908152602001600020819055508060056000878786818110610afb57610afb6113e2565b90506020020135815260200190815260200160002081905550600160066000898986818110610b2c57610b2c6113e2565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000898986818110610b7057610b706113e2565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000878786818110610bb457610bb46113e2565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550508080610bec90611256565b915050610a39565b5060408051828152602081018690527f260949f03012255a3e46a11551602eaaf3dd3416d78f8ab172f2e324a84ffaef910160405180910390a15050505050565b610c3d610fc0565b610c45610ff2565b565b610c4f610631565b60008181526007602052604090205460ff16610c8157604051600162b5736560e01b0319815260040160405180910390fd5b6000818152600860205260409020546001600160a01b03163314610cb857604051633cc50b4560e01b815260040160405180910390fd5b6000805160206113f98339815191525460ff1615610ce85760405162461bcd60e51b81526004016102c79061127d565b60008181526005602090815260408083205460069092529091205460ff1615610d24576040516341f6f50160e01b815260040160405180910390fd5b6109cf33826107e4565b610d36610fc0565b600055565b610d43610fc0565b610c456000611052565b610d55610fc0565b60405182906001600160a01b0383169030907ff1d95ed4d1680e6f665104f19c296ae52c1f64cd8114e84d55dc6349dbdafea390600090a450600090815260086020526040902080546001600160a01b0319169055565b610db4610fc0565b610c456110c3565b610dc4610fc0565b6000610dce610669565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610e18576040519150601f19603f3d011682016040523d82523d6000602084013e610e1d565b606091505b50509050806109e75760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016102c7565b610e68610fc0565b6001600160a01b038116610e9257604051631e4fbdf760e01b8152600060048201526024016102c7565b6109e781611052565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ee15750825b905060008267ffffffffffffffff166001148015610efe5750303b155b905081158015610f0c575080155b15610f2a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f5457845460ff60401b1916600160401b1785555b610f5d3361110c565b610f6561111d565b610f6d61112d565b60008690558315610fb857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b33610fc9610669565b6001600160a01b031614610c455760405163118cdaa760e01b81523360048201526024016102c7565b610ffa61113d565b6000805160206113f9833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6110cb61116d565b6000805160206113f9833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611034565b61111461119e565b6109e7816111e7565b61112561119e565b610c456111ef565b61113561119e565b610c45611210565b6000805160206113f98339815191525460ff16610c4557604051638dfc202b60e01b815260040160405180910390fd5b6000805160206113f98339815191525460ff1615610c455760405163d93c066560e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c4557604051631afcd79f60e31b815260040160405180910390fd5b610e6861119e565b6111f761119e565b6000805160206113f9833981519152805460ff19169055565b6108d561119e565b634e487b7160e01b600052601260045260246000fd5b60008261123d5761123d611218565b500690565b60008261125157611251611218565b500490565b60006001820161127657634e487b7160e01b600052601160045260246000fd5b5060010190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6000602082840312156112b957600080fd5b5035919050565b60008083601f8401126112d257600080fd5b50813567ffffffffffffffff8111156112ea57600080fd5b6020830191508360208260051b850101111561130557600080fd5b9250929050565b6000806000806040858703121561132257600080fd5b843567ffffffffffffffff8082111561133a57600080fd5b611346888389016112c0565b9096509450602087013591508082111561135f57600080fd5b5061136c878288016112c0565b95989497509550505050565b80356001600160a01b038116811461138f57600080fd5b919050565b600080604083850312156113a757600080fd5b823591506113b760208401611378565b90509250929050565b6000602082840312156113d257600080fd5b6113db82611378565b9392505050565b634e487b7160e01b600052603260045260246000fdfecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122034534381eccda46fadd3a390194acb468b76afec8d9b44446d1cfb693d3dce2b64736f6c63430008140033
Deployed Bytecode Sourcemap
1742:7912:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3251:21:4;:19;:21::i;:::-;5213:8:5::1;:20:::0;;:49:::1;;-1:-1:-1::0;5237:20:5::1;5255:2;5237:8;:20;:::i;:::-;:25:::0;::::1;5213:49;5209:81;;;5271:19;;-1:-1:-1::0;;;5271:19:5::1;;;;;;;;;;;5209:81;5303:13;5319:20;5337:2;5319:8;:20;:::i;:::-;5303:36;;5440:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;5426:21:5::1;:10;:21:::0;5422:371:::1;;5469:9;5464:297;5488:5;5484:1;:9;5464:297;;;5608:2;5601:10:::0;;::::1;5588:24;5519:11;5654:15:::0;;;:10:::1;:15:::0;;;;;;;;::::1;;5649:50;;5678:21;;-1:-1:-1::0;;;;;;5678:21:5::1;;;;;;;;;;;5649:50;5718:14;::::0;;;:9:::1;:14;::::0;;;;:27;;-1:-1:-1;;;;;;5718:27:5::1;5735:10;5718:27;::::0;;5495:3;::::1;::::0;::::1;:::i;:::-;;;;5464:297;;;;5775:7;;;5422:371;5849:5;5858:1;5849:10;5845:42;;5868:19;;-1:-1:-1::0;;;5868:19:5::1;;;;;;;;;;;5845:42;5900:14;5959:15:::0;::::1;6002:18:::0;;;:10:::1;:18;::::0;;;;;;::::1;;5997:53;;6029:21;;-1:-1:-1::0;;;;;;6029:21:5::1;;;;;;;;;;;5997:53;6061:17;::::0;;;:9:::1;:17;::::0;;;;:30;;-1:-1:-1;;;;;;6061:30:5::1;6081:10;6061:30;::::0;;6113:8:::1;-1:-1:-1::0;;;;;;;;;;;2821:9:3;;;;2692:145;6113:8:5::1;6112:9;6104:38;;;;-1:-1:-1::0;;;6104:38:5::1;;;;;;;:::i;:::-;;;;;;;;;6155:11;6169:16:::0;;;:8:::1;:16;::::0;;;;;;;;6202:4:::1;:12:::0;;;;;;;::::1;;6198:127;;;6231:24;6239:10;6251:3;6231:7;:24::i;:::-;6198:127;;;6288:25;6297:10;6309:3;6288:8;:25::i;:::-;5198:1134;;;3282:1:4;3293:20:::0;1805:1;-1:-1:-1;;;;;;;;;;;3969:23:4;3716:283;3293:20;1742:7912:5;8049:376;;;;;;:::i;:::-;;:::i;3076:24::-;;;;;;;;;;;;;;;;;;;1301:25:6;;;1289:2;1274:18;3076:24:5;;;;;;;;4288:776;;;;;;;;;;-1:-1:-1;4288:776:5;;;;;:::i;:::-;;:::i;9125:67::-;;;;;;;;;;;;;:::i;8433:382::-;;;;;;:::i;:::-;;:::i;3321:39::-;;;;;;;;;;-1:-1:-1;3321:39:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2837:14:6;;2830:22;2812:41;;2800:2;2785:18;3321:39:5;2672:187:6;3626:42:5;;;;;;;;;;-1:-1:-1;3626:42:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;2692:145:3;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;2821:9:3;;;2692:145;;3411:43:5;;;;;;;;;;-1:-1:-1;3411:43:5;;;;;:::i;:::-;;;;;;;;;;;;;;8962:84;;;;;;;;;;-1:-1:-1;8962:84:5;;;;;:::i;:::-;;:::i;3045:24::-;;;;;;;;;;;;;;;;3155:101:0;;;;;;;;;;;;;:::i;3522:36:5:-;;;;;;;;;;-1:-1:-1;3522:36:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;9379:272;;;;;;;;;;-1:-1:-1;9379:272:5;;;;;:::i;:::-;;:::i;9054:63::-;;;;;;;;;;;;;:::i;2441:144:0:-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;3465:32:6;;;3447:51;;3435:2;3420:18;2441:144:0;3301:203:6;3753:44:5;;;;;;;;;;-1:-1:-1;3753:44:5;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3753:44:5;;;3200:48;;;;;;;;;;-1:-1:-1;3200:48:5;;;;;:::i;:::-;;;;;;;;;;;;;;9200:171;;;;;;;;;;;;;:::i;3405:215:0:-;;;;;;;;;;-1:-1:-1;3405:215:0;;;;;:::i;:::-;;:::i;3150:43:5:-;;;;;;;;;;-1:-1:-1;3150:43:5;;;;;:::i;:::-;;;;;;;;;;;;;;3953:200;;;;;;;;;;-1:-1:-1;3953:200:5;;;;;:::i;:::-;;:::i;3326:384:4:-;-1:-1:-1;;;;;;;;;;;3526:9:4;;-1:-1:-1;;3526:20:4;3522:88;;3569:30;;-1:-1:-1;;;3569:30:4;;;;;;;;;;;3522:88;1847:1;3684:19;;3326:384::o;2441:144:0:-;1313:22;2570:8;-1:-1:-1;;;;;2570:8:0;;2441:144::o;6486:716:5:-;6550:15;6568:18;;;:13;:18;;;;;;;;;6618;;;:9;:18;;;;;;;-1:-1:-1;;;;;6618:18:5;;6649:58;;6686:21;;-1:-1:-1;;;6686:21:5;;;;;;;;;;;6649:58;6769:12;;;;:7;:12;;;;;;;;6764:131;;6814:9;;6802;:21;6798:51;;;6832:17;;-1:-1:-1;;;6832:17:5;;;;;;;;;;;6798:51;6864:12;;;;:7;:12;;;;;:19;;-1:-1:-1;;6864:19:5;6879:4;6864:19;;;6764:131;7080:7;7061:4;-1:-1:-1;;;;;6962:136:5;7036:10;-1:-1:-1;;;;;6962:136:5;;;;;;;;;;;7116:18;;;;:9;:18;;;;;;;;7109:25;;-1:-1:-1;;;;;;7109:25:5;;;7171:13;;;:8;:13;;;;;;;7152:42;;4056:25:6;;;4097:18;;;4090:34;;;7171:13:5;;-1:-1:-1;;;;;7152:42:5;;;;;4029:18:6;7152:42:5;;;;;;;;6539:663;;6486:716;;:::o;7317:563::-;7382:15;7400:13;;;:8;:13;;;;;;;;;7445:18;;;:9;:18;;;;;;;-1:-1:-1;;;;;7445:18:5;;7476:58;;7513:21;;-1:-1:-1;;;7513:21:5;;;;;;;;;;;7476:58;7752:7;7733:4;-1:-1:-1;;;;;7634:136:5;7708:10;-1:-1:-1;;;;;7634:136:5;;;;;;;;;;;7788:18;;;;:9;:18;;;;;;;;7781:25;;-1:-1:-1;;;;;;7781:25:5;;;7844:18;;;:13;:18;;;;;;;7824:48;;4056:25:6;;;4097:18;;;4090:34;;;7844:18:5;;-1:-1:-1;;;;;7824:48:5;;;;;4029:18:6;7824:48:5;3882:248:6;3716:283:4;1805:1;-1:-1:-1;;;;;;;;;;;3969:23:4;3716:283::o;8049:376:5:-;3251:21:4;:19;:21::i;:::-;8127:18:5::1;::::0;;;:10:::1;:18;::::0;;;;;::::1;;8122:53;;8154:21;;-1:-1:-1::0;;;;;;8154:21:5::1;;;;;;;;;;;8122:53;8190:17;::::0;;;:9:::1;:17;::::0;;;;;-1:-1:-1;;;;;8190:17:5::1;8211:10;8190:31;8186:58;;8230:14;;-1:-1:-1::0;;;8230:14:5::1;;;;;;;;;;;8186:58;-1:-1:-1::0;;;;;;;;;;;2821:9:3;;;8263::5::1;8255:38;;;;-1:-1:-1::0;;;8255:38:5::1;;;;;;;:::i;:::-;8306:11;8320:16:::0;;;:8:::1;:16;::::0;;;;;;;;8352:4:::1;:12:::0;;;;;;;::::1;;8347:33;;8373:7;;-1:-1:-1::0;;;8373:7:5::1;;;;;;;;;;;8347:33;8393:24;8401:10;8413:3;8393:7;:24::i;:::-;8111:314;3293:20:4::0;1805:1;-1:-1:-1;;;;;;;;;;;3969:23:4;3716:283;3293:20;8049:376:5;:::o;4288:776::-;2334:13:0;:11;:13::i;:::-;4441:43:5;;::::1;4433:71;;;::::0;-1:-1:-1;;;4433:71:5;;4337:2:6;4433:71:5::1;::::0;::::1;4319:21:6::0;4376:2;4356:18;;;4349:30;-1:-1:-1;;;4395:18:6;;;4388:45;4450:18;;4433:71:5::1;4135:339:6::0;4433:71:5::1;4535:9;::::0;4517:15:::1;4557:439;4577:21:::0;;::::1;4557:439;;;4634:9;:11:::0;;4620::::1;::::0;;4634::::1;::::0;::::1;:::i;:::-;;;;;4620:25;;4678:10;;4689:1;4678:13;;;;;;;:::i;:::-;;;;;;;4662:8;:13;4671:3;4662:13;;;;;;;;;;;:29;;;;4727:15;;4743:1;4727:18;;;;;;;:::i;:::-;4706;::::0;;;:13:::1;4727:18;4706::::0;;;;;;4727;::::1;::::0;;;::::1;;4706:39:::0;;-1:-1:-1;4720:3:5;;4762:8:::1;::::0;4771:10;;4782:1;4771:13;;::::1;;;;;:::i;:::-;;;;;;;4762:23;;;;;;;;;;;:29;;;;4837:3;4806:8;:28;4815:15;;4831:1;4815:18;;;;;;;:::i;:::-;;;;;;;4806:28;;;;;;;;;;;:34;;;;4879:4;4857;:19;4862:10;;4873:1;4862:13;;;;;;;:::i;:::-;;;;;;;4857:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;4928:4;4900:10;:25;4911:10;;4922:1;4911:13;;;;;;;:::i;:::-;;;;;;;4900:25;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;4980:4;4947:10;:30;4958:15;;4974:1;4958:18;;;;;;;:::i;:::-;;;;;;;4947:30;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4605:391;4600:3;;;;;:::i;:::-;;;;4557:439;;;-1:-1:-1::0;5013:43:5::1;::::0;;4056:25:6;;;4112:2;4097:18;;4090:34;;;5013:43:5::1;::::0;4029:18:6;5013:43:5::1;;;;;;;4422:642;4288:776:::0;;;;:::o;9125:67::-;2334:13:0;:11;:13::i;:::-;9174:10:5::1;:8;:10::i;:::-;9125:67::o:0;8433:382::-;3251:21:4;:19;:21::i;:::-;8512:18:5::1;::::0;;;:10:::1;:18;::::0;;;;;::::1;;8507:53;;8539:21;;-1:-1:-1::0;;;;;;8539:21:5::1;;;;;;;;;;;8507:53;8575:17;::::0;;;:9:::1;:17;::::0;;;;;-1:-1:-1;;;;;8575:17:5::1;8596:10;8575:31;8571:58;;8615:14;;-1:-1:-1::0;;;8615:14:5::1;;;;;;;;;;;8571:58;-1:-1:-1::0;;;;;;;;;;;2821:9:3;;;8648::5::1;8640:38;;;;-1:-1:-1::0;;;8640:38:5::1;;;;;;;:::i;:::-;8691:11;8705:16:::0;;;:8:::1;:16;::::0;;;;;;;;8736:4:::1;:12:::0;;;;;;;::::1;;8732:37;;;8757:12;;-1:-1:-1::0;;;8757:12:5::1;;;;;;;;;;;8732:37;8782:25;8791:10;8803:3;8782:8;:25::i;8962:84::-:0;2334:13:0;:11;:13::i;:::-;9022:9:5::1;:16:::0;8962:84::o;3155:101:0:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;9379:272:5:-:0;2334:13:0;:11;:13::i;:::-;9472:136:5::1;::::0;9591:6;;-1:-1:-1;;;;;9472:136:5;::::1;::::0;9554:4:::1;::::0;9472:136:::1;::::0;;;::::1;-1:-1:-1::0;9626:17:5::1;::::0;;;:9:::1;:17;::::0;;;;9619:24;;-1:-1:-1;;;;;;9619:24:5::1;::::0;;9379:272::o;9054:63::-;2334:13:0;:11;:13::i;:::-;9101:8:5::1;:6;:8::i;9200:171::-:0;2334:13:0;:11;:13::i;:::-;9254:7:5::1;9275;:5;:7::i;:::-;-1:-1:-1::0;;;;;9267:21:5::1;9296;9267:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9253:69;;;9341:2;9333:30;;;::::0;-1:-1:-1;;;9333:30:5;;5276:2:6;9333:30:5::1;::::0;::::1;5258:21:6::0;5315:2;5295:18;;;5288:30;-1:-1:-1;;;5334:18:6;;;5327:45;5389:18;;9333:30:5::1;5074:339:6::0;3405:215:0;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:0;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:0;;3562:1:::1;3534:31;::::0;::::1;3447:51:6::0;3420:18;;3534:31:0::1;3301:203:6::0;3485:91:0::1;3585:28;3604:8;3585:18;:28::i;3953:200:5:-:0;8870:21:1;4302:15;;-1:-1:-1;;;4302:15:1;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:1;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:1;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:1;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:1;-1:-1:-1;;;5013:22:1;;;4979:67;4023:26:5::1;4038:10;4023:14;:26::i;:::-;4060:17;:15;:17::i;:::-;4088:24;:22;:24::i;:::-;4123:9;:22:::0;;;5066:101:1;;;;5100:23;;-1:-1:-1;;;;5100:23:1;;;5142:14;;-1:-1:-1;5571:50:6;;5142:14:1;;5559:2:6;5544:18;5142:14:1;;;;;;;5066:101;4092:1081;;;;;3953:200:5;:::o;2658:162:0:-;966:10:2;2717:7:0;:5;:7::i;:::-;-1:-1:-1;;;;;2717:23:0;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:0;;966:10:2;2763:40:0;;;3447:51:6;3420:18;;2763:40:0;3301:203:6;3674:178:3;2563:16;:14;:16::i;:::-;-1:-1:-1;;;;;;;;;;;3791:17:3;;-1:-1:-1;;3791:17:3::1;::::0;;3823:22:::1;966:10:2::0;3832:12:3::1;3823:22;::::0;-1:-1:-1;;;;;3465:32:6;;;3447:51;;3435:2;3420:18;3823:22:3::1;;;;;;;3722:130;3674:178::o:0;3774:248:0:-;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:0;;-1:-1:-1;;;;;3941:19:0;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;3366:176:3:-;2316:19;:17;:19::i;:::-;-1:-1:-1;;;;;;;;;;;3484:16:3;;-1:-1:-1;;3484:16:3::1;3496:4;3484:16;::::0;;3515:20:::1;966:10:2::0;3522:12:3::1;887:96:2::0;1847:127:0;6931:20:1;:18;:20::i;:::-;1929:38:0::1;1954:12;1929:24;:38::i;1836:97:3:-:0;6931:20:1;:18;:20::i;:::-;1899:27:3::1;:25;:27::i;2540:111:4:-:0;6931:20:1;:18;:20::i;:::-;2610:34:4::1;:32;:34::i;3105:126:3:-:0;-1:-1:-1;;;;;;;;;;;2821:9:3;;;3163:62;;3199:15;;-1:-1:-1;;;3199:15:3;;;;;;;;;;;2905:128;-1:-1:-1;;;;;;;;;;;2821:9:3;;;2966:61;;;3001:15;;-1:-1:-1;;;3001:15:3;;;;;;;;;;;7084:141:1;8870:21;8560:40;-1:-1:-1;;;8560:40:1;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:1;;;;;;;;;;;1980:235:0;6931:20:1;:18;:20::i;1939:156:3:-;6931:20:1;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;2071:17:3;;-1:-1:-1;;2071:17:3::1;::::0;;1939:156::o;2657:183:4:-;6931:20:1;:18;:20::i;14:127:6:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:112;178:1;204;194:35;;209:18;;:::i;:::-;-1:-1:-1;243:9:6;;146:112::o;263:120::-;303:1;329;319:35;;334:18;;:::i;:::-;-1:-1:-1;368:9:6;;263:120::o;388:232::-;427:3;448:17;;;445:140;;507:10;502:3;498:20;495:1;488:31;542:4;539:1;532:15;570:4;567:1;560:15;445:140;-1:-1:-1;612:1:6;601:13;;388:232::o;625:340::-;827:2;809:21;;;866:2;846:18;;;839:30;-1:-1:-1;;;900:2:6;885:18;;878:46;956:2;941:18;;625:340::o;970:180::-;1029:6;1082:2;1070:9;1061:7;1057:23;1053:32;1050:52;;;1098:1;1095;1088:12;1050:52;-1:-1:-1;1121:23:6;;970:180;-1:-1:-1;970:180:6:o;1337:367::-;1400:8;1410:6;1464:3;1457:4;1449:6;1445:17;1441:27;1431:55;;1482:1;1479;1472:12;1431:55;-1:-1:-1;1505:20:6;;1548:18;1537:30;;1534:50;;;1580:1;1577;1570:12;1534:50;1617:4;1609:6;1605:17;1593:29;;1677:3;1670:4;1660:6;1657:1;1653:14;1645:6;1641:27;1637:38;1634:47;1631:67;;;1694:1;1691;1684:12;1631:67;1337:367;;;;;:::o;1709:773::-;1831:6;1839;1847;1855;1908:2;1896:9;1887:7;1883:23;1879:32;1876:52;;;1924:1;1921;1914:12;1876:52;1964:9;1951:23;1993:18;2034:2;2026:6;2023:14;2020:34;;;2050:1;2047;2040:12;2020:34;2089:70;2151:7;2142:6;2131:9;2127:22;2089:70;:::i;:::-;2178:8;;-1:-1:-1;2063:96:6;-1:-1:-1;2266:2:6;2251:18;;2238:32;;-1:-1:-1;2282:16:6;;;2279:36;;;2311:1;2308;2301:12;2279:36;;2350:72;2414:7;2403:8;2392:9;2388:24;2350:72;:::i;:::-;1709:773;;;;-1:-1:-1;2441:8:6;-1:-1:-1;;;;1709:773:6:o;2864:173::-;2932:20;;-1:-1:-1;;;;;2981:31:6;;2971:42;;2961:70;;3027:1;3024;3017:12;2961:70;2864:173;;;:::o;3042:254::-;3110:6;3118;3171:2;3159:9;3150:7;3146:23;3142:32;3139:52;;;3187:1;3184;3177:12;3139:52;3223:9;3210:23;3200:33;;3252:38;3286:2;3275:9;3271:18;3252:38;:::i;:::-;3242:48;;3042:254;;;;;:::o;3691:186::-;3750:6;3803:2;3791:9;3782:7;3778:23;3774:32;3771:52;;;3819:1;3816;3809:12;3771:52;3842:29;3861:9;3842:29;:::i;:::-;3832:39;3691:186;-1:-1:-1;;;3691:186:6:o;4479:127::-;4540:10;4535:3;4531:20;4528:1;4521:31;4571:4;4568:1;4561:15;4595:4;4592:1;4585:15
Swarm Source
ipfs://34534381eccda46fadd3a390194acb468b76afec8d9b44446d1cfb693d3dce2b
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.