Source Code
Overview
POL Balance
0 POL
Token Holdings
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 494 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Batch Process Ac... | 15553857 | 30 days ago | IN | 0 POL | 0.00211331 | ||||
Batch Process Ac... | 15553838 | 30 days ago | IN | 0 POL | 0.00281568 | ||||
Batch Process Ac... | 15553615 | 30 days ago | IN | 0 POL | 0.00238552 | ||||
Batch Process Ac... | 15553609 | 30 days ago | IN | 0 POL | 0.00227969 | ||||
Batch Process Ac... | 15553604 | 30 days ago | IN | 0 POL | 0.00225393 | ||||
Batch Process Ac... | 15553004 | 30 days ago | IN | 0 POL | 0.00184465 | ||||
Batch Process Ac... | 15552992 | 30 days ago | IN | 0 POL | 0.00191504 | ||||
Batch Process Ac... | 15552986 | 30 days ago | IN | 0 POL | 0.00190008 | ||||
Batch Process Ac... | 15552851 | 30 days ago | IN | 0 POL | 0.00190912 | ||||
Batch Process Ac... | 15552848 | 30 days ago | IN | 0 POL | 0.00190206 | ||||
Batch Process Ac... | 15552842 | 30 days ago | IN | 0 POL | 0.00189762 | ||||
Batch Process Ac... | 15552501 | 30 days ago | IN | 0 POL | 0.00232942 | ||||
Batch Process Ac... | 15552498 | 30 days ago | IN | 0 POL | 0.00204154 | ||||
Batch Process Ac... | 15552493 | 30 days ago | IN | 0 POL | 0.00126787 | ||||
Batch Process Ac... | 15551692 | 30 days ago | IN | 0 POL | 0.00218535 | ||||
Batch Process Ac... | 15551681 | 30 days ago | IN | 0 POL | 0.00218798 | ||||
Batch Process Ac... | 15550988 | 30 days ago | IN | 0 POL | 0.00272714 | ||||
Batch Process Ac... | 15550983 | 30 days ago | IN | 0 POL | 0.00163518 | ||||
Batch Process Ac... | 15550977 | 30 days ago | IN | 0 POL | 0.00256826 | ||||
Batch Process Ac... | 15550914 | 30 days ago | IN | 0 POL | 0.0025322 | ||||
Batch Process Ac... | 15550909 | 30 days ago | IN | 0 POL | 0.00251639 | ||||
Batch Process Ac... | 15550705 | 30 days ago | IN | 0 POL | 0.00238904 | ||||
Batch Process Ac... | 15281857 | 37 days ago | IN | 0 POL | 0.00196279 | ||||
Batch Process Ac... | 15248468 | 38 days ago | IN | 0 POL | 0.0139677 | ||||
Batch Process Ac... | 15212533 | 39 days ago | IN | 0 POL | 0.00184766 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
StepnGoAssetsDeposit
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import {IERC1155Receiver} from "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; contract StepnGoAssetsDeposit is AccessControl, ReentrancyGuard, IERC721Receiver, IERC1155Receiver { bytes32 public constant CONTRACT_SIGNER = keccak256("CONTRACT_SIGNER"); uint256 public actionNo; struct SendOutParams { address _to; address _token_addr; uint256 _token_key; uint256 _num; } event SendOutEvent(SendOutParams _params, uint256 _actionNo); constructor() { actionNo = 0; _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantRole(CONTRACT_SIGNER, msg.sender); } function _sendOut(bytes memory _encodedParams) internal nonReentrant { SendOutParams memory params = abi.decode( _encodedParams, (SendOutParams) ); require(params._to != address(0), "To can not be zero address"); require(params._num > 0, "Num must be greater than 0"); if (params._token_addr == address(0) && params._token_key == 0) { (bool success, ) = params._to.call{value: params._num}(""); require(success, "Native token transfer failed"); } else if (params._token_addr != address(0) && params._token_key == 0) { require( IERC20(params._token_addr).transfer( address(params._to), params._num ), "Token transfer failed" ); } else { if ( IERC165(params._token_addr).supportsInterface( type(IERC721).interfaceId ) ) { IERC721(params._token_addr).safeTransferFrom( address(this), params._to, params._token_key ); } else if ( IERC165(params._token_addr).supportsInterface( type(IERC1155).interfaceId ) ) { IERC1155(params._token_addr).safeTransferFrom( address(this), params._to, params._token_key, params._num, "" ); } else { revert("Unsupported token type"); } } actionNo++; emit SendOutEvent(params, actionNo); } function batchProcessActions( bytes[] memory _encodedActions ) external onlyRole(CONTRACT_SIGNER) { require(_encodedActions.length != 0, "Actions cannot be empty"); for (uint32 i = 0; i < _encodedActions.length; i++) { _sendOut(_encodedActions[i]); } } // Implementing IERC721Receiver function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } // Implementing IERC1155Receiver function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; import {IAccessControl} from "./IAccessControl.sol"; import {Context} from "../utils/Context.sol"; import {ERC165} from "../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: * * ```solidity * 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}: * * ```solidity * 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. We recommend using {AccessControlDefaultAdminRules} * to enforce additional security measures for this role. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address account => bool) hasRole; bytes32 adminRole; } mapping(bytes32 role => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with an {AccessControlUnauthorizedAccount} error including the required role. */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @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 virtual returns (bool) { return _roles[role].hasRole[account]; } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()` * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier. */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account` * is missing `role`. */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert AccessControlUnauthorizedAccount(account, role); } } /** * @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 virtual 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. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual 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. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual 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 `callerConfirmation`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address callerConfirmation) public virtual { if (callerConfirmation != _msgSender()) { revert AccessControlBadConfirmation(); } _revokeRole(role, callerConfirmation); } /** * @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 Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual returns (bool) { if (!hasRole(role, account)) { _roles[role].hasRole[account] = true; emit RoleGranted(role, account, _msgSender()); return true; } else { return false; } } /** * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual returns (bool) { if (hasRole(role, account)) { _roles[role].hasRole[account] = false; emit RoleRevoked(role, account, _msgSender()); return true; } else { return false; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol) pragma solidity ^0.8.20; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev The `account` is missing a role. */ error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); /** * @dev The caller of a function is not the expected one. * * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}. */ error AccessControlBadConfirmation(); /** * @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. */ 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 `callerConfirmation`. */ function renounceRole(bytes32 role, address callerConfirmation) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the value of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`. * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155Received} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `value` amount. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155BatchReceived} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. * * Requirements: * * - `ids` and `values` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Interface that must be implemented by smart contracts in order to receive * ERC-1155 token transfers. */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.20; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be * reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// 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.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "./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); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// 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 // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"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"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token_addr","type":"address"},{"internalType":"uint256","name":"_token_key","type":"uint256"},{"internalType":"uint256","name":"_num","type":"uint256"}],"indexed":false,"internalType":"struct StepnGoAssetsDeposit.SendOutParams","name":"_params","type":"tuple"},{"indexed":false,"internalType":"uint256","name":"_actionNo","type":"uint256"}],"name":"SendOutEvent","type":"event"},{"inputs":[],"name":"CONTRACT_SIGNER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"actionNo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"_encodedActions","type":"bytes[]"}],"name":"batchProcessActions","outputs":[],"stateMutability":"nonpayable","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":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","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
608060405234801561001057600080fd5b5060018055600060028190556100269033610057565b506100517f777744adc79e45aa7f6e2b8dbc6e51d125db6f19d5e0b9a53c8d5244d3797d4133610057565b50610103565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166100f9576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556100b13390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016100fd565b5060005b92915050565b610fe6806101126000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063535aec201161008c578063bc197c8111610066578063bc197c81146101c4578063d547741f146101e6578063f23a6e61146101f9578063fb1575e11461021957600080fd5b8063535aec201461019657806391d14854146101a9578063a217fddf146101bc57600080fd5b806301ffc9a7146100d457806314f49190146100fc578063150b7a0214610113578063248a9ca31461014b5780632f2ff15d1461016e57806336568abe14610183575b600080fd5b6100e76100e2366004610a85565b610240565b60405190151581526020015b60405180910390f35b61010560025481565b6040519081526020016100f3565b610132610121366004610b14565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016100f3565b610105610159366004610b87565b60009081526020819052604090206001015490565b61018161017c366004610ba0565b610277565b005b610181610191366004610ba0565b6102a2565b6101816101a4366004610c17565b6102da565b6100e76101b7366004610ba0565b6103a6565b610105600081565b6101326101d2366004610d76565b63bc197c8160e01b98975050505050505050565b6101816101f4366004610ba0565b6103cf565b610132610207366004610e35565b63f23a6e6160e01b9695505050505050565b6101057f777744adc79e45aa7f6e2b8dbc6e51d125db6f19d5e0b9a53c8d5244d3797d4181565b60006001600160e01b03198216637965db0b60e01b148061027157506301ffc9a760e01b6001600160e01b03198316145b92915050565b600082815260208190526040902060010154610292816103f4565b61029c8383610401565b50505050565b6001600160a01b03811633146102cb5760405163334bd91960e11b815260040160405180910390fd5b6102d58282610493565b505050565b7f777744adc79e45aa7f6e2b8dbc6e51d125db6f19d5e0b9a53c8d5244d3797d41610304816103f4565b815160000361035a5760405162461bcd60e51b815260206004820152601760248201527f416374696f6e732063616e6e6f7420626520656d70747900000000000000000060448201526064015b60405180910390fd5b60005b82518163ffffffff1610156102d557610394838263ffffffff168151811061038757610387610eb1565b60200260200101516104fe565b8061039e81610edd565b91505061035d565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000828152602081905260409020600101546103ea816103f4565b61029c8383610493565b6103fe8133610a1e565b50565b600061040d83836103a6565b61048b576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556104433390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610271565b506000610271565b600061049f83836103a6565b1561048b576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610271565b610506610a5b565b60008180602001905181019061051c9190610f00565b80519091506001600160a01b03166105765760405162461bcd60e51b815260206004820152601a60248201527f546f2063616e206e6f74206265207a65726f20616464726573730000000000006044820152606401610351565b60008160600151116105ca5760405162461bcd60e51b815260206004820152601a60248201527f4e756d206d7573742062652067726561746572207468616e20300000000000006044820152606401610351565b60208101516001600160a01b03161580156105e757506040810151155b1561069857805160608201516040516000926001600160a01b031691908381818185875af1925050503d806000811461063c576040519150601f19603f3d011682016040523d82523d6000602084013e610641565b606091505b50509050806106925760405162461bcd60e51b815260206004820152601c60248201527f4e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610351565b50610997565b60208101516001600160a01b0316158015906106b657506040810151155b156107845760208101518151606083015160405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015610717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073b9190610f75565b61077f5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610351565b610997565b60208101516040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b03909116906301ffc9a790602401602060405180830381865afa1580156107d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f99190610f75565b1561087957602081015181516040808401519051632142170760e11b81523060048201526001600160a01b03928316602482015260448101919091529116906342842e0e906064015b600060405180830381600087803b15801561085c57600080fd5b505af1158015610870573d6000803e3d6000fd5b50505050610997565b60208101516040516301ffc9a760e01b8152636cdb3d1360e11b60048201526001600160a01b03909116906301ffc9a790602401602060405180830381865afa1580156108ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee9190610f75565b15610956576020810151815160408084015160608501519151637921219560e11b81523060048201526001600160a01b0393841660248201526044810191909152606481019190915260a06084820152600060a482015291169063f242432a9060c401610842565b60405162461bcd60e51b8152602060048201526016602482015275556e737570706f7274656420746f6b656e207479706560501b6044820152606401610351565b600280549060006109a783610f97565b90915550506002546040805183516001600160a01b039081168252602080860151909116908201528382015181830152606080850151908201526080810192909252517fb8fb62b1cf9a66d9f111641904283105c78b45989ebbfe59216b4ec27523b11a9181900360a00190a1506103fe60018055565b610a2882826103a6565b610a575760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610351565b5050565b600260015403610a7e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b600060208284031215610a9757600080fd5b81356001600160e01b031981168114610aaf57600080fd5b9392505050565b6001600160a01b03811681146103fe57600080fd5b60008083601f840112610add57600080fd5b50813567ffffffffffffffff811115610af557600080fd5b602083019150836020828501011115610b0d57600080fd5b9250929050565b600080600080600060808688031215610b2c57600080fd5b8535610b3781610ab6565b94506020860135610b4781610ab6565b935060408601359250606086013567ffffffffffffffff811115610b6a57600080fd5b610b7688828901610acb565b969995985093965092949392505050565b600060208284031215610b9957600080fd5b5035919050565b60008060408385031215610bb357600080fd5b823591506020830135610bc581610ab6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610c0f57610c0f610bd0565b604052919050565b60006020808385031215610c2a57600080fd5b823567ffffffffffffffff80821115610c4257600080fd5b8185019150601f86601f840112610c5857600080fd5b823582811115610c6a57610c6a610bd0565b8060051b610c79868201610be6565b918252848101860191868101908a841115610c9357600080fd5b87870192505b83831015610d2357823586811115610cb15760008081fd5b8701603f81018c13610cc35760008081fd5b88810135604088821115610cd957610cd9610bd0565b610cea828901601f19168c01610be6565b8281528e82848601011115610cff5760008081fd5b828285018d83013760009281018c0192909252508352509187019190870190610c99565b9a9950505050505050505050565b60008083601f840112610d4357600080fd5b50813567ffffffffffffffff811115610d5b57600080fd5b6020830191508360208260051b8501011115610b0d57600080fd5b60008060008060008060008060a0898b031215610d9257600080fd5b8835610d9d81610ab6565b97506020890135610dad81610ab6565b9650604089013567ffffffffffffffff80821115610dca57600080fd5b610dd68c838d01610d31565b909850965060608b0135915080821115610def57600080fd5b610dfb8c838d01610d31565b909650945060808b0135915080821115610e1457600080fd5b50610e218b828c01610acb565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215610e4e57600080fd5b8635610e5981610ab6565b95506020870135610e6981610ab6565b94506040870135935060608701359250608087013567ffffffffffffffff811115610e9357600080fd5b610e9f89828a01610acb565b979a9699509497509295939492505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818103610ef657610ef6610ec7565b6001019392505050565b600060808284031215610f1257600080fd5b6040516080810181811067ffffffffffffffff82111715610f3557610f35610bd0565b6040528251610f4381610ab6565b81526020830151610f5381610ab6565b6020820152604083810151908201526060928301519281019290925250919050565b600060208284031215610f8757600080fd5b81518015158114610aaf57600080fd5b600060018201610fa957610fa9610ec7565b506001019056fea26469706673582212206f9f4eaebec55ef03bb46e8773ad518013628ea2084a80d312bba41c7b50768b64736f6c63430008180033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063535aec201161008c578063bc197c8111610066578063bc197c81146101c4578063d547741f146101e6578063f23a6e61146101f9578063fb1575e11461021957600080fd5b8063535aec201461019657806391d14854146101a9578063a217fddf146101bc57600080fd5b806301ffc9a7146100d457806314f49190146100fc578063150b7a0214610113578063248a9ca31461014b5780632f2ff15d1461016e57806336568abe14610183575b600080fd5b6100e76100e2366004610a85565b610240565b60405190151581526020015b60405180910390f35b61010560025481565b6040519081526020016100f3565b610132610121366004610b14565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016100f3565b610105610159366004610b87565b60009081526020819052604090206001015490565b61018161017c366004610ba0565b610277565b005b610181610191366004610ba0565b6102a2565b6101816101a4366004610c17565b6102da565b6100e76101b7366004610ba0565b6103a6565b610105600081565b6101326101d2366004610d76565b63bc197c8160e01b98975050505050505050565b6101816101f4366004610ba0565b6103cf565b610132610207366004610e35565b63f23a6e6160e01b9695505050505050565b6101057f777744adc79e45aa7f6e2b8dbc6e51d125db6f19d5e0b9a53c8d5244d3797d4181565b60006001600160e01b03198216637965db0b60e01b148061027157506301ffc9a760e01b6001600160e01b03198316145b92915050565b600082815260208190526040902060010154610292816103f4565b61029c8383610401565b50505050565b6001600160a01b03811633146102cb5760405163334bd91960e11b815260040160405180910390fd5b6102d58282610493565b505050565b7f777744adc79e45aa7f6e2b8dbc6e51d125db6f19d5e0b9a53c8d5244d3797d41610304816103f4565b815160000361035a5760405162461bcd60e51b815260206004820152601760248201527f416374696f6e732063616e6e6f7420626520656d70747900000000000000000060448201526064015b60405180910390fd5b60005b82518163ffffffff1610156102d557610394838263ffffffff168151811061038757610387610eb1565b60200260200101516104fe565b8061039e81610edd565b91505061035d565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000828152602081905260409020600101546103ea816103f4565b61029c8383610493565b6103fe8133610a1e565b50565b600061040d83836103a6565b61048b576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556104433390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610271565b506000610271565b600061049f83836103a6565b1561048b576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610271565b610506610a5b565b60008180602001905181019061051c9190610f00565b80519091506001600160a01b03166105765760405162461bcd60e51b815260206004820152601a60248201527f546f2063616e206e6f74206265207a65726f20616464726573730000000000006044820152606401610351565b60008160600151116105ca5760405162461bcd60e51b815260206004820152601a60248201527f4e756d206d7573742062652067726561746572207468616e20300000000000006044820152606401610351565b60208101516001600160a01b03161580156105e757506040810151155b1561069857805160608201516040516000926001600160a01b031691908381818185875af1925050503d806000811461063c576040519150601f19603f3d011682016040523d82523d6000602084013e610641565b606091505b50509050806106925760405162461bcd60e51b815260206004820152601c60248201527f4e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610351565b50610997565b60208101516001600160a01b0316158015906106b657506040810151155b156107845760208101518151606083015160405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015610717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073b9190610f75565b61077f5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610351565b610997565b60208101516040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b03909116906301ffc9a790602401602060405180830381865afa1580156107d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f99190610f75565b1561087957602081015181516040808401519051632142170760e11b81523060048201526001600160a01b03928316602482015260448101919091529116906342842e0e906064015b600060405180830381600087803b15801561085c57600080fd5b505af1158015610870573d6000803e3d6000fd5b50505050610997565b60208101516040516301ffc9a760e01b8152636cdb3d1360e11b60048201526001600160a01b03909116906301ffc9a790602401602060405180830381865afa1580156108ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee9190610f75565b15610956576020810151815160408084015160608501519151637921219560e11b81523060048201526001600160a01b0393841660248201526044810191909152606481019190915260a06084820152600060a482015291169063f242432a9060c401610842565b60405162461bcd60e51b8152602060048201526016602482015275556e737570706f7274656420746f6b656e207479706560501b6044820152606401610351565b600280549060006109a783610f97565b90915550506002546040805183516001600160a01b039081168252602080860151909116908201528382015181830152606080850151908201526080810192909252517fb8fb62b1cf9a66d9f111641904283105c78b45989ebbfe59216b4ec27523b11a9181900360a00190a1506103fe60018055565b610a2882826103a6565b610a575760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610351565b5050565b600260015403610a7e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b600060208284031215610a9757600080fd5b81356001600160e01b031981168114610aaf57600080fd5b9392505050565b6001600160a01b03811681146103fe57600080fd5b60008083601f840112610add57600080fd5b50813567ffffffffffffffff811115610af557600080fd5b602083019150836020828501011115610b0d57600080fd5b9250929050565b600080600080600060808688031215610b2c57600080fd5b8535610b3781610ab6565b94506020860135610b4781610ab6565b935060408601359250606086013567ffffffffffffffff811115610b6a57600080fd5b610b7688828901610acb565b969995985093965092949392505050565b600060208284031215610b9957600080fd5b5035919050565b60008060408385031215610bb357600080fd5b823591506020830135610bc581610ab6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610c0f57610c0f610bd0565b604052919050565b60006020808385031215610c2a57600080fd5b823567ffffffffffffffff80821115610c4257600080fd5b8185019150601f86601f840112610c5857600080fd5b823582811115610c6a57610c6a610bd0565b8060051b610c79868201610be6565b918252848101860191868101908a841115610c9357600080fd5b87870192505b83831015610d2357823586811115610cb15760008081fd5b8701603f81018c13610cc35760008081fd5b88810135604088821115610cd957610cd9610bd0565b610cea828901601f19168c01610be6565b8281528e82848601011115610cff5760008081fd5b828285018d83013760009281018c0192909252508352509187019190870190610c99565b9a9950505050505050505050565b60008083601f840112610d4357600080fd5b50813567ffffffffffffffff811115610d5b57600080fd5b6020830191508360208260051b8501011115610b0d57600080fd5b60008060008060008060008060a0898b031215610d9257600080fd5b8835610d9d81610ab6565b97506020890135610dad81610ab6565b9650604089013567ffffffffffffffff80821115610dca57600080fd5b610dd68c838d01610d31565b909850965060608b0135915080821115610def57600080fd5b610dfb8c838d01610d31565b909650945060808b0135915080821115610e1457600080fd5b50610e218b828c01610acb565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215610e4e57600080fd5b8635610e5981610ab6565b95506020870135610e6981610ab6565b94506040870135935060608701359250608087013567ffffffffffffffff811115610e9357600080fd5b610e9f89828a01610acb565b979a9699509497509295939492505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818103610ef657610ef6610ec7565b6001019392505050565b600060808284031215610f1257600080fd5b6040516080810181811067ffffffffffffffff82111715610f3557610f35610bd0565b6040528251610f4381610ab6565b81526020830151610f5381610ab6565b6020820152604083810151908201526060928301519281019290925250919050565b600060208284031215610f8757600080fd5b81518015158114610aaf57600080fd5b600060018201610fa957610fa9610ec7565b506001019056fea26469706673582212206f9f4eaebec55ef03bb46e8773ad518013628ea2084a80d312bba41c7b50768b64736f6c63430008180033
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.