Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 15 from a total of 15 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Perform Delegate... | 20737565 | 20 days ago | IN | 0 ETH | 0.00006498 | ||||
Multicall | 20732850 | 21 days ago | IN | 0 ETH | 0.00013281 | ||||
Multicall | 20726501 | 22 days ago | IN | 0 ETH | 0.00008164 | ||||
Multicall | 20725971 | 22 days ago | IN | 0 ETH | 0.00011858 | ||||
Multicall | 20716658 | 23 days ago | IN | 0 ETH | 0.00036241 | ||||
Multicall | 20700328 | 26 days ago | IN | 0 ETH | 0.00005543 | ||||
Multicall | 20688175 | 27 days ago | IN | 0 ETH | 0.00015244 | ||||
Transfer | 20683084 | 28 days ago | IN | 0.00414079 ETH | 0.0000517 | ||||
Transfer | 20661971 | 31 days ago | IN | 0.00406141 ETH | 0.00006436 | ||||
Multicall | 20261192 | 87 days ago | IN | 0 ETH | 0.00065039 | ||||
Perform Call | 20261114 | 87 days ago | IN | 0 ETH | 0.00016954 | ||||
Multicall | 20049937 | 116 days ago | IN | 0 ETH | 0.00048881 | ||||
Perform Call | 19892534 | 138 days ago | IN | 0 ETH | 0.00017213 | ||||
Multicall | 19728033 | 161 days ago | IN | 0 ETH | 0.0033931 | ||||
Multicall | 19728033 | 161 days ago | IN | 0 ETH | 0.00124393 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
19728033 | 161 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
OpenmeshAdmin
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {SmartAccount} from "../lib/smart-account/src/SmartAccount.sol"; import {SmartAccountBaseInstaller} from "../lib/smart-account/src/SmartAccountBaseInstaller.sol"; address constant installer = 0x4811864B715C0F1B0f9790a8ee6F11dC25b7F258; contract OpenmeshAdmin is SmartAccount { constructor() SmartAccount( installer, abi.encodeWithSelector(SmartAccountBaseInstaller.install.selector, 0x6b221aA392146E31743E1beB5827e88284B09753) ) {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @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 AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @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 * {FailedInnerCall} 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 AddressInsufficientBalance(address(this)); } (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 {FailedInnerCall}) 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 {FailedInnerCall} 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 {FailedInnerCall}. */ 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } }
// SPDX-License-Identifier: MIT // 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 Context { 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.1) (utils/Multicall.sol) pragma solidity ^0.8.20; import {Address} from "./Address.sol"; import {Context} from "./Context.sol"; /** * @dev Provides a function to batch together multiple calls in a single external call. * * Consider any assumption about calldata validation performed by the sender may be violated if it's not especially * careful about sending transactions invoking {multicall}. For example, a relay address that filters function * selectors won't filter calls nested within a {multicall} operation. * * NOTE: Since 5.0.1 and 4.9.4, this contract identifies non-canonical contexts (i.e. `msg.sender` is not {_msgSender}). * If a non-canonical context is identified, the following self `delegatecall` appends the last bytes of `msg.data` * to the subcall. This makes it safe to use with {ERC2771Context}. Contexts that don't affect the resolution of * {_msgSender} are not propagated to subcalls. */ abstract contract Multicall is Context { /** * @dev Receives and executes a batch of function calls on this contract. * @custom:oz-upgrades-unsafe-allow-reachable delegatecall */ function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) { bytes memory context = msg.sender == _msgSender() ? new bytes(0) : msg.data[msg.data.length - _contextSuffixLength():]; results = new bytes[](data.length); for (uint256 i = 0; i < data.length; i++) { results[i] = Address.functionDelegateCall(address(this), bytes.concat(data[i], context)); } return results; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface ISmartAccount { /// @notice Executes an arbitrary blockchain call. function performCall(address to, uint256 value, bytes calldata data) external returns (bytes memory returnValue); /// @notice Executes an arbitrary blockchain call with delegateCall. This allows advanced code execution inside the account itself. function performDelegateCall(address to, bytes calldata data) external returns (bytes memory returnValue); /// @notice Receives and executes a batch of function calls on this contract. function multicall(bytes[] calldata data) external returns (bytes[] memory results); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {Address} from "../lib/openzeppelin-contracts/contracts/utils/Multicall.sol"; import {SmartAccountModulesLib} from "./modules/SmartAccountModulesLib.sol"; import {SmartAccountOwnableLib} from "./modules/ownable/SmartAccountOwnableLib.sol"; import {ISmartAccount} from "./ISmartAccount.sol"; contract SmartAccount is ISmartAccount { constructor(address installer, bytes memory installData) { Address.functionDelegateCall(installer, installData); } /// @inheritdoc ISmartAccount function performCall(address to, uint256 value, bytes calldata data) external returns (bytes memory returnValue) { SmartAccountOwnableLib.ensureIsOwner(msg.sender); return Address.functionCallWithValue(to, data, value); } /// @inheritdoc ISmartAccount function performDelegateCall(address to, bytes calldata data) external returns (bytes memory returnValue) { SmartAccountOwnableLib.ensureIsOwner(msg.sender); return Address.functionDelegateCall(to, data); } /// @inheritdoc ISmartAccount function multicall(bytes[] calldata data) external returns (bytes[] memory results) { results = new bytes[](data.length); for (uint256 i; i < data.length;) { results[i] = Address.functionDelegateCall(address(this), data[i]); unchecked { ++i; } } return results; } /// @notice Calls smart account module if any is registered for this function call. fallback() external payable { SmartAccountModulesLib.callModule(); } receive() external payable {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {ISmartAccount} from "./ISmartAccount.sol"; import {SmartAccountModulesLib, ISmartAccountModules} from "./modules/SmartAccountModulesLib.sol"; import {SmartAccountOwnableLib, ISmartAccountOwnable} from "./modules/ownable/SmartAccountOwnableLib.sol"; import {SmartAccountERC165Lib, ISmartAccountERC165} from "./modules/erc165/SmartAccountERC165Lib.sol"; interface ISmartAccountBase is ISmartAccount, ISmartAccountModules, ISmartAccountOwnable, ISmartAccountERC165 {} contract SmartAccountBaseInstaller { ISmartAccountModules public immutable SMART_ACCOUNT_MODULES; ISmartAccountOwnable public immutable SMART_ACCOUNT_OWNABLE; ISmartAccountERC165 public immutable SMART_ACCOUNT_ERC165; constructor( ISmartAccountModules smartAccountModules, ISmartAccountOwnable smartAccountOwnable, ISmartAccountERC165 smartAccountERC165 ) { SMART_ACCOUNT_MODULES = smartAccountModules; SMART_ACCOUNT_OWNABLE = smartAccountOwnable; SMART_ACCOUNT_ERC165 = smartAccountERC165; } /// @notice Installs the base modules into a smart account. /// @param owner The initial owner of the smart account. function install(address owner) public virtual { SmartAccountERC165Lib.setInterfaceSupport(type(ISmartAccount).interfaceId, true); SmartAccountModulesLib.fullInstall(address(SMART_ACCOUNT_MODULES)); SmartAccountOwnableLib.fullInstall(address(SMART_ACCOUNT_OWNABLE), owner); SmartAccountERC165Lib.fullInstall(address(SMART_ACCOUNT_ERC165)); } /// @notice Uninstalls the base modules of a smart account. /// @dev This will not remove any storage (except interfaces). This means that owner stays active for the base smart account functionality. Any uninstalled modules will also stay active (even though the module manager is uninstalled). function uninstall() public virtual { SmartAccountModulesLib.fullUninstall(); SmartAccountOwnableLib.fullUninstall(); SmartAccountERC165Lib.fullUninstall(); } /// @notice Set the currently registered module for function. /// @param functionSelector Function of the module to register. /// @param module Address of the module to forward the call to. /// @dev Set to zero address to remove. /// @dev Will override any existing module registered for this function without warning. /// @dev In case of an uninstall of a module containing this function, the function will be removed, no matter if the uninstalled module is the current module for this function. function setModule(bytes4 functionSelector, address module) external { SmartAccountOwnableLib.ensureIsOwner(msg.sender); SmartAccountModulesLib.setModule(functionSelector, module); } //// @notice Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. function transferOwnership(address newOwner) external { SmartAccountOwnableLib.ensureIsOwner(msg.sender); SmartAccountOwnableLib.setOwner(newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface ISmartAccountModules { /// @notice When no function exists for function called error FunctionNotFound(bytes4 functionSelector); /// @notice Module is added/updated/removed. event ModuleSet(bytes4 functionSelector, address module); /// @notice Set the currently registered module for function. /// @dev Zero address means no module is registered. function getModule(bytes4 functionSelector) external view returns (address module); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {SmartAccountERC165Lib} from "./erc165/SmartAccountERC165Lib.sol"; import {ISmartAccountModules} from "./ISmartAccountModules.sol"; // Inspired by ERC-2535 library SmartAccountModulesLib { bytes32 constant STORAGE_POSITION = keccak256("modules.smartaccount.plopmenz"); struct Storage { mapping(bytes4 functionSelector => address module) getFunction; } function getStorage() internal pure returns (Storage storage s) { bytes32 position = STORAGE_POSITION; assembly { s.slot := position } } /// @notice Sets the interfaces implemented by this contract to (un)supported. function setInterfaces(bool supported) internal { SmartAccountERC165Lib.setInterfaceSupport(type(ISmartAccountModules).interfaceId, supported); } /// @notice Installs all functions, interfaces, and performs storage initialization of this module. function fullInstall(address module) internal { setModule(ISmartAccountModules.getModule.selector, module); setInterfaces(true); } /// @notice Uninstalls all functions and interfaces of this module. function fullUninstall() internal { setModule(ISmartAccountModules.getModule.selector, address(0)); setInterfaces(false); } /// @notice Get the currently registered module for function. function getModule(bytes4 functionSelector) internal view returns (address module) { return getStorage().getFunction[functionSelector]; } /// @notice Set the currently registered module for function. /// @dev Set to zero address to remove. function setModule(bytes4 functionSelector, address module) internal { getStorage().getFunction[functionSelector] = module; emit ISmartAccountModules.ModuleSet(functionSelector, module); } /// @notice Delegates the current msg call to a module, if one is registered for that function. function callModule() internal { // Get module from function selector address module = getModule(msg.sig); if (module == address(0)) { revert ISmartAccountModules.FunctionNotFound(msg.sig); } // Execute external function from module using delegatecall and return any value. assembly { // Copy function selector and any arguments calldatacopy(0, 0, calldatasize()) // Execute function call using the module let result := delegatecall(gas(), module, 0, calldatasize(), 0, 0) // Get any return value returndatacopy(0, 0, returndatasize()) // Return any return value or error back to the caller switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IERC165} from "../../../lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; interface ISmartAccountERC165 is IERC165 { /// @notice Interface support changed. event InterfaceSupportedChanged(bytes4 indexed interfaceId, bool supported); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {SmartAccountModulesLib} from "../SmartAccountModulesLib.sol"; import {ISmartAccountERC165, IERC165} from "./ISmartAccountERC165.sol"; library SmartAccountERC165Lib { bytes32 constant STORAGE_POSITION = keccak256("erc165.modules.smartaccount.plopmenz"); struct Storage { mapping(bytes4 interfaceId => bool supported) getSupported; } function getStorage() internal pure returns (Storage storage s) { bytes32 position = STORAGE_POSITION; assembly { s.slot := position } } /// @notice Installs all functions, interfaces, and performs storage initialization of this module. function fullInstall(address module) internal { SmartAccountModulesLib.setModule(IERC165.supportsInterface.selector, module); } /// @notice Uninstalls all functions and interfaces of this module. function fullUninstall() internal { SmartAccountModulesLib.setModule(IERC165.supportsInterface.selector, address(0)); } /// @notice Gets the interfaces supported by the Smart Account. function supportsInterface(bytes4 interfaceId) internal view returns (bool supported) { return getStorage().getSupported[interfaceId]; } /// @notice Updates the interfaces supported by the Smart Account. function setInterfaceSupport(bytes4 interfaceId, bool supported) internal { getStorage().getSupported[interfaceId] = supported; emit ISmartAccountERC165.InterfaceSupportedChanged(interfaceId, supported); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface ISmartAccountOwnable { /// @notice The caller account is not authorized to perform an operation. error NotOwner(address account, address owner); /// @notice A (new) account has become the owner of this contract. event NewOwner(address account); /// @notice Returns the address of the current owner. function owner() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {SmartAccountERC165Lib} from "../erc165/SmartAccountERC165Lib.sol"; import {SmartAccountModulesLib} from "../SmartAccountModulesLib.sol"; import {ISmartAccountOwnable} from "./ISmartAccountOwnable.sol"; library SmartAccountOwnableLib { bytes32 constant STORAGE_POSITION = keccak256("ownable.modules.smartaccount.plopmenz"); struct Storage { address owner; } function getStorage() internal pure returns (Storage storage s) { bytes32 position = STORAGE_POSITION; assembly { s.slot := position } } /// @notice Sets the interfaces implemented by this contract to (un)supported. function setInterfaces(bool supported) internal { SmartAccountERC165Lib.setInterfaceSupport(type(ISmartAccountOwnable).interfaceId, supported); } /// @notice Installs all functions, interfaces, and performs storage initialization of this module. function fullInstall(address module, address initialOwner) internal { SmartAccountOwnableLib.setOwner(initialOwner); SmartAccountModulesLib.setModule(ISmartAccountOwnable.owner.selector, module); setInterfaces(true); } /// @notice Uninstalls all functions and interfaces of this module. function fullUninstall() internal { SmartAccountModulesLib.setModule(ISmartAccountOwnable.owner.selector, address(0)); setInterfaces(false); } /// @notice Returns the address of the current owner. function owner() internal view returns (address) { return getStorage().owner; } /// @notice Reverts if `account` is not the current owner. function ensureIsOwner(address account) internal view { if (account != owner()) { revert ISmartAccountOwnable.NotOwner(account, owner()); } } /// @notice Sets the address of the current owner. function setOwner(address account) internal { getStorage().owner = account; emit ISmartAccountOwnable.NewOwner(account); } }
{ "remappings": [ "@openzeppelin/contracts/=lib/smart-account/lib/openzeppelin-contracts/contracts/", "ds-test/=lib/smart-account/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", "ens-reverse-claimable/=lib/ens-reverse-claimable/src/", "erc4626-tests/=lib/smart-account/lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/smart-account/lib/openzeppelin-contracts/", "smart-account/=lib/smart-account/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "shanghai", "viaIR": true, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"bytes4","name":"functionSelector","type":"bytes4"}],"name":"FunctionNotFound","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"NotOwner","type":"error"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"performCall","outputs":[{"internalType":"bytes","name":"returnValue","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"performDelegateCall","outputs":[{"internalType":"bytes","name":"returnValue","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080346100e557632a1b8f9b60e01b60208201908152736b221aa392146e31743e1beb5827e88284b0975360248084019190915282526001600160401b0391906060820190838211838310176100c4575f9283926040525190734811864b715c0f1b0f9790a8ee6f11dc25b7f2585af43d156100d8573d908282116100c457601f199160405192603f81601f8401160116830193838510908511176100c4576100b4936040528252815f60203d92013e6100e9565b506040516105ce908161016d8239f35b634e487b7160e01b5f52604160045260245ffd5b6100b491506060906100e9565b5f80fd5b909190610112575080511561010057805190602001fd5b604051630a12f52160e11b8152600490fd5b908051158061014f575b6101235790565b604051639996b31560e01b8152734811864b715c0f1b0f9790a8ee6f11dc25b7f2586004820152602490fd5b50734811864b715c0f1b0f9790a8ee6f11dc25b7f2583b1561011c56fe60806040526004361015610015575b366104b657005b5f3560e01c8063306b4d6c146100445780638babb23b1461003f5763ac9650d80361000e5761023f565b61017f565b346100e55760603660031901126100e55761005d6100e9565b60243560443567ffffffffffffffff81116100e5576100836100939136906004016100ff565b61008c33610422565b3691610300565b918147106100cd575f80846100bd9460206100c99751920190855af16100b761047a565b91610535565b6040519182918261016b565b0390f35b60405163cd78605960e01b8152306004820152602490fd5b5f80fd5b600435906001600160a01b03821682036100e557565b9181601f840112156100e55782359167ffffffffffffffff83116100e557602083818601950101116100e557565b91908251928382525f5b848110610157575050825f602080949584010152601f8019910116010190565b602081830181015184830182015201610137565b90602061017c92818152019061012d565b90565b346100e55760403660031901126100e5576101986100e9565b60243567ffffffffffffffff81116100e5576100c9916101c26100836101c89336906004016100ff565b9061049f565b60405191829160208352602083019061012d565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106102115750505050505090565b909192939495848061022f600193603f198682030187528a5161012d565b9801930193019194939290610201565b346100e55760203660031901126100e55767ffffffffffffffff6004358181116100e557366023820112156100e55780600401359182116100e5573660248360051b830101116100e5576100c99160246102999201610370565b604051918291826101dc565b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176102df57604052565b6102a5565b67ffffffffffffffff81116102df57601f01601f191660200190565b92919261031461030f836102e4565b6102b9565b93828552828201116100e557815f926020928387013784010152565b67ffffffffffffffff81116102df5760051b60200190565b805182101561035c5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b9061037d61030f82610330565b81815291601f1961038d83610330565b015f5b8181106104115750505f5b8281106103a85750505090565b8060051b820135601e19833603018112156100e55782019081359167ffffffffffffffff83116100e55760200182360381136100e5576103ef6103f5916001943691610300565b3061049f565b6103ff8287610348565b5261040a8186610348565b500161039b565b806060602080938801015201610390565b7f7da6c9ab90b7db6fcaf21a446db7bbaed4e66d04f1d85c8b0a55dc8af596b030546001600160a01b03918216911680820361045c575050565b6044925060405191631194af8760e11b835260048301526024820152fd5b3d1561049a573d9061048e61030f836102e4565b9182523d5f602084013e565b606090565b5f8061017c93602081519101845af46100b761047a565b5f80356001600160e01b0319168082527f56a2f102f06100e6e9193cce9cca60c6a83719df4146213240bdd4963e5931ba6020526040909120546001600160a01b031690811561051d575f8083368280378136915af43d5f803e15610519573d5ff35b3d5ffd5b60249060405190630a82dd7360e31b82526004820152fd5b9061055c575080511561054a57805190602001fd5b604051630a12f52160e11b8152600490fd5b8151158061058f575b61056d575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561056556fea264697066735822122089219459cae4a82cff166225e4073bb13499910fc6d07f8cc28525ad12006f7964736f6c63430008170033
Deployed Bytecode
0x60806040526004361015610015575b366104b657005b5f3560e01c8063306b4d6c146100445780638babb23b1461003f5763ac9650d80361000e5761023f565b61017f565b346100e55760603660031901126100e55761005d6100e9565b60243560443567ffffffffffffffff81116100e5576100836100939136906004016100ff565b61008c33610422565b3691610300565b918147106100cd575f80846100bd9460206100c99751920190855af16100b761047a565b91610535565b6040519182918261016b565b0390f35b60405163cd78605960e01b8152306004820152602490fd5b5f80fd5b600435906001600160a01b03821682036100e557565b9181601f840112156100e55782359167ffffffffffffffff83116100e557602083818601950101116100e557565b91908251928382525f5b848110610157575050825f602080949584010152601f8019910116010190565b602081830181015184830182015201610137565b90602061017c92818152019061012d565b90565b346100e55760403660031901126100e5576101986100e9565b60243567ffffffffffffffff81116100e5576100c9916101c26100836101c89336906004016100ff565b9061049f565b60405191829160208352602083019061012d565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106102115750505050505090565b909192939495848061022f600193603f198682030187528a5161012d565b9801930193019194939290610201565b346100e55760203660031901126100e55767ffffffffffffffff6004358181116100e557366023820112156100e55780600401359182116100e5573660248360051b830101116100e5576100c99160246102999201610370565b604051918291826101dc565b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176102df57604052565b6102a5565b67ffffffffffffffff81116102df57601f01601f191660200190565b92919261031461030f836102e4565b6102b9565b93828552828201116100e557815f926020928387013784010152565b67ffffffffffffffff81116102df5760051b60200190565b805182101561035c5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b9061037d61030f82610330565b81815291601f1961038d83610330565b015f5b8181106104115750505f5b8281106103a85750505090565b8060051b820135601e19833603018112156100e55782019081359167ffffffffffffffff83116100e55760200182360381136100e5576103ef6103f5916001943691610300565b3061049f565b6103ff8287610348565b5261040a8186610348565b500161039b565b806060602080938801015201610390565b7f7da6c9ab90b7db6fcaf21a446db7bbaed4e66d04f1d85c8b0a55dc8af596b030546001600160a01b03918216911680820361045c575050565b6044925060405191631194af8760e11b835260048301526024820152fd5b3d1561049a573d9061048e61030f836102e4565b9182523d5f602084013e565b606090565b5f8061017c93602081519101845af46100b761047a565b5f80356001600160e01b0319168082527f56a2f102f06100e6e9193cce9cca60c6a83719df4146213240bdd4963e5931ba6020526040909120546001600160a01b031690811561051d575f8083368280378136915af43d5f803e15610519573d5ff35b3d5ffd5b60249060405190630a82dd7360e31b82526004820152fd5b9061055c575080511561054a57805190602001fd5b604051630a12f52160e11b8152600490fd5b8151158061058f575b61056d575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561056556fea264697066735822122089219459cae4a82cff166225e4073bb13499910fc6d07f8cc28525ad12006f7964736f6c63430008170033
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.