Source Code
Overview
ETH Balance
ETH Value
$0.00| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 28290638 | 48 mins ago | 0.000015 ETH | ||||
| 28289730 | 1 hr ago | 0.000015 ETH | ||||
| 28289640 | 1 hr ago | 0.000015 ETH | ||||
| 28289142 | 1 hr ago | 0.000015 ETH | ||||
| 28287019 | 3 hrs ago | 0.000015 ETH | ||||
| 28280638 | 7 hrs ago | 0.000015 ETH | ||||
| 28278106 | 8 hrs ago | 0.000015 ETH | ||||
| 28277242 | 9 hrs ago | 0.000015 ETH | ||||
| 28276818 | 9 hrs ago | 0.000015 ETH | ||||
| 28276577 | 9 hrs ago | 0.000015 ETH | ||||
| 28274907 | 10 hrs ago | 0.000015 ETH | ||||
| 28261380 | 19 hrs ago | 0.000015 ETH | ||||
| 28258368 | 21 hrs ago | 0.000015 ETH | ||||
| 28256602 | 22 hrs ago | 0.000015 ETH | ||||
| 28253984 | 23 hrs ago | 0.000015 ETH | ||||
| 28253309 | 24 hrs ago | 0.000015 ETH | ||||
| 28251165 | 25 hrs ago | 0.000015 ETH | ||||
| 28245127 | 29 hrs ago | 0.000015 ETH | ||||
| 28244491 | 30 hrs ago | 0.000015 ETH | ||||
| 28242065 | 31 hrs ago | 0.000015 ETH | ||||
| 28240172 | 32 hrs ago | 0.000015 ETH | ||||
| 28239466 | 33 hrs ago | 0.000015 ETH | ||||
| 28238904 | 33 hrs ago | 0.000015 ETH | ||||
| 28233060 | 37 hrs ago | 0.000015 ETH | ||||
| 28225372 | 42 hrs ago | 0.000015 ETH |
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:
Dmailmail
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at lineascan.build/ on 2025-02-24 */ /** *Submitted for verification at BscScan.com on 2025-02-17 */ // File: @openzeppelin/[email protected]/proxy/utils/Initializable.sol // 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 } } } // File: @openzeppelin/[email protected]/utils/ContextUpgradeable.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } } // File: @openzeppelin/[email protected]/access/OwnableUpgradeable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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); } } // File: @openzeppelin/[email protected]/utils/PausableUpgradeable.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; /** * @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()); } } // File: @openzeppelin/contracts/interfaces/draft-IERC1822.sol // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC1822.sol) pragma solidity ^0.8.20; /** * @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified * proxy whose upgrades are fully controlled by the current implementation. */ interface IERC1822Proxiable { /** * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation * address. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. */ function proxiableUUID() external view returns (bytes32); } // File: @openzeppelin/contracts/proxy/beacon/IBeacon.sol // OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol) pragma solidity ^0.8.20; /** * @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. * * {UpgradeableBeacon} will check that this address is a contract. */ function implementation() external view returns (address); } // File: @openzeppelin/contracts/interfaces/IERC1967.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol) pragma solidity ^0.8.20; /** * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC. */ interface IERC1967 { /** * @dev Emitted when the implementation is upgraded. */ event Upgraded(address indexed implementation); /** * @dev Emitted when the admin account has changed. */ event AdminChanged(address previousAdmin, address newAdmin); /** * @dev Emitted when the beacon is changed. */ event BeaconUpgraded(address indexed beacon); } // File: @openzeppelin/contracts/utils/Errors.sol // OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol) pragma solidity ^0.8.20; /** * @dev Collection of common custom errors used in multiple contracts * * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. * It is recommended to avoid relying on the error API for critical functionality. * * _Available since v5.1._ */ library Errors { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error InsufficientBalance(uint256 balance, uint256 needed); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedCall(); /** * @dev The deployment failed. */ error FailedDeployment(); /** * @dev A necessary precompile is missing. */ error MissingPrecompile(address); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v5.2.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert Errors.InsufficientBalance(address(this).balance, amount); } (bool success, bytes memory returndata) = recipient.call{value: amount}(""); if (!success) { _revert(returndata); } } /** * @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 or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {Errors.FailedCall} error. * * 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. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @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`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert Errors.InsufficientBalance(address(this).balance, value); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case * of an unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {Errors.FailedCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}. */ function _revert(bytes memory returndata) private pure { // 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 ("memory-safe") { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert Errors.FailedCall(); } } } // File: @openzeppelin/contracts/utils/StorageSlot.sol // OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol) // This file was procedurally generated from scripts/generate/templates/StorageSlot.js. pragma solidity ^0.8.20; /** * @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 ERC-1967 implementation slot: * ```solidity * contract ERC1967 { * // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; * * function _getImplementation() internal view returns (address) { * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; * } * * function _setImplementation(address newImplementation) internal { * require(newImplementation.code.length > 0); * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; * } * } * ``` * * TIP: Consider using this library along with {SlotDerivation}. */ library StorageSlot { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } struct Int256Slot { int256 value; } struct StringSlot { string value; } struct BytesSlot { bytes value; } /** * @dev Returns an `AddressSlot` with member `value` located at `slot`. */ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { assembly ("memory-safe") { r.slot := slot } } /** * @dev Returns a `BooleanSlot` with member `value` located at `slot`. */ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { assembly ("memory-safe") { r.slot := slot } } /** * @dev Returns a `Bytes32Slot` with member `value` located at `slot`. */ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { assembly ("memory-safe") { r.slot := slot } } /** * @dev Returns a `Uint256Slot` with member `value` located at `slot`. */ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { assembly ("memory-safe") { r.slot := slot } } /** * @dev Returns a `Int256Slot` with member `value` located at `slot`. */ function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) { assembly ("memory-safe") { r.slot := slot } } /** * @dev Returns a `StringSlot` with member `value` located at `slot`. */ function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) { assembly ("memory-safe") { r.slot := slot } } /** * @dev Returns an `StringSlot` representation of the string storage pointer `store`. */ function getStringSlot(string storage store) internal pure returns (StringSlot storage r) { assembly ("memory-safe") { r.slot := store.slot } } /** * @dev Returns a `BytesSlot` with member `value` located at `slot`. */ function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) { assembly ("memory-safe") { r.slot := slot } } /** * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`. */ function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) { assembly ("memory-safe") { r.slot := store.slot } } } // File: @openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol // OpenZeppelin Contracts (last updated v5.2.0) (proxy/ERC1967/ERC1967Utils.sol) pragma solidity ^0.8.22; /** * @dev This library provides getters and event emitting update functions for * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots. */ library ERC1967Utils { /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1. */ // solhint-disable-next-line private-vars-leading-underscore bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /** * @dev The `implementation` of the proxy is invalid. */ error ERC1967InvalidImplementation(address implementation); /** * @dev The `admin` of the proxy is invalid. */ error ERC1967InvalidAdmin(address admin); /** * @dev The `beacon` of the proxy is invalid. */ error ERC1967InvalidBeacon(address beacon); /** * @dev An upgrade function sees `msg.value > 0` that may be lost. */ error ERC1967NonPayable(); /** * @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 ERC-1967 implementation slot. */ function _setImplementation(address newImplementation) private { if (newImplementation.code.length == 0) { revert ERC1967InvalidImplementation(newImplementation); } StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation; } /** * @dev Performs implementation upgrade with additional setup call if data is nonempty. * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected * to avoid stuck value in the contract. * * Emits an {IERC1967-Upgraded} event. */ function upgradeToAndCall(address newImplementation, bytes memory data) internal { _setImplementation(newImplementation); emit IERC1967.Upgraded(newImplementation); if (data.length > 0) { Address.functionDelegateCall(newImplementation, data); } else { _checkNonPayable(); } } /** * @dev Storage slot with the admin of the contract. * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1. */ // solhint-disable-next-line private-vars-leading-underscore bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /** * @dev Returns the current admin. * * TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103` */ function getAdmin() internal view returns (address) { return StorageSlot.getAddressSlot(ADMIN_SLOT).value; } /** * @dev Stores a new address in the ERC-1967 admin slot. */ function _setAdmin(address newAdmin) private { if (newAdmin == address(0)) { revert ERC1967InvalidAdmin(address(0)); } StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin; } /** * @dev Changes the admin of the proxy. * * Emits an {IERC1967-AdminChanged} event. */ function changeAdmin(address newAdmin) internal { emit IERC1967.AdminChanged(getAdmin(), newAdmin); _setAdmin(newAdmin); } /** * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. * This is the keccak-256 hash of "eip1967.proxy.beacon" subtracted by 1. */ // solhint-disable-next-line private-vars-leading-underscore bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; /** * @dev Returns the current beacon. */ function getBeacon() internal view returns (address) { return StorageSlot.getAddressSlot(BEACON_SLOT).value; } /** * @dev Stores a new beacon in the ERC-1967 beacon slot. */ function _setBeacon(address newBeacon) private { if (newBeacon.code.length == 0) { revert ERC1967InvalidBeacon(newBeacon); } StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon; address beaconImplementation = IBeacon(newBeacon).implementation(); if (beaconImplementation.code.length == 0) { revert ERC1967InvalidImplementation(beaconImplementation); } } /** * @dev Change the beacon and trigger a setup call if data is nonempty. * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected * to avoid stuck value in the contract. * * Emits an {IERC1967-BeaconUpgraded} event. * * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for * efficiency. */ function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal { _setBeacon(newBeacon); emit IERC1967.BeaconUpgraded(newBeacon); if (data.length > 0) { Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data); } else { _checkNonPayable(); } } /** * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract * if an upgrade doesn't perform an initialization call. */ function _checkNonPayable() private { if (msg.value > 0) { revert ERC1967NonPayable(); } } } // File: @openzeppelin/[email protected]/proxy/utils/UUPSUpgradeable.sol // OpenZeppelin Contracts (last updated v5.2.0) (proxy/utils/UUPSUpgradeable.sol) pragma solidity ^0.8.22; /** * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. * * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing * `UUPSUpgradeable` with a custom implementation of upgrades. * * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. */ abstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable { /// @custom:oz-upgrades-unsafe-allow state-variable-immutable address private immutable __self = address(this); /** * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)` * and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called, * while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string. * If the getter returns `"5.0.0"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must * be the empty byte string if no function should be called, making it impossible to invoke the `receive` function * during an upgrade. */ string public constant UPGRADE_INTERFACE_VERSION = "5.0.0"; /** * @dev The call is from an unauthorized context. */ error UUPSUnauthorizedCallContext(); /** * @dev The storage `slot` is unsupported as a UUID. */ error UUPSUnsupportedProxiableUUID(bytes32 slot); /** * @dev Check that the execution is being performed through a delegatecall call and that the execution context is * a proxy contract with an implementation (as defined in ERC-1967) pointing to self. This should only be the case * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a * function through ERC-1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to * fail. */ modifier onlyProxy() { _checkProxy(); _; } /** * @dev Check that the execution is not being performed through a delegate call. This allows a function to be * callable on the implementing contract but not through proxies. */ modifier notDelegated() { _checkNotDelegated(); _; } function __UUPSUpgradeable_init() internal onlyInitializing { } function __UUPSUpgradeable_init_unchained() internal onlyInitializing { } /** * @dev Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the * implementation. It is used to validate the implementation's compatibility when performing an upgrade. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier. */ function proxiableUUID() external view virtual notDelegated returns (bytes32) { return ERC1967Utils.IMPLEMENTATION_SLOT; } /** * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call * encoded in `data`. * * Calls {_authorizeUpgrade}. * * Emits an {Upgraded} event. * * @custom:oz-upgrades-unsafe-allow-reachable delegatecall */ function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, data); } /** * @dev Reverts if the execution is not performed via delegatecall or the execution * context is not of a proxy with an ERC-1967 compliant implementation pointing to self. * See {_onlyProxy}. */ function _checkProxy() internal view virtual { if ( address(this) == __self || // Must be called through delegatecall ERC1967Utils.getImplementation() != __self // Must be called through an active proxy ) { revert UUPSUnauthorizedCallContext(); } } /** * @dev Reverts if the execution is performed via delegatecall. * See {notDelegated}. */ function _checkNotDelegated() internal view virtual { if (address(this) != __self) { // Must not be called through delegatecall revert UUPSUnauthorizedCallContext(); } } /** * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by * {upgradeToAndCall}. * * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}. * * ```solidity * function _authorizeUpgrade(address) internal onlyOwner {} * ``` */ function _authorizeUpgrade(address newImplementation) internal virtual; /** * @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call. * * As a security check, {proxiableUUID} is invoked in the new implementation, and the return value * is expected to be the implementation slot in ERC-1967. * * Emits an {IERC1967-Upgraded} event. */ function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private { try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) { if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) { revert UUPSUnsupportedProxiableUUID(slot); } ERC1967Utils.upgradeToAndCall(newImplementation, data); } catch { // The implementation is not UUPS revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation); } } } // File: contract-73f8cc2598.sol // Compatible with OpenZeppelin Contracts ^5.0.0 pragma solidity ^0.8.22; contract Dmailmail is Initializable, PausableUpgradeable, OwnableUpgradeable, UUPSUpgradeable { event Message( address indexed from, string indexed to, string indexed path ); address public receiver; uint256 public feeAmount; /// @custom:oz-upgrades-unsafe-allow constructor constructor() { _disableInitializers(); } function initialize() initializer public { __Pausable_init(); __Ownable_init(msg.sender); __UUPSUpgradeable_init(); receiver = msg.sender; feeAmount = 3_000_000_000_000; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function _authorizeUpgrade(address newImplementation) internal onlyOwner override {} function setFeeAmount(uint256 _newFeeAmount) public onlyOwner{ feeAmount = _newFeeAmount; } function setReceiver(address _receiver) public onlyOwner{ receiver = _receiver; } function send_mail(string memory to, string memory path) public payable { require(msg.value >= feeAmount,"Insufficient payment"); emit Message(msg.sender,to,path); } function withdraw() public onlyOwner{ payable(receiver).transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"ERC1967InvalidImplementation","type":"error"},{"inputs":[],"name":"ERC1967NonPayable","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","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":"UUPSUnauthorizedCallContext","type":"error"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"name":"UUPSUnsupportedProxiableUUID","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"string","name":"to","type":"string"},{"indexed":true,"internalType":"string","name":"path","type":"string"}],"name":"Message","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":"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":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"to","type":"string"},{"internalType":"string","name":"path","type":"string"}],"name":"send_mail","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFeeAmount","type":"uint256"}],"name":"setFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"setReceiver","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":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000556200005b60201b60201c565b620001cf565b60006200006d6200016560201b60201c565b90508060000160089054906101000a900460ff1615620000b9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff80168160000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614620001625767ffffffffffffffff8160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001599190620001b2565b60405180910390a15b50565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b600067ffffffffffffffff82169050919050565b620001ac816200018d565b82525050565b6000602082019050620001c96000830184620001a1565b92915050565b6080516119f7620001f96000396000818161095c015281816109b10152610b6c01526119f76000f3fe6080604052600436106100f35760003560e01c8063715018a61161008a5780638da5cb5b116100595780638da5cb5b14610276578063ad3cb1cc146102a1578063f2fde38b146102cc578063f7260d3e146102f5576100f3565b8063715018a614610208578063718da7ee1461021f5780638129fc1c146102485780638456cb591461025f576100f3565b80635b7d7482116100c65780635b7d74821461016d5780635c975abb1461018957806369e15404146101b45780636b392680146101df576100f3565b80633ccfd60b146100f85780633f4ba83a1461010f5780634f1ef2861461012657806352d1902d14610142575b600080fd5b34801561010457600080fd5b5061010d610320565b005b34801561011b57600080fd5b50610124610391565b005b610140600480360381019061013b9190611473565b6103a3565b005b34801561014e57600080fd5b506101576103c2565b60405161016491906114e8565b60405180910390f35b610187600480360381019061018291906115a4565b6103f5565b005b34801561019557600080fd5b5061019e6104ad565b6040516101ab9190611637565b60405180910390f35b3480156101c057600080fd5b506101c96104d2565b6040516101d6919061166b565b60405180910390f35b3480156101eb57600080fd5b50610206600480360381019061020191906116b2565b6104d8565b005b34801561021457600080fd5b5061021d6104ea565b005b34801561022b57600080fd5b50610246600480360381019061024191906116df565b6104fe565b005b34801561025457600080fd5b5061025d610549565b005b34801561026b57600080fd5b50610274610734565b005b34801561028257600080fd5b5061028b610746565b604051610298919061171b565b60405180910390f35b3480156102ad57600080fd5b506102b661077e565b6040516102c391906117b5565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee91906116df565b6107b7565b005b34801561030157600080fd5b5061030a61083d565b604051610317919061171b565b60405180910390f35b610328610861565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561038e573d6000803e3d6000fd5b50565b610399610861565b6103a16108e8565b565b6103ab61095a565b6103b482610a40565b6103be8282610a4b565b5050565b60006103cc610b6a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60015434101561043a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043190611823565b60405180910390fd5b80604051610448919061187f565b60405180910390208260405161045e919061187f565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f5c0bf6ba470f83fe17f0b8fd9fdf4799eaeb1b63bbf39e4868fc7e0798e7abeb60405160405180910390a45050565b6000806104b8610bf1565b90508060000160009054906101000a900460ff1691505090565b60015481565b6104e0610861565b8060018190555050565b6104f2610861565b6104fc6000610c19565b565b610506610861565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610553610cf0565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff161480156105a15750825b9050600060018367ffffffffffffffff161480156105d6575060003073ffffffffffffffffffffffffffffffffffffffff163b145b9050811580156105e4575080155b1561061b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550831561066b5760018560000160086101000a81548160ff0219169083151502179055505b610673610d18565b61067c33610d2a565b610684610d3e565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506502ba7def3000600181905550831561072d5760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161072491906118ef565b60405180910390a15b5050505050565b61073c610861565b610744610d48565b565b600080610751610dba565b90508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6107bf610861565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108315760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610828919061171b565b60405180910390fd5b61083a81610c19565b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610869610de2565b73ffffffffffffffffffffffffffffffffffffffff16610887610746565b73ffffffffffffffffffffffffffffffffffffffff16146108e6576108aa610de2565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016108dd919061171b565b60405180910390fd5b565b6108f0610dea565b60006108fa610bf1565b905060008160000160006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610942610de2565b60405161094f919061171b565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480610a0757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166109ee610e2a565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610a3e576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610a48610861565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610ab357506040513d601f19601f82011682018060405250810190610ab09190611936565b60015b610af457816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610aeb919061171b565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114610b5b57806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401610b5291906114e8565b60405180910390fd5b610b658383610e81565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610bef576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b6000610c23610dba565b905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b610d20610ef4565b610d28610f34565b565b610d32610ef4565b610d3b81610f68565b50565b610d46610ef4565b565b610d50610fee565b6000610d5a610bf1565b905060018160000160006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610da2610de2565b604051610daf919061171b565b60405180910390a150565b60007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b600033905090565b610df26104ad565b610e28576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610e587f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61102f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e8a82611039565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2600081511115610ee757610ee18282611106565b50610ef0565b610eef61118a565b5b5050565b610efc6111c7565b610f32576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610f3c610ef4565b6000610f46610bf1565b905060008160000160006101000a81548160ff02191690831515021790555050565b610f70610ef4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fe25760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610fd9919061171b565b60405180910390fd5b610feb81610c19565b50565b610ff66104ad565b1561102d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000819050919050565b60008173ffffffffffffffffffffffffffffffffffffffff163b0361109557806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161108c919061171b565b60405180910390fd5b806110c27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61102f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161113091906119aa565b600060405180830381855af49150503d806000811461116b576040519150601f19603f3d011682016040523d82523d6000602084013e611170565b606091505b50915091506111808583836111e7565b9250505092915050565b60003411156111c5576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006111d1610cf0565b60000160089054906101000a900460ff16905090565b6060826111fc576111f782611276565b61126e565b60008251148015611224575060008473ffffffffffffffffffffffffffffffffffffffff163b145b1561126657836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161125d919061171b565b60405180910390fd5b81905061126f565b5b9392505050565b6000815111156112895780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112fa826112cf565b9050919050565b61130a816112ef565b811461131557600080fd5b50565b60008135905061132781611301565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61138082611337565b810181811067ffffffffffffffff8211171561139f5761139e611348565b5b80604052505050565b60006113b26112bb565b90506113be8282611377565b919050565b600067ffffffffffffffff8211156113de576113dd611348565b5b6113e782611337565b9050602081019050919050565b82818337600083830152505050565b6000611416611411846113c3565b6113a8565b90508281526020810184848401111561143257611431611332565b5b61143d8482856113f4565b509392505050565b600082601f83011261145a5761145961132d565b5b813561146a848260208601611403565b91505092915050565b6000806040838503121561148a576114896112c5565b5b600061149885828601611318565b925050602083013567ffffffffffffffff8111156114b9576114b86112ca565b5b6114c585828601611445565b9150509250929050565b6000819050919050565b6114e2816114cf565b82525050565b60006020820190506114fd60008301846114d9565b92915050565b600067ffffffffffffffff82111561151e5761151d611348565b5b61152782611337565b9050602081019050919050565b600061154761154284611503565b6113a8565b90508281526020810184848401111561156357611562611332565b5b61156e8482856113f4565b509392505050565b600082601f83011261158b5761158a61132d565b5b813561159b848260208601611534565b91505092915050565b600080604083850312156115bb576115ba6112c5565b5b600083013567ffffffffffffffff8111156115d9576115d86112ca565b5b6115e585828601611576565b925050602083013567ffffffffffffffff811115611606576116056112ca565b5b61161285828601611576565b9150509250929050565b60008115159050919050565b6116318161161c565b82525050565b600060208201905061164c6000830184611628565b92915050565b6000819050919050565b61166581611652565b82525050565b6000602082019050611680600083018461165c565b92915050565b61168f81611652565b811461169a57600080fd5b50565b6000813590506116ac81611686565b92915050565b6000602082840312156116c8576116c76112c5565b5b60006116d68482850161169d565b91505092915050565b6000602082840312156116f5576116f46112c5565b5b600061170384828501611318565b91505092915050565b611715816112ef565b82525050565b6000602082019050611730600083018461170c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611770578082015181840152602081019050611755565b60008484015250505050565b600061178782611736565b6117918185611741565b93506117a1818560208601611752565b6117aa81611337565b840191505092915050565b600060208201905081810360008301526117cf818461177c565b905092915050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b600061180d601483611741565b9150611818826117d7565b602082019050919050565b6000602082019050818103600083015261183c81611800565b9050919050565b600081905092915050565b600061185982611736565b6118638185611843565b9350611873818560208601611752565b80840191505092915050565b600061188b828461184e565b915081905092915050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b60006118d96118d46118cf84611896565b6118b4565b6118a0565b9050919050565b6118e9816118be565b82525050565b600060208201905061190460008301846118e0565b92915050565b611913816114cf565b811461191e57600080fd5b50565b6000815190506119308161190a565b92915050565b60006020828403121561194c5761194b6112c5565b5b600061195a84828501611921565b91505092915050565b600081519050919050565b600081905092915050565b600061198482611963565b61198e818561196e565b935061199e818560208601611752565b80840191505092915050565b60006119b68284611979565b91508190509291505056fea26469706673582212201cbe8a07f4c440931eae7accb32d1227de7c4ce458c894a8a042160628ad6ea164736f6c63430008180033
Deployed Bytecode
0x6080604052600436106100f35760003560e01c8063715018a61161008a5780638da5cb5b116100595780638da5cb5b14610276578063ad3cb1cc146102a1578063f2fde38b146102cc578063f7260d3e146102f5576100f3565b8063715018a614610208578063718da7ee1461021f5780638129fc1c146102485780638456cb591461025f576100f3565b80635b7d7482116100c65780635b7d74821461016d5780635c975abb1461018957806369e15404146101b45780636b392680146101df576100f3565b80633ccfd60b146100f85780633f4ba83a1461010f5780634f1ef2861461012657806352d1902d14610142575b600080fd5b34801561010457600080fd5b5061010d610320565b005b34801561011b57600080fd5b50610124610391565b005b610140600480360381019061013b9190611473565b6103a3565b005b34801561014e57600080fd5b506101576103c2565b60405161016491906114e8565b60405180910390f35b610187600480360381019061018291906115a4565b6103f5565b005b34801561019557600080fd5b5061019e6104ad565b6040516101ab9190611637565b60405180910390f35b3480156101c057600080fd5b506101c96104d2565b6040516101d6919061166b565b60405180910390f35b3480156101eb57600080fd5b50610206600480360381019061020191906116b2565b6104d8565b005b34801561021457600080fd5b5061021d6104ea565b005b34801561022b57600080fd5b50610246600480360381019061024191906116df565b6104fe565b005b34801561025457600080fd5b5061025d610549565b005b34801561026b57600080fd5b50610274610734565b005b34801561028257600080fd5b5061028b610746565b604051610298919061171b565b60405180910390f35b3480156102ad57600080fd5b506102b661077e565b6040516102c391906117b5565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee91906116df565b6107b7565b005b34801561030157600080fd5b5061030a61083d565b604051610317919061171b565b60405180910390f35b610328610861565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561038e573d6000803e3d6000fd5b50565b610399610861565b6103a16108e8565b565b6103ab61095a565b6103b482610a40565b6103be8282610a4b565b5050565b60006103cc610b6a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60015434101561043a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043190611823565b60405180910390fd5b80604051610448919061187f565b60405180910390208260405161045e919061187f565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f5c0bf6ba470f83fe17f0b8fd9fdf4799eaeb1b63bbf39e4868fc7e0798e7abeb60405160405180910390a45050565b6000806104b8610bf1565b90508060000160009054906101000a900460ff1691505090565b60015481565b6104e0610861565b8060018190555050565b6104f2610861565b6104fc6000610c19565b565b610506610861565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610553610cf0565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff161480156105a15750825b9050600060018367ffffffffffffffff161480156105d6575060003073ffffffffffffffffffffffffffffffffffffffff163b145b9050811580156105e4575080155b1561061b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550831561066b5760018560000160086101000a81548160ff0219169083151502179055505b610673610d18565b61067c33610d2a565b610684610d3e565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506502ba7def3000600181905550831561072d5760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161072491906118ef565b60405180910390a15b5050505050565b61073c610861565b610744610d48565b565b600080610751610dba565b90508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6107bf610861565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108315760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610828919061171b565b60405180910390fd5b61083a81610c19565b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610869610de2565b73ffffffffffffffffffffffffffffffffffffffff16610887610746565b73ffffffffffffffffffffffffffffffffffffffff16146108e6576108aa610de2565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016108dd919061171b565b60405180910390fd5b565b6108f0610dea565b60006108fa610bf1565b905060008160000160006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610942610de2565b60405161094f919061171b565b60405180910390a150565b7f000000000000000000000000f989992de1765083a5dbd3fd28a92b1d2cc430db73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480610a0757507f000000000000000000000000f989992de1765083a5dbd3fd28a92b1d2cc430db73ffffffffffffffffffffffffffffffffffffffff166109ee610e2a565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610a3e576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610a48610861565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610ab357506040513d601f19601f82011682018060405250810190610ab09190611936565b60015b610af457816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610aeb919061171b565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114610b5b57806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401610b5291906114e8565b60405180910390fd5b610b658383610e81565b505050565b7f000000000000000000000000f989992de1765083a5dbd3fd28a92b1d2cc430db73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610bef576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b6000610c23610dba565b905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b610d20610ef4565b610d28610f34565b565b610d32610ef4565b610d3b81610f68565b50565b610d46610ef4565b565b610d50610fee565b6000610d5a610bf1565b905060018160000160006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610da2610de2565b604051610daf919061171b565b60405180910390a150565b60007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b600033905090565b610df26104ad565b610e28576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610e587f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61102f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e8a82611039565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2600081511115610ee757610ee18282611106565b50610ef0565b610eef61118a565b5b5050565b610efc6111c7565b610f32576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610f3c610ef4565b6000610f46610bf1565b905060008160000160006101000a81548160ff02191690831515021790555050565b610f70610ef4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fe25760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610fd9919061171b565b60405180910390fd5b610feb81610c19565b50565b610ff66104ad565b1561102d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000819050919050565b60008173ffffffffffffffffffffffffffffffffffffffff163b0361109557806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161108c919061171b565b60405180910390fd5b806110c27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61102f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161113091906119aa565b600060405180830381855af49150503d806000811461116b576040519150601f19603f3d011682016040523d82523d6000602084013e611170565b606091505b50915091506111808583836111e7565b9250505092915050565b60003411156111c5576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006111d1610cf0565b60000160089054906101000a900460ff16905090565b6060826111fc576111f782611276565b61126e565b60008251148015611224575060008473ffffffffffffffffffffffffffffffffffffffff163b145b1561126657836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161125d919061171b565b60405180910390fd5b81905061126f565b5b9392505050565b6000815111156112895780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112fa826112cf565b9050919050565b61130a816112ef565b811461131557600080fd5b50565b60008135905061132781611301565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61138082611337565b810181811067ffffffffffffffff8211171561139f5761139e611348565b5b80604052505050565b60006113b26112bb565b90506113be8282611377565b919050565b600067ffffffffffffffff8211156113de576113dd611348565b5b6113e782611337565b9050602081019050919050565b82818337600083830152505050565b6000611416611411846113c3565b6113a8565b90508281526020810184848401111561143257611431611332565b5b61143d8482856113f4565b509392505050565b600082601f83011261145a5761145961132d565b5b813561146a848260208601611403565b91505092915050565b6000806040838503121561148a576114896112c5565b5b600061149885828601611318565b925050602083013567ffffffffffffffff8111156114b9576114b86112ca565b5b6114c585828601611445565b9150509250929050565b6000819050919050565b6114e2816114cf565b82525050565b60006020820190506114fd60008301846114d9565b92915050565b600067ffffffffffffffff82111561151e5761151d611348565b5b61152782611337565b9050602081019050919050565b600061154761154284611503565b6113a8565b90508281526020810184848401111561156357611562611332565b5b61156e8482856113f4565b509392505050565b600082601f83011261158b5761158a61132d565b5b813561159b848260208601611534565b91505092915050565b600080604083850312156115bb576115ba6112c5565b5b600083013567ffffffffffffffff8111156115d9576115d86112ca565b5b6115e585828601611576565b925050602083013567ffffffffffffffff811115611606576116056112ca565b5b61161285828601611576565b9150509250929050565b60008115159050919050565b6116318161161c565b82525050565b600060208201905061164c6000830184611628565b92915050565b6000819050919050565b61166581611652565b82525050565b6000602082019050611680600083018461165c565b92915050565b61168f81611652565b811461169a57600080fd5b50565b6000813590506116ac81611686565b92915050565b6000602082840312156116c8576116c76112c5565b5b60006116d68482850161169d565b91505092915050565b6000602082840312156116f5576116f46112c5565b5b600061170384828501611318565b91505092915050565b611715816112ef565b82525050565b6000602082019050611730600083018461170c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611770578082015181840152602081019050611755565b60008484015250505050565b600061178782611736565b6117918185611741565b93506117a1818560208601611752565b6117aa81611337565b840191505092915050565b600060208201905081810360008301526117cf818461177c565b905092915050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b600061180d601483611741565b9150611818826117d7565b602082019050919050565b6000602082019050818103600083015261183c81611800565b9050919050565b600081905092915050565b600061185982611736565b6118638185611843565b9350611873818560208601611752565b80840191505092915050565b600061188b828461184e565b915081905092915050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b60006118d96118d46118cf84611896565b6118b4565b6118a0565b9050919050565b6118e9816118be565b82525050565b600060208201905061190460008301846118e0565b92915050565b611913816114cf565b811461191e57600080fd5b50565b6000815190506119308161190a565b92915050565b60006020828403121561194c5761194b6112c5565b5b600061195a84828501611921565b91505092915050565b600081519050919050565b600081905092915050565b600061198482611963565b61198e818561196e565b935061199e818560208601611752565b80840191505092915050565b60006119b68284611979565b91508190509291505056fea26469706673582212201cbe8a07f4c440931eae7accb32d1227de7c4ce458c894a8a042160628ad6ea164736f6c63430008180033
Deployed Bytecode Sourcemap
45064:1420:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46377:104;;;;;;;;;;;;;:::i;:::-;;45765:65;;;;;;;;;;;;;:::i;:::-;;42439:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41972:136;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46180:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17253:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45315:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45962:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13651:103;;;;;;;;;;;;;:::i;:::-;;46075:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45467:221;;;;;;;;;;;;;:::i;:::-;;45696:61;;;;;;;;;;;;;:::i;:::-;;12916:147;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40037:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13909:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45285:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46377:104;12802:13;:11;:13::i;:::-;46432:8:::1;::::0;::::1;;;;;;;;46424:26;;:49;46451:21;46424:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46377:104::o:0;45765:65::-;12802:13;:11;:13::i;:::-;45812:10:::1;:8;:10::i;:::-;45765:65::o:0;42439:217::-;40893:13;:11;:13::i;:::-;42555:36:::1;42573:17;42555;:36::i;:::-;42602:46;42624:17;42643:4;42602:21;:46::i;:::-;42439:217:::0;;:::o;41972:136::-;42041:7;41173:20;:18;:20::i;:::-;32770:66:::1;42068:32;;42061:39;;41972:136:::0;:::o;46180:189::-;46285:9;;46272;:22;;46264:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;46356:4;46334:27;;;;;;:::i;:::-;;;;;;;;46353:2;46334:27;;;;;;:::i;:::-;;;;;;;;46342:10;46334:27;;;;;;;;;;;;46180:189;;:::o;17253:148::-;17300:4;17317:25;17345:21;:19;:21::i;:::-;17317:49;;17384:1;:9;;;;;;;;;;;;17377:16;;;17253:148;:::o;45315:24::-;;;;:::o;45962:105::-;12802:13;:11;:13::i;:::-;46046::::1;46034:9;:25;;;;45962:105:::0;:::o;13651:103::-;12802:13;:11;:13::i;:::-;13716:30:::1;13743:1;13716:18;:30::i;:::-;13651:103::o:0;46075:95::-;12802:13;:11;:13::i;:::-;46153:9:::1;46142:8;::::0;:20:::1;;;;;;;;;;;;;;;;;;46075:95:::0;:::o;45467:221::-;4386:30;4419:26;:24;:26::i;:::-;4386:59;;4510:19;4533:1;:15;;;;;;;;;;;;4532:16;4510:38;;4559:18;4580:1;:14;;;;;;;;;;;;4559:35;;4945:17;4980:1;4965:11;:16;;;:34;;;;;4985:14;4965:34;4945:54;;5010:17;5045:1;5030:11;:16;;;:50;;;;;5079:1;5058:4;5050:25;;;:30;5030:50;5010:70;;5098:12;5097:13;:30;;;;;5115:12;5114:13;5097:30;5093:93;;;5151:23;;;;;;;;;;;;;;5093:93;5213:1;5196;:14;;;:18;;;;;;;;;;;;;;;;;;5229:14;5225:69;;;5278:4;5260:1;:15;;;:22;;;;;;;;;;;;;;;;;;5225:69;45519:17:::1;:15;:17::i;:::-;45547:26;45562:10;45547:14;:26::i;:::-;45584:24;:22;:24::i;:::-;45630:10;45619:8;::::0;:21:::1;;;;;;;;;;;;;;;;;;45663:17;45651:9;:29;;;;5320:14:::0;5316:104;;;5369:5;5351:1;:15;;;:23;;;;;;;;;;;;;;;;;;5394:14;5406:1;5394:14;;;;;;:::i;:::-;;;;;;;;5316:104;4318:1109;;;;;45467:221::o;45696:61::-;12802:13;:11;:13::i;:::-;45741:8:::1;:6;:8::i;:::-;45696:61::o:0;12916:147::-;12962:7;12982:24;13009:20;:18;:20::i;:::-;12982:47;;13047:1;:8;;;;;;;;;;;;13040:15;;;12916:147;:::o;40037:58::-;;;;;;;;;;;;;;;;;;;:::o;13909:220::-;12802:13;:11;:13::i;:::-;14014:1:::1;13994:22;;:8;:22;;::::0;13990:93:::1;;14068:1;14040:31;;;;;;;;;;;:::i;:::-;;;;;;;;13990:93;14093:28;14112:8;14093:18;:28::i;:::-;13909:220:::0;:::o;45285:23::-;;;;;;;;;;;;:::o;13141:166::-;13212:12;:10;:12::i;:::-;13201:23;;:7;:5;:7::i;:::-;:23;;;13197:103;;13275:12;:10;:12::i;:::-;13248:40;;;;;;;;;;;:::i;:::-;;;;;;;;13197:103;13141:166::o;18278:182::-;17117:16;:14;:16::i;:::-;18337:25:::1;18365:21;:19;:21::i;:::-;18337:49;;18409:5;18397:1;:9;;;:17;;;;;;;;;;;;;;;;;;18430:22;18439:12;:10;:12::i;:::-;18430:22;;;;;;:::i;:::-;;;;;;;;18326:134;18278:182::o:0;42891:319::-;42982:6;42965:23;;42973:4;42965:23;;;:121;;;;43080:6;43044:42;;:32;:30;:32::i;:::-;:42;;;;42965:121;42947:256;;;43162:29;;;;;;;;;;;;;;42947:256;42891:319::o;45838:116::-;12802:13;:11;:13::i;:::-;45838:116;:::o;44385:548::-;44503:17;44485:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44481:445;;44896:17;44854:60;;;;;;;;;;;:::i;:::-;;;;;;;;44481:445;32770:66;44588:32;;44580:4;:40;44576:122;;44677:4;44648:34;;;;;;;;;;;:::i;:::-;;;;;;;;44576:122;44712:54;44742:17;44761:4;44712:29;:54::i;:::-;44538:240;44385:548;;:::o;43333:218::-;43417:6;43400:23;;43408:4;43400:23;;;43396:148;;43503:29;;;;;;;;;;;;;;43396:148;43333:218::o;15643:166::-;15696:25;15768:23;15758:33;;15643:166;:::o;14289:253::-;14363:24;14390:20;:18;:20::i;:::-;14363:47;;14421:16;14440:1;:8;;;;;;;;;;;;14421:27;;14470:8;14459:1;:8;;;:19;;;;;;;;;;;;;;;;;;14525:8;14494:40;;14515:8;14494:40;;;;;;;;;;;;14352:190;;14289:253;:::o;9082:174::-;9140:30;9217:21;9207:31;;9082:174;:::o;16361:99::-;7224:20;:18;:20::i;:::-;16425:27:::1;:25;:27::i;:::-;16361:99::o:0;12300:129::-;7224:20;:18;:20::i;:::-;12383:38:::1;12408:12;12383:24;:38::i;:::-;12300:129:::0;:::o;41221:68::-;7224:20;:18;:20::i;:::-;41221:68::o;17957:180::-;16858:19;:17;:19::i;:::-;18017:25:::1;18045:21;:19;:21::i;:::-;18017:49;;18089:4;18077:1;:9;;;:16;;;;;;;;;;;;;;;;;;18109:20;18116:12;:10;:12::i;:::-;18109:20;;;;;;:::i;:::-;;;;;;;;18006:131;17957:180::o:0;11624:163::-;11676:24;11747:22;11737:32;;11624:163;:::o;10161:98::-;10214:7;10241:10;10234:17;;10161:98;:::o;17683:130::-;17747:8;:6;:8::i;:::-;17742:64;;17779:15;;;;;;;;;;;;;;17742:64;17683:130::o;33425:140::-;33477:7;33504:47;32770:66;33531:19;;33504:26;:47::i;:::-;:53;;;;;;;;;;;;33497:60;;33425:140;:::o;34269:353::-;34361:37;34380:17;34361:18;:37::i;:::-;34432:17;34414:36;;;;;;;;;;;;34481:1;34467:4;:11;:15;34463:152;;;34499:53;34528:17;34547:4;34499:28;:53::i;:::-;;34463:152;;;34585:18;:16;:18::i;:::-;34463:152;34269:353;;:::o;7384:145::-;7452:17;:15;:17::i;:::-;7447:75;;7493:17;;;;;;;;;;;;;;7447:75;7384:145::o;16468:159::-;7224:20;:18;:20::i;:::-;16542:25:::1;16570:21;:19;:21::i;:::-;16542:49;;16614:5;16602:1;:9;;;:17;;;;;;;;;;;;;;;;;;16531:96;16468:159::o:0;12437:240::-;7224:20;:18;:20::i;:::-;12558:1:::1;12534:26;;:12;:26;;::::0;12530:97:::1;;12612:1;12584:31;;;;;;;;;;;:::i;:::-;;;;;;;;12530:97;12637:32;12656:12;12637:18;:32::i;:::-;12437:240:::0;:::o;17474:132::-;17540:8;:6;:8::i;:::-;17536:63;;;17572:15;;;;;;;;;;;;;;17536:63;17474:132::o;29747:167::-;29808:21;29892:4;29882:14;;29747:167;;;:::o;33662:286::-;33773:1;33740:17;:29;;;:34;33736:121;;33827:17;33798:47;;;;;;;;;;;:::i;:::-;;;;;;;;33736:121;33923:17;33867:47;32770:66;33894:19;;33867:26;:47::i;:::-;:53;;;:73;;;;;;;;;;;;;;;;;;33662:286;:::o;25566:256::-;25649:12;25675;25689:23;25716:6;:19;;25736:4;25716:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25674:67;;;;25759:55;25786:6;25794:7;25803:10;25759:26;:55::i;:::-;25752:62;;;;25566:256;;;;:::o;38223:126::-;38286:1;38274:9;:13;38270:72;;;38311:19;;;;;;;;;;;;;;38270:72;38223:126::o;8824:122::-;8874:4;8898:26;:24;:26::i;:::-;:40;;;;;;;;;;;;8891:47;;8824:122;:::o;26097:597::-;26245:12;26275:7;26270:417;;26299:19;26307:10;26299:7;:19::i;:::-;26270:417;;;26548:1;26527:10;:17;:22;:49;;;;;26575:1;26553:6;:18;;;:23;26527:49;26523:121;;;26621:6;26604:24;;;;;;;;;;;:::i;:::-;;;;;;;;26523:121;26665:10;26658:17;;;;26270:417;26097:597;;;;;;:::o;27251:498::-;27404:1;27384:10;:17;:21;27380:362;;;27584:10;27578:17;27641:15;27628:10;27624:2;27620:19;27613:44;27380:362;27711:19;;;;;;;;;;;;;;7:75:1;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:117::-;950:1;947;940:12;964:117;1073:1;1070;1063:12;1087:102;1128:6;1179:2;1175:7;1170:2;1163:5;1159:14;1155:28;1145:38;;1087:102;;;:::o;1195:180::-;1243:77;1240:1;1233:88;1340:4;1337:1;1330:15;1364:4;1361:1;1354:15;1381:281;1464:27;1486:4;1464:27;:::i;:::-;1456:6;1452:40;1594:6;1582:10;1579:22;1558:18;1546:10;1543:34;1540:62;1537:88;;;1605:18;;:::i;:::-;1537:88;1645:10;1641:2;1634:22;1424:238;1381:281;;:::o;1668:129::-;1702:6;1729:20;;:::i;:::-;1719:30;;1758:33;1786:4;1778:6;1758:33;:::i;:::-;1668:129;;;:::o;1803:307::-;1864:4;1954:18;1946:6;1943:30;1940:56;;;1976:18;;:::i;:::-;1940:56;2014:29;2036:6;2014:29;:::i;:::-;2006:37;;2098:4;2092;2088:15;2080:23;;1803:307;;;:::o;2116:146::-;2213:6;2208:3;2203;2190:30;2254:1;2245:6;2240:3;2236:16;2229:27;2116:146;;;:::o;2268:423::-;2345:5;2370:65;2386:48;2427:6;2386:48;:::i;:::-;2370:65;:::i;:::-;2361:74;;2458:6;2451:5;2444:21;2496:4;2489:5;2485:16;2534:3;2525:6;2520:3;2516:16;2513:25;2510:112;;;2541:79;;:::i;:::-;2510:112;2631:54;2678:6;2673:3;2668;2631:54;:::i;:::-;2351:340;2268:423;;;;;:::o;2710:338::-;2765:5;2814:3;2807:4;2799:6;2795:17;2791:27;2781:122;;2822:79;;:::i;:::-;2781:122;2939:6;2926:20;2964:78;3038:3;3030:6;3023:4;3015:6;3011:17;2964:78;:::i;:::-;2955:87;;2771:277;2710:338;;;;:::o;3054:652::-;3131:6;3139;3188:2;3176:9;3167:7;3163:23;3159:32;3156:119;;;3194:79;;:::i;:::-;3156:119;3314:1;3339:53;3384:7;3375:6;3364:9;3360:22;3339:53;:::i;:::-;3329:63;;3285:117;3469:2;3458:9;3454:18;3441:32;3500:18;3492:6;3489:30;3486:117;;;3522:79;;:::i;:::-;3486:117;3627:62;3681:7;3672:6;3661:9;3657:22;3627:62;:::i;:::-;3617:72;;3412:287;3054:652;;;;;:::o;3712:77::-;3749:7;3778:5;3767:16;;3712:77;;;:::o;3795:118::-;3882:24;3900:5;3882:24;:::i;:::-;3877:3;3870:37;3795:118;;:::o;3919:222::-;4012:4;4050:2;4039:9;4035:18;4027:26;;4063:71;4131:1;4120:9;4116:17;4107:6;4063:71;:::i;:::-;3919:222;;;;:::o;4147:308::-;4209:4;4299:18;4291:6;4288:30;4285:56;;;4321:18;;:::i;:::-;4285:56;4359:29;4381:6;4359:29;:::i;:::-;4351:37;;4443:4;4437;4433:15;4425:23;;4147:308;;;:::o;4461:425::-;4539:5;4564:66;4580:49;4622:6;4580:49;:::i;:::-;4564:66;:::i;:::-;4555:75;;4653:6;4646:5;4639:21;4691:4;4684:5;4680:16;4729:3;4720:6;4715:3;4711:16;4708:25;4705:112;;;4736:79;;:::i;:::-;4705:112;4826:54;4873:6;4868:3;4863;4826:54;:::i;:::-;4545:341;4461:425;;;;;:::o;4906:340::-;4962:5;5011:3;5004:4;4996:6;4992:17;4988:27;4978:122;;5019:79;;:::i;:::-;4978:122;5136:6;5123:20;5161:79;5236:3;5228:6;5221:4;5213:6;5209:17;5161:79;:::i;:::-;5152:88;;4968:278;4906:340;;;;:::o;5252:834::-;5340:6;5348;5397:2;5385:9;5376:7;5372:23;5368:32;5365:119;;;5403:79;;:::i;:::-;5365:119;5551:1;5540:9;5536:17;5523:31;5581:18;5573:6;5570:30;5567:117;;;5603:79;;:::i;:::-;5567:117;5708:63;5763:7;5754:6;5743:9;5739:22;5708:63;:::i;:::-;5698:73;;5494:287;5848:2;5837:9;5833:18;5820:32;5879:18;5871:6;5868:30;5865:117;;;5901:79;;:::i;:::-;5865:117;6006:63;6061:7;6052:6;6041:9;6037:22;6006:63;:::i;:::-;5996:73;;5791:288;5252:834;;;;;:::o;6092:90::-;6126:7;6169:5;6162:13;6155:21;6144:32;;6092:90;;;:::o;6188:109::-;6269:21;6284:5;6269:21;:::i;:::-;6264:3;6257:34;6188:109;;:::o;6303:210::-;6390:4;6428:2;6417:9;6413:18;6405:26;;6441:65;6503:1;6492:9;6488:17;6479:6;6441:65;:::i;:::-;6303:210;;;;:::o;6519:77::-;6556:7;6585:5;6574:16;;6519:77;;;:::o;6602:118::-;6689:24;6707:5;6689:24;:::i;:::-;6684:3;6677:37;6602:118;;:::o;6726:222::-;6819:4;6857:2;6846:9;6842:18;6834:26;;6870:71;6938:1;6927:9;6923:17;6914:6;6870:71;:::i;:::-;6726:222;;;;:::o;6954:122::-;7027:24;7045:5;7027:24;:::i;:::-;7020:5;7017:35;7007:63;;7066:1;7063;7056:12;7007:63;6954:122;:::o;7082:139::-;7128:5;7166:6;7153:20;7144:29;;7182:33;7209:5;7182:33;:::i;:::-;7082:139;;;;:::o;7227:329::-;7286:6;7335:2;7323:9;7314:7;7310:23;7306:32;7303:119;;;7341:79;;:::i;:::-;7303:119;7461:1;7486:53;7531:7;7522:6;7511:9;7507:22;7486:53;:::i;:::-;7476:63;;7432:117;7227:329;;;;:::o;7562:::-;7621:6;7670:2;7658:9;7649:7;7645:23;7641:32;7638:119;;;7676:79;;:::i;:::-;7638:119;7796:1;7821:53;7866:7;7857:6;7846:9;7842:22;7821:53;:::i;:::-;7811:63;;7767:117;7562:329;;;;:::o;7897:118::-;7984:24;8002:5;7984:24;:::i;:::-;7979:3;7972:37;7897:118;;:::o;8021:222::-;8114:4;8152:2;8141:9;8137:18;8129:26;;8165:71;8233:1;8222:9;8218:17;8209:6;8165:71;:::i;:::-;8021:222;;;;:::o;8249:99::-;8301:6;8335:5;8329:12;8319:22;;8249:99;;;:::o;8354:169::-;8438:11;8472:6;8467:3;8460:19;8512:4;8507:3;8503:14;8488:29;;8354:169;;;;:::o;8529:246::-;8610:1;8620:113;8634:6;8631:1;8628:13;8620:113;;;8719:1;8714:3;8710:11;8704:18;8700:1;8695:3;8691:11;8684:39;8656:2;8653:1;8649:10;8644:15;;8620:113;;;8767:1;8758:6;8753:3;8749:16;8742:27;8591:184;8529:246;;;:::o;8781:377::-;8869:3;8897:39;8930:5;8897:39;:::i;:::-;8952:71;9016:6;9011:3;8952:71;:::i;:::-;8945:78;;9032:65;9090:6;9085:3;9078:4;9071:5;9067:16;9032:65;:::i;:::-;9122:29;9144:6;9122:29;:::i;:::-;9117:3;9113:39;9106:46;;8873:285;8781:377;;;;:::o;9164:313::-;9277:4;9315:2;9304:9;9300:18;9292:26;;9364:9;9358:4;9354:20;9350:1;9339:9;9335:17;9328:47;9392:78;9465:4;9456:6;9392:78;:::i;:::-;9384:86;;9164:313;;;;:::o;9483:170::-;9623:22;9619:1;9611:6;9607:14;9600:46;9483:170;:::o;9659:366::-;9801:3;9822:67;9886:2;9881:3;9822:67;:::i;:::-;9815:74;;9898:93;9987:3;9898:93;:::i;:::-;10016:2;10011:3;10007:12;10000:19;;9659:366;;;:::o;10031:419::-;10197:4;10235:2;10224:9;10220:18;10212:26;;10284:9;10278:4;10274:20;10270:1;10259:9;10255:17;10248:47;10312:131;10438:4;10312:131;:::i;:::-;10304:139;;10031:419;;;:::o;10456:148::-;10558:11;10595:3;10580:18;;10456:148;;;;:::o;10610:390::-;10716:3;10744:39;10777:5;10744:39;:::i;:::-;10799:89;10881:6;10876:3;10799:89;:::i;:::-;10792:96;;10897:65;10955:6;10950:3;10943:4;10936:5;10932:16;10897:65;:::i;:::-;10987:6;10982:3;10978:16;10971:23;;10720:280;10610:390;;;;:::o;11006:275::-;11138:3;11160:95;11251:3;11242:6;11160:95;:::i;:::-;11153:102;;11272:3;11265:10;;11006:275;;;;:::o;11287:85::-;11332:7;11361:5;11350:16;;11287:85;;;:::o;11378:101::-;11414:7;11454:18;11447:5;11443:30;11432:41;;11378:101;;;:::o;11485:60::-;11513:3;11534:5;11527:12;;11485:60;;;:::o;11551:156::-;11608:9;11641:60;11658:42;11667:32;11693:5;11667:32;:::i;:::-;11658:42;:::i;:::-;11641:60;:::i;:::-;11628:73;;11551:156;;;:::o;11713:145::-;11807:44;11845:5;11807:44;:::i;:::-;11802:3;11795:57;11713:145;;:::o;11864:236::-;11964:4;12002:2;11991:9;11987:18;11979:26;;12015:78;12090:1;12079:9;12075:17;12066:6;12015:78;:::i;:::-;11864:236;;;;:::o;12106:122::-;12179:24;12197:5;12179:24;:::i;:::-;12172:5;12169:35;12159:63;;12218:1;12215;12208:12;12159:63;12106:122;:::o;12234:143::-;12291:5;12322:6;12316:13;12307:22;;12338:33;12365:5;12338:33;:::i;:::-;12234:143;;;;:::o;12383:351::-;12453:6;12502:2;12490:9;12481:7;12477:23;12473:32;12470:119;;;12508:79;;:::i;:::-;12470:119;12628:1;12653:64;12709:7;12700:6;12689:9;12685:22;12653:64;:::i;:::-;12643:74;;12599:128;12383:351;;;;:::o;12740:98::-;12791:6;12825:5;12819:12;12809:22;;12740:98;;;:::o;12844:147::-;12945:11;12982:3;12967:18;;12844:147;;;;:::o;12997:386::-;13101:3;13129:38;13161:5;13129:38;:::i;:::-;13183:88;13264:6;13259:3;13183:88;:::i;:::-;13176:95;;13280:65;13338:6;13333:3;13326:4;13319:5;13315:16;13280:65;:::i;:::-;13370:6;13365:3;13361:16;13354:23;;13105:278;12997:386;;;;:::o;13389:271::-;13519:3;13541:93;13630:3;13621:6;13541:93;:::i;:::-;13534:100;;13651:3;13644:10;;13389:271;;;;:::o
Swarm Source
ipfs://1cbe8a07f4c440931eae7accb32d1227de7c4ce458c894a8a042160628ad6ea1
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$8.60
Net Worth in ETH
Token Allocations
ETH
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| SCROLL | 100.00% | $2,933.63 | 0.00293008 | $8.6 |
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.