Overview
MNT Balance
MNT Value
$0.00Latest 25 from a total of 126 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Execute | 90643501 | 3 hrs ago | IN | 0 MNT | 0.03618941 | ||||
| Execute | 90610553 | 21 hrs ago | IN | 0 MNT | 0.03692198 | ||||
| Execute | 90564718 | 47 hrs ago | IN | 0 MNT | 0.05782791 | ||||
| Execute | 90513464 | 3 days ago | IN | 0 MNT | 0.01794066 | ||||
| Execute | 90470464 | 4 days ago | IN | 0 MNT | 0.04391865 | ||||
| Execute | 90427822 | 5 days ago | IN | 0 MNT | 0.04697602 | ||||
| Execute | 90390093 | 6 days ago | IN | 0 MNT | 0.04079212 | ||||
| Execute | 90347916 | 6 days ago | IN | 0 MNT | 0.03141748 | ||||
| Execute | 90298953 | 8 days ago | IN | 0 MNT | 0.05535394 | ||||
| Execute | 90255290 | 9 days ago | IN | 0 MNT | 0.0783103 | ||||
| Execute | 90211622 | 10 days ago | IN | 0 MNT | 0.04396666 | ||||
| Execute | 90176363 | 10 days ago | IN | 0 MNT | 0.02981092 | ||||
| Execute | 90127079 | 12 days ago | IN | 0 MNT | 0.04908068 | ||||
| Execute | 90088749 | 12 days ago | IN | 0 MNT | 0.03722111 | ||||
| Execute | 90049869 | 13 days ago | IN | 0 MNT | 0.02281706 | ||||
| Execute | 90049848 | 13 days ago | IN | 0 MNT | 0.0436653 | ||||
| Execute | 89964951 | 15 days ago | IN | 0 MNT | 0.03844301 | ||||
| Execute | 89908954 | 17 days ago | IN | 0 MNT | 0.05061579 | ||||
| Execute | 89869946 | 18 days ago | IN | 0 MNT | 0.04490835 | ||||
| Execute | 89831983 | 18 days ago | IN | 0 MNT | 0.05305747 | ||||
| Execute | 89781467 | 20 days ago | IN | 0 MNT | 0.10902017 | ||||
| Execute | 89737179 | 21 days ago | IN | 0 MNT | 0.04215142 | ||||
| Execute | 89695575 | 22 days ago | IN | 0 MNT | 0.05173809 | ||||
| Execute | 89695424 | 22 days ago | IN | 0 MNT | 0.03710933 | ||||
| Execute | 89695310 | 22 days ago | IN | 0 MNT | 0.03711017 |
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 83079010 | 175 days ago | Contract Creation | 0 MNT |
Cross-Chain Transactions
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/access/AccessControl.sol";
import "./libraries/Multicall3.sol";
/**
* @title SafeExecutor
* @dev A contract to safely execute multiple calls (multicall) with role-based access control
* and a once-per-day execution guarantee based on a provided date string.
* The caller is responsible for formatting the calls into the Multicall3.Call3 struct array.
*/
contract F24Multicall is AccessControl {
bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE");
mapping(string => bool) public isDateExecuted;
event ExecutionRecorded(string date, address indexed executor);
struct Call3 {
address target;
bool allowFailure;
bytes callData;
}
struct Result {
bool success;
bytes returnData;
}
/**
* @dev Sets up the contract, granting admin and executor roles to the deployer.
* @param admin The address of the admin role.
*/
constructor(address admin) {
_grantRole(DEFAULT_ADMIN_ROLE, admin);
_grantRole(EXECUTOR_ROLE, admin);
}
/**
* @dev Executes a batch of calls formatted as Multicall3.Call3 structs.
* @param calls An array of Multicall3.Call3 structs.
* @param dateString A unique string representing the date, e.g., "20250728".
*/
function execute(
Call3[] calldata calls,
string calldata dateString
) external payable onlyRole(EXECUTOR_ROLE) {
require(!isDateExecuted[dateString], "SafeExecutor: Already executed for this date");
aggregate3(calls);
// Record that the execution for this date has been completed.
isDateExecuted[dateString] = true;
emit ExecutionRecorded(dateString, _msgSender());
}
/// @notice Aggregate calls, ensuring each returns success if required
/// @param calls An array of Call3 structs
/// @return returnData An array of Result structs
function aggregate3(Call3[] calldata calls) public payable onlyRole(EXECUTOR_ROLE) returns (Result[] memory returnData) {
uint256 length = calls.length;
returnData = new Result[](length);
Call3 calldata calli;
for (uint256 i = 0; i < length;) {
Result memory result = returnData[i];
calli = calls[i];
(result.success, result.returnData) = calli.target.call(calli.callData);
assembly {
// Revert if the call fails and failure is not allowed
// `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)`
if iszero(or(calldataload(add(calli, 0x20)), mload(result))) {
// set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)")))
mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000)
// set data offset
mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020)
// set length of revert string
mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017)
// set revert string: bytes32(abi.encodePacked("Multicall3: call failed"))
mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000)
revert(0x00, 0x64)
}
}
unchecked { ++i; }
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/AccessControl.sol)
pragma solidity ^0.8.0;
import "./IAccessControl.sol";
import "../utils/Context.sol";
import "../utils/Strings.sol";
import "../utils/introspection/ERC165.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address => bool) members;
bytes32 adminRole;
}
mapping(bytes32 => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with a standardized message including the required role.
*
* The format of the revert reason is given by the following regular expression:
*
* /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
*
* _Available since v4.1._
*/
modifier onlyRole(bytes32 role) {
_checkRole(role, _msgSender());
_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view override returns (bool) {
return _roles[role].members[account];
}
/**
* @dev Revert with a standard message if `account` is missing `role`.
*
* The format of the revert reason is given by the following regular expression:
*
* /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
*/
function _checkRole(bytes32 role, address account) internal view {
if (!hasRole(role, account)) {
revert(
string(
abi.encodePacked(
"AccessControl: account ",
Strings.toHexString(uint160(account), 20),
" is missing role ",
Strings.toHexString(uint256(role), 32)
)
)
);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*/
function renounceRole(bytes32 role, address account) public virtual override {
require(account == _msgSender(), "AccessControl: can only renounce roles for self");
_revokeRole(role, account);
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event. Note that unlike {grantRole}, this function doesn't perform any
* checks on the calling account.
*
* [WARNING]
* ====
* This function should only be called from the constructor when setting
* up the initial roles for the system.
*
* Using this function in any other way is effectively circumventing the admin
* system imposed by {AccessControl}.
* ====
*
* NOTE: This function is deprecated in favor of {_grantRole}.
*/
function _setupRole(bytes32 role, address account) internal virtual {
_grantRole(role, account);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Grants `role` to `account`.
*
* Internal function without access restriction.
*/
function _grantRole(bytes32 role, address account) internal virtual {
if (!hasRole(role, account)) {
_roles[role].members[account] = true;
emit RoleGranted(role, account, _msgSender());
}
}
/**
* @dev Revokes `role` from `account`.
*
* Internal function without access restriction.
*/
function _revokeRole(bytes32 role, address account) internal virtual {
if (hasRole(role, account)) {
_roles[role].members[account] = false;
emit RoleRevoked(role, account, _msgSender());
}
}
}// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; /// @title Multicall3 /// @notice Aggregate results from multiple function calls /// @dev Multicall & Multicall2 backwards-compatible /// @dev Aggregate methods are marked `payable` to save 24 gas per call /// @author Michael Elliot <[email protected]> /// @author Joshua Levine <[email protected]> /// @author Nick Johnson <[email protected]> /// @author Andreas Bigger <[email protected]> /// @author Matt Solomon <[email protected]> contract Multicall3 { struct Call { address target; bytes callData; } struct Call3 { address target; bool allowFailure; bytes callData; } struct Call3Value { address target; bool allowFailure; uint256 value; bytes callData; } struct Result { bool success; bytes returnData; } /// @notice Backwards-compatible call aggregation with Multicall /// @param calls An array of Call structs /// @return blockNumber The block number where the calls were executed /// @return returnData An array of bytes containing the responses function aggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData) { blockNumber = block.number; uint256 length = calls.length; returnData = new bytes[](length); Call calldata call; for (uint256 i = 0; i < length;) { bool success; call = calls[i]; (success, returnData[i]) = call.target.call(call.callData); require(success, "Multicall3: call failed"); unchecked { ++i; } } } /// @notice Backwards-compatible with Multicall2 /// @notice Aggregate calls without requiring success /// @param requireSuccess If true, require all calls to succeed /// @param calls An array of Call structs /// @return returnData An array of Result structs function tryAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (Result[] memory returnData) { uint256 length = calls.length; returnData = new Result[](length); Call calldata call; for (uint256 i = 0; i < length;) { Result memory result = returnData[i]; call = calls[i]; (result.success, result.returnData) = call.target.call(call.callData); if (requireSuccess) require(result.success, "Multicall3: call failed"); unchecked { ++i; } } } /// @notice Backwards-compatible with Multicall2 /// @notice Aggregate calls and allow failures using tryAggregate /// @param calls An array of Call structs /// @return blockNumber The block number where the calls were executed /// @return blockHash The hash of the block where the calls were executed /// @return returnData An array of Result structs function tryBlockAndAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData) { blockNumber = block.number; blockHash = blockhash(block.number); returnData = tryAggregate(requireSuccess, calls); } /// @notice Backwards-compatible with Multicall2 /// @notice Aggregate calls and allow failures using tryAggregate /// @param calls An array of Call structs /// @return blockNumber The block number where the calls were executed /// @return blockHash The hash of the block where the calls were executed /// @return returnData An array of Result structs function blockAndAggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData) { (blockNumber, blockHash, returnData) = tryBlockAndAggregate(true, calls); } /// @notice Aggregate calls, ensuring each returns success if required /// @param calls An array of Call3 structs /// @return returnData An array of Result structs function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData) { uint256 length = calls.length; returnData = new Result[](length); Call3 calldata calli; for (uint256 i = 0; i < length;) { Result memory result = returnData[i]; calli = calls[i]; (result.success, result.returnData) = calli.target.call(calli.callData); assembly { // Revert if the call fails and failure is not allowed // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)` if iszero(or(calldataload(add(calli, 0x20)), mload(result))) { // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)"))) mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000) // set data offset mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020) // set length of revert string mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017) // set revert string: bytes32(abi.encodePacked("Multicall3: call failed")) mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000) revert(0x00, 0x64) } } unchecked { ++i; } } } /// @notice Aggregate calls with a msg value /// @notice Reverts if msg.value is less than the sum of the call values /// @param calls An array of Call3Value structs /// @return returnData An array of Result structs function aggregate3Value(Call3Value[] calldata calls) public payable returns (Result[] memory returnData) { uint256 valAccumulator; uint256 length = calls.length; returnData = new Result[](length); Call3Value calldata calli; for (uint256 i = 0; i < length;) { Result memory result = returnData[i]; calli = calls[i]; uint256 val = calli.value; // Humanity will be a Type V Kardashev Civilization before this overflows - andreas // ~ 10^25 Wei in existence << ~ 10^76 size uint fits in a uint256 unchecked { valAccumulator += val; } (result.success, result.returnData) = calli.target.call{value: val}(calli.callData); assembly { // Revert if the call fails and failure is not allowed // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)` if iszero(or(calldataload(add(calli, 0x20)), mload(result))) { // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)"))) mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000) // set data offset mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020) // set length of revert string mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017) // set revert string: bytes32(abi.encodePacked("Multicall3: call failed")) mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000) revert(0x00, 0x84) } } unchecked { ++i; } } // Finally, make sure the msg.value = SUM(call[0...i].value) require(msg.value == valAccumulator, "Multicall3: value mismatch"); } /// @notice Returns the block hash for the given block number /// @param blockNumber The block number function getBlockHash(uint256 blockNumber) public view returns (bytes32 blockHash) { blockHash = blockhash(blockNumber); } /// @notice Returns the block number function getBlockNumber() public view returns (uint256 blockNumber) { blockNumber = block.number; } /// @notice Returns the block coinbase function getCurrentBlockCoinbase() public view returns (address coinbase) { coinbase = block.coinbase; } /// @notice Returns the block difficulty function getCurrentBlockDifficulty() public view returns (uint256 difficulty) { difficulty = block.difficulty; } /// @notice Returns the block gas limit function getCurrentBlockGasLimit() public view returns (uint256 gaslimit) { gaslimit = block.gaslimit; } /// @notice Returns the block timestamp function getCurrentBlockTimestamp() public view returns (uint256 timestamp) { timestamp = block.timestamp; } /// @notice Returns the (ETH) balance of a given address function getEthBalance(address addr) public view returns (uint256 balance) { balance = addr.balance; } /// @notice Returns the block hash of the last block function getLastBlockHash() public view returns (bytes32 blockHash) { unchecked { blockHash = blockhash(block.number - 1); } } /// @notice Gets the base fee of the given block /// @notice Can revert if the BASEFEE opcode is not implemented by the given chain function getBasefee() public view returns (uint256 basefee) { basefee = block.basefee; } /// @notice Returns the chain id function getChainId() public view returns (uint256 chainid) { chainid = block.chainid; } }
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)
pragma solidity ^0.8.0;
/**
* @dev External interface of AccessControl declared to support ERC165 detection.
*/
interface IAccessControl {
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*
* _Available since v3.1._
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {AccessControl-_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*/
function renounceRole(bytes32 role, address account) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @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;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @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);
}{
"remappings": [
"@uniswap/v3-core/=lib/v3-core/",
"@uniswap/v3-periphery/=lib/v3-periphery/",
"@uniswap/swap-router-contracts/=lib/swap-router-contracts/",
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"openzeppelin/contracts/=node_modules/@openzeppelin/contracts/",
"openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/",
"openzeppelin-4.7.3/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable-4.7.3/",
"@safe-contracts/contracts/=lib/mantle-cdk/lib/safe-contracts/contracts/",
"forge-std/=lib/forge-std/src/",
"mantle-cdk/=lib/mantle-cdk/",
"solidity-bytes-utils/=node_modules/solidity-bytes-utils/",
"@layerzerolabs/=node_modules/@layerzerolabs/",
"@createx-forge/=lib/mantle-cdk/lib/createx-forge/",
"@solady/=lib/mantle-cdk/lib/solady/src/",
"createx-forge/=lib/mantle-cdk/lib/createx-forge/",
"ds-test/=lib/mantle-cdk/lib/surl/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/mantle-cdk/lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"halmos-cheatcodes/=lib/mantle-cdk/lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
"openzeppelin-foundry-upgrades/=lib/mantle-cdk/lib/openzeppelin-foundry-upgrades/src/",
"safe-contracts/=lib/mantle-cdk/lib/safe-contracts/",
"solady/=lib/mantle-cdk/lib/solady/src/",
"solidity-stringutils/=lib/mantle-cdk/lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/",
"surl/=lib/mantle-cdk/lib/surl/",
"swap-router-contracts/=lib/swap-router-contracts/contracts/",
"v3-core/=lib/v3-core/",
"v3-periphery/=lib/v3-periphery/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 1
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"viaIR": false,
"libraries": {
"lib/mantle-cdk/script/libraries/SafeTools.sol": {
"SafeConstants": "0x6b43fE1881DC4456F9a656d403CeF04a6Bb256A5"
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"date","type":"string"},{"indexed":true,"internalType":"address","name":"executor","type":"address"}],"name":"ExecutionRecorded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXECUTOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"allowFailure","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct F24Multicall.Call3[]","name":"calls","type":"tuple[]"}],"name":"aggregate3","outputs":[{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct F24Multicall.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"allowFailure","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct F24Multicall.Call3[]","name":"calls","type":"tuple[]"},{"internalType":"string","name":"dateString","type":"string"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"isDateExecuted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50604051610f99380380610f9983398101604081905261002f91610109565b61003a60008261006a565b6100647fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e638261006a565b50610139565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610105576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556100c43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006020828403121561011b57600080fd5b81516001600160a01b038116811461013257600080fd5b9392505050565b610e51806101486000396000f3fe60806040526004361061008c5760003560e01c806301ffc9a71461009157806307bd0265146100c6578063188e3b69146100f6578063248a9ca31461010b5780632f2ff15d1461012b57806336568abe1461014b57806382ad56cb1461016b57806391d148541461018b578063a217fddf146101ab578063b3d0c8fb146101c0578063d547741f146101fb575b600080fd5b34801561009d57600080fd5b506100b16100ac366004610913565b61021b565b60405190151581526020015b60405180910390f35b3480156100d257600080fd5b506100e8600080516020610dfc83398151915281565b6040519081526020016100bd565b610109610104366004610988565b610252565b005b34801561011757600080fd5b506100e8610126366004610a1e565b610385565b34801561013757600080fd5b50610109610146366004610a53565b61039a565b34801561015757600080fd5b50610109610166366004610a53565b6103bc565b61017e610179366004610a7f565b61043a565b6040516100bd9190610b10565b34801561019757600080fd5b506100b16101a6366004610a53565b6105de565b3480156101b757600080fd5b506100e8600081565b3480156101cc57600080fd5b506100b16101db366004610b9c565b805160208183018101805160018252928201919093012091525460ff1681565b34801561020757600080fd5b50610109610216366004610a53565b610607565b60006001600160e01b03198216637965db0b60e01b148061024c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020610dfc83398151915261026b8133610624565b6001838360405161027d929190610c4c565b9081526040519081900360200190205460ff16156102f75760405162461bcd60e51b815260206004820152602c60248201527f536166654578656375746f723a20416c7265616479206578656375746564206660448201526b6f722074686973206461746560a01b60648201526084015b60405180910390fd5b610301858561043a565b506001808484604051610315929190610c4c565b908152604051908190036020019020805491151560ff1990921691909117905561033c3390565b6001600160a01b03167fcea730f2f4102a6e1994a811a98332cb6f0d3ad1cf3b43568363f6526a445bc08484604051610376929190610c5c565b60405180910390a25050505050565b60009081526020819052604090206001015490565b6103a382610385565b6103ad8133610624565b6103b78383610688565b505050565b6001600160a01b038116331461042c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016102ee565b610436828261070c565b5050565b6060600080516020610dfc8339815191526104558133610624565b82806001600160401b0381111561046e5761046e610b86565b6040519080825280602002602001820160405280156104b457816020015b60408051808201909152600081526060602082015281526020019060019003908161048c5790505b5092503660005b828110156105d45760008582815181106104d7576104d7610c8b565b602002602001015190508787838181106104f3576104f3610c8b565b90506020028101906105059190610ca1565b92506105146020840184610cc1565b6001600160a01b031661052a6040850185610cdc565b604051610538929190610c4c565b6000604051808303816000865af19150503d8060008114610575576040519150601f19603f3d011682016040523d82523d6000602084013e61057a565b606091505b5060208084019190915290151580835290840135176105cb5762461bcd60e51b6000526020600452601760245276135d5b1d1a58d85b1b0cce8818d85b1b0819985a5b1959604a1b60445260646000fd5b506001016104bb565b5050505092915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61061082610385565b61061a8133610624565b6103b7838361070c565b61062e82826105de565b61043657610646816001600160a01b03166014610771565b610651836020610771565b604051602001610662929190610d22565b60408051601f198184030181529082905262461bcd60e51b82526102ee91600401610d91565b61069282826105de565b610436576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556106c83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61071682826105de565b15610436576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606000610780836002610dba565b61078b906002610dd1565b6001600160401b038111156107a2576107a2610b86565b6040519080825280601f01601f1916602001820160405280156107cc576020820181803683370190505b509050600360fc1b816000815181106107e7576107e7610c8b565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061081657610816610c8b565b60200101906001600160f81b031916908160001a905350600061083a846002610dba565b610845906001610dd1565b90505b60018111156108bd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061087957610879610c8b565b1a60f81b82828151811061088f5761088f610c8b565b60200101906001600160f81b031916908160001a90535060049490941c936108b681610de4565b9050610848565b50831561090c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016102ee565b9392505050565b60006020828403121561092557600080fd5b81356001600160e01b03198116811461090c57600080fd5b60008083601f84011261094f57600080fd5b5081356001600160401b0381111561096657600080fd5b6020830191508360208260051b850101111561098157600080fd5b9250929050565b6000806000806040858703121561099e57600080fd5b84356001600160401b03808211156109b557600080fd5b6109c18883890161093d565b909650945060208701359150808211156109da57600080fd5b818701915087601f8301126109ee57600080fd5b8135818111156109fd57600080fd5b886020828501011115610a0f57600080fd5b95989497505060200194505050565b600060208284031215610a3057600080fd5b5035919050565b80356001600160a01b0381168114610a4e57600080fd5b919050565b60008060408385031215610a6657600080fd5b82359150610a7660208401610a37565b90509250929050565b60008060208385031215610a9257600080fd5b82356001600160401b03811115610aa857600080fd5b610ab48582860161093d565b90969095509350505050565b60005b83811015610adb578181015183820152602001610ac3565b50506000910152565b60008151808452610afc816020860160208601610ac0565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610b7857888303603f190185528151805115158452870151878401879052610b6587850182610ae4565b9588019593505090860190600101610b37565b509098975050505050505050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610bae57600080fd5b81356001600160401b0380821115610bc557600080fd5b818401915084601f830112610bd957600080fd5b813581811115610beb57610beb610b86565b604051601f8201601f19908116603f01168101908382118183101715610c1357610c13610b86565b81604052828152876020848701011115610c2c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112610cb757600080fd5b9190910192915050565b600060208284031215610cd357600080fd5b61090c82610a37565b6000808335601e19843603018112610cf357600080fd5b8301803591506001600160401b03821115610d0d57600080fd5b60200191503681900382131561098157600080fd5b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351610d54816017850160208801610ac0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610d85816028840160208801610ac0565b01602801949350505050565b60208152600061090c6020830184610ae4565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761024c5761024c610da4565b8082018082111561024c5761024c610da4565b600081610df357610df3610da4565b50600019019056fed8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63a26469706673582212209978b8bda516f67a73f6b7126f53ee3a95fcd8285a11f9b82c70ab2ae2b65be564736f6c6343000814003300000000000000000000000069e0cc792af7ca5b8e6e0fa555d99c29d3009bdd
Deployed Bytecode
0x60806040526004361061008c5760003560e01c806301ffc9a71461009157806307bd0265146100c6578063188e3b69146100f6578063248a9ca31461010b5780632f2ff15d1461012b57806336568abe1461014b57806382ad56cb1461016b57806391d148541461018b578063a217fddf146101ab578063b3d0c8fb146101c0578063d547741f146101fb575b600080fd5b34801561009d57600080fd5b506100b16100ac366004610913565b61021b565b60405190151581526020015b60405180910390f35b3480156100d257600080fd5b506100e8600080516020610dfc83398151915281565b6040519081526020016100bd565b610109610104366004610988565b610252565b005b34801561011757600080fd5b506100e8610126366004610a1e565b610385565b34801561013757600080fd5b50610109610146366004610a53565b61039a565b34801561015757600080fd5b50610109610166366004610a53565b6103bc565b61017e610179366004610a7f565b61043a565b6040516100bd9190610b10565b34801561019757600080fd5b506100b16101a6366004610a53565b6105de565b3480156101b757600080fd5b506100e8600081565b3480156101cc57600080fd5b506100b16101db366004610b9c565b805160208183018101805160018252928201919093012091525460ff1681565b34801561020757600080fd5b50610109610216366004610a53565b610607565b60006001600160e01b03198216637965db0b60e01b148061024c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020610dfc83398151915261026b8133610624565b6001838360405161027d929190610c4c565b9081526040519081900360200190205460ff16156102f75760405162461bcd60e51b815260206004820152602c60248201527f536166654578656375746f723a20416c7265616479206578656375746564206660448201526b6f722074686973206461746560a01b60648201526084015b60405180910390fd5b610301858561043a565b506001808484604051610315929190610c4c565b908152604051908190036020019020805491151560ff1990921691909117905561033c3390565b6001600160a01b03167fcea730f2f4102a6e1994a811a98332cb6f0d3ad1cf3b43568363f6526a445bc08484604051610376929190610c5c565b60405180910390a25050505050565b60009081526020819052604090206001015490565b6103a382610385565b6103ad8133610624565b6103b78383610688565b505050565b6001600160a01b038116331461042c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016102ee565b610436828261070c565b5050565b6060600080516020610dfc8339815191526104558133610624565b82806001600160401b0381111561046e5761046e610b86565b6040519080825280602002602001820160405280156104b457816020015b60408051808201909152600081526060602082015281526020019060019003908161048c5790505b5092503660005b828110156105d45760008582815181106104d7576104d7610c8b565b602002602001015190508787838181106104f3576104f3610c8b565b90506020028101906105059190610ca1565b92506105146020840184610cc1565b6001600160a01b031661052a6040850185610cdc565b604051610538929190610c4c565b6000604051808303816000865af19150503d8060008114610575576040519150601f19603f3d011682016040523d82523d6000602084013e61057a565b606091505b5060208084019190915290151580835290840135176105cb5762461bcd60e51b6000526020600452601760245276135d5b1d1a58d85b1b0cce8818d85b1b0819985a5b1959604a1b60445260646000fd5b506001016104bb565b5050505092915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61061082610385565b61061a8133610624565b6103b7838361070c565b61062e82826105de565b61043657610646816001600160a01b03166014610771565b610651836020610771565b604051602001610662929190610d22565b60408051601f198184030181529082905262461bcd60e51b82526102ee91600401610d91565b61069282826105de565b610436576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556106c83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61071682826105de565b15610436576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606000610780836002610dba565b61078b906002610dd1565b6001600160401b038111156107a2576107a2610b86565b6040519080825280601f01601f1916602001820160405280156107cc576020820181803683370190505b509050600360fc1b816000815181106107e7576107e7610c8b565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061081657610816610c8b565b60200101906001600160f81b031916908160001a905350600061083a846002610dba565b610845906001610dd1565b90505b60018111156108bd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061087957610879610c8b565b1a60f81b82828151811061088f5761088f610c8b565b60200101906001600160f81b031916908160001a90535060049490941c936108b681610de4565b9050610848565b50831561090c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016102ee565b9392505050565b60006020828403121561092557600080fd5b81356001600160e01b03198116811461090c57600080fd5b60008083601f84011261094f57600080fd5b5081356001600160401b0381111561096657600080fd5b6020830191508360208260051b850101111561098157600080fd5b9250929050565b6000806000806040858703121561099e57600080fd5b84356001600160401b03808211156109b557600080fd5b6109c18883890161093d565b909650945060208701359150808211156109da57600080fd5b818701915087601f8301126109ee57600080fd5b8135818111156109fd57600080fd5b886020828501011115610a0f57600080fd5b95989497505060200194505050565b600060208284031215610a3057600080fd5b5035919050565b80356001600160a01b0381168114610a4e57600080fd5b919050565b60008060408385031215610a6657600080fd5b82359150610a7660208401610a37565b90509250929050565b60008060208385031215610a9257600080fd5b82356001600160401b03811115610aa857600080fd5b610ab48582860161093d565b90969095509350505050565b60005b83811015610adb578181015183820152602001610ac3565b50506000910152565b60008151808452610afc816020860160208601610ac0565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610b7857888303603f190185528151805115158452870151878401879052610b6587850182610ae4565b9588019593505090860190600101610b37565b509098975050505050505050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610bae57600080fd5b81356001600160401b0380821115610bc557600080fd5b818401915084601f830112610bd957600080fd5b813581811115610beb57610beb610b86565b604051601f8201601f19908116603f01168101908382118183101715610c1357610c13610b86565b81604052828152876020848701011115610c2c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112610cb757600080fd5b9190910192915050565b600060208284031215610cd357600080fd5b61090c82610a37565b6000808335601e19843603018112610cf357600080fd5b8301803591506001600160401b03821115610d0d57600080fd5b60200191503681900382131561098157600080fd5b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351610d54816017850160208801610ac0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610d85816028840160208801610ac0565b01602801949350505050565b60208152600061090c6020830184610ae4565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761024c5761024c610da4565b8082018082111561024c5761024c610da4565b600081610df357610df3610da4565b50600019019056fed8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63a26469706673582212209978b8bda516f67a73f6b7126f53ee3a95fcd8285a11f9b82c70ab2ae2b65be564736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000069e0cc792af7ca5b8e6e0fa555d99c29d3009bdd
-----Decoded View---------------
Arg [0] : admin (address): 0x69E0cc792Af7cA5B8E6E0fA555D99c29D3009BdD
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000069e0cc792af7ca5b8e6e0fa555d99c29d3009bdd
Net Worth in USD
Net Worth in MNT
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.