Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,845 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 14068438 | 1077 days ago | IN | 0 ETH | 0.00538037 | ||||
Buy Asset | 13986537 | 1090 days ago | IN | 0.05 ETH | 0.063752 | ||||
Buy Asset | 13986535 | 1090 days ago | IN | 0.5 ETH | 0.00587881 | ||||
Buy Asset | 13986535 | 1090 days ago | IN | 0.05 ETH | 0.00587881 | ||||
Withdraw Funds | 13980824 | 1090 days ago | IN | 0 ETH | 0.00523326 | ||||
Buy Asset | 13979609 | 1091 days ago | IN | 0.01 ETH | 0.00468506 | ||||
Buy Asset | 13975892 | 1091 days ago | IN | 0.01 ETH | 0.00283835 | ||||
Buy Asset | 13975826 | 1091 days ago | IN | 0.01 ETH | 0.00342078 | ||||
Buy Asset | 13975824 | 1091 days ago | IN | 0.01 ETH | 0.00341251 | ||||
Buy Asset | 13975783 | 1091 days ago | IN | 0.01 ETH | 0.00513384 | ||||
Buy Asset | 13975782 | 1091 days ago | IN | 0.01 ETH | 0.00523324 | ||||
Buy Asset | 13975782 | 1091 days ago | IN | 0.01 ETH | 0.00523324 | ||||
Buy Asset | 13975782 | 1091 days ago | IN | 0.01 ETH | 0.00523324 | ||||
Buy Asset | 13975770 | 1091 days ago | IN | 0.01 ETH | 0.00730449 | ||||
Buy Asset | 13975740 | 1091 days ago | IN | 0.01 ETH | 0.00948749 | ||||
Buy Asset | 13975728 | 1091 days ago | IN | 0.01 ETH | 0.00672021 | ||||
Buy Asset | 13975728 | 1091 days ago | IN | 0.01 ETH | 0.00672021 | ||||
Buy Asset | 13975724 | 1091 days ago | IN | 0.01 ETH | 0.00542985 | ||||
Buy Asset | 13975724 | 1091 days ago | IN | 0.01 ETH | 0.00736763 | ||||
Buy Asset | 13975716 | 1091 days ago | IN | 0.01 ETH | 0.00660266 | ||||
Buy Asset | 13975713 | 1091 days ago | IN | 0.01 ETH | 0.0075823 | ||||
Buy Asset | 13975713 | 1091 days ago | IN | 0.01 ETH | 0.0075823 | ||||
Buy Asset | 13975713 | 1091 days ago | IN | 0.01 ETH | 0.0075823 | ||||
Buy Asset | 13975712 | 1091 days ago | IN | 0.01 ETH | 0.00782828 | ||||
Buy Asset | 13975711 | 1091 days ago | IN | 0.01 ETH | 0.00806234 |
Loading...
Loading
Contract Name:
FlufMarketplace
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 20 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; contract FlufMarketplace is ERC1155Holder, Ownable { // Struct for setting individual assetPrices struct assetPrice { uint256 price; } // Asset Type => ERC1155 Contract Address mapping(string => address) public assetAddress; // Price set for Asset Type mapping (uint => assetPrice) public assetPricing; mapping (uint => mapping(address => bool)) public whiteList; mapping (uint => bool) public whiteListEnabled; address public flufAssetsAddress; constructor() { flufAssetsAddress = 0x7EF2e0048f5bAeDe046f6BF797943daF4ED8CB47; } function setFlufAssetsAddress(address _address) public onlyOwner { flufAssetsAddress = _address; } function setWhiteList(address[] calldata _addresses, uint assetId, bool _state) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) { whiteList[assetId][_addresses[i]] = _state; } // Since we are setting a whitelist, it's pretty obvious that whitelisting has to be enabled for this tokenId whiteListEnabled[assetId] = true; } function setWhiteListState(uint[] calldata _assetIds, bool _state) public onlyOwner{ for (uint i = 0; i < _assetIds.length; i++) { whiteListEnabled[_assetIds[i]] = _state; } } function listNewAssetType(address _address, string memory _name) public onlyOwner returns (bool) { assetAddress[_name] = _address; return true; } function changeAssetPrice(uint256 assetId, uint256 newPrice) public payable onlyOwner { require(assetId >= 0, "You can't change the price of an asset sub zero"); require(newPrice >= 0, "You can't give away assets for free"); assetPrice storage c = assetPricing[assetId]; c.price = newPrice; } function changeAssetPriceBatch(uint256[] memory assetIds, uint256[] memory newPrices) public payable onlyOwner { for(uint x = 0; x < assetIds.length; x++) { require(assetIds[x] >= 0, "You can't change the price of an asset sub zero"); require(newPrices[x] >= 0, "You can't give away assets for free"); assetPrice storage c = assetPricing[assetIds[x]]; c.price = newPrices[x]; } } function withdrawFunds() public onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } function isVaultStocked(uint256 assetId, uint256 quantity) public view returns (bool) { // Use the assetTypeName to lookup contract address, store balanceOf for comparison // Swap with marketplace balance check uint256 assetCount = IERC1155(flufAssetsAddress).balanceOf(address(this), assetId); return assetCount >= quantity; } function buyAsset(uint256 assetId, uint256 quantity) public payable { // If whitelist is enabled for this assetID we should check if the user is whitelisted if(whiteListEnabled[assetId] == true){ require(whiteList[assetId][msg.sender] == true, "WHITELIST HALT: You are not whitelisted for this drop, check back later.."); } // Check that vault has asset available require(isVaultStocked(assetId, quantity), "VAULT HALT: The asset you are trying to buy is not available"); // Check that msg.sender sent enough for price require(msg.value == getAssetPrice(assetId) * quantity, "MARKET STOP: You must send the proper value to buy asset"); IERC1155(flufAssetsAddress).safeTransferFrom(address(this), msg.sender, assetId, quantity, ""); } function getEthBalance() public view returns (uint256) { return address(this).balance; } function getAssetPrice(uint assetId) public view returns(uint256) { return assetPricing[assetId].price; } function emergencyTokenWithdraw(uint256 _asset, uint256 _amount) public payable onlyOwner { IERC1155(flufAssetsAddress).safeTransferFrom(address(this), msg.sender, _asset, _amount, ""); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Receiver) returns (bool) { return super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT 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 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 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 pragma solidity ^0.8.0; import "../IERC1155Receiver.sol"; import "../../../utils/introspection/ERC165.sol"; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC1155Receiver.sol"; /** * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ 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. 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. 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 pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token 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 amount 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 `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `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 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` 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 amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT 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 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 granted `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}. * ==== */ 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); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 20 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"assetAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"assetPricing","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"buyAsset","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changeAssetPrice","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"uint256[]","name":"newPrices","type":"uint256[]"}],"name":"changeAssetPriceBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_asset","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyTokenWithdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"flufAssetsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"isVaultStocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"listNewAssetType","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setFlufAssetsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_assetIds","type":"uint256[]"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhiteListState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whiteListEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061002161001c61004c565b610050565b600580546001600160a01b031916737ef2e0048f5baede046f6bf797943daf4ed8cb471790556100a0565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6114f2806100af6000396000f3fe6080604052600436106101105760003560e01c806301ffc9a71461011557806309b69e8d1461014b57806311ff63cb146101605780631f9270851461018057806324600fc3146101a05780632eefdce1146101b55780634c38358e146101d55780635e694cf5146101e85780635ff4225914610215578063652aa955146102375780636f06875b1461025757806370ed0ada14610277578063715018a61461028c57806383e6373d146102a15780638da5cb5b146102c1578063992ccbdc146102d6578063a20b0440146102f6578063a4e9c2f414610309578063b37bc8b414610329578063bc197c8114610349578063e7d674d014610376578063f23a6e6114610389578063f2fde38b146103a9575b600080fd5b34801561012157600080fd5b50610135610130366004611058565b6103c9565b60405161014291906111d4565b60405180910390f35b61015e610159366004611115565b6103dc565b005b34801561016c57600080fd5b5061015e61017b366004610f57565b610503565b34801561018c57600080fd5b5061015e61019b366004610fb1565b6105eb565b3480156101ac57600080fd5b5061015e61069f565b3480156101c157600080fd5b5061015e6101d0366004610de4565b610711565b61015e6101e3366004611115565b610772565b3480156101f457600080fd5b506102086102033660046110ba565b6107c3565b6040516101429190611424565b34801561022157600080fd5b5061022a6107d5565b604051610142919061116f565b34801561024357600080fd5b50610135610252366004611115565b6107e4565b34801561026357600080fd5b506102086102723660046110ba565b610874565b34801561028357600080fd5b50610208610886565b34801561029857600080fd5b5061015e61088a565b3480156102ad57600080fd5b506101356102bc366004610f0c565b6108d5565b3480156102cd57600080fd5b5061022a61095f565b3480156102e257600080fd5b506101356102f13660046110ba565b61096e565b61015e610304366004611115565b610983565b34801561031557600080fd5b5061022a610324366004611080565b6109c2565b34801561033557600080fd5b506101356103443660046110ea565b6109e8565b34801561035557600080fd5b50610369610364366004610e05565b610a08565b60405161014291906111df565b61015e610384366004611002565b610a19565b34801561039557600080fd5b506103696103a4366004610eaa565b610b76565b3480156103b557600080fd5b5061015e6103c4366004610de4565b610b87565b60006103d482610bf8565b90505b919050565b60008281526004602052604090205460ff1615156001141561043f57600082815260036020908152604080832033845290915290205460ff16151560011461043f5760405162461bcd60e51b815260040161043690611380565b60405180910390fd5b61044982826107e4565b6104655760405162461bcd60e51b815260040161043690611237565b8061046f836107c3565b6104799190611456565b34146104975760405162461bcd60e51b815260040161043690611328565b600554604051637921219560e11b81526001600160a01b039091169063f242432a906104cd903090339087908790600401611183565b600060405180830381600087803b1580156104e757600080fd5b505af11580156104fb573d6000803e3d6000fd5b505050505050565b61050b610c1d565b6001600160a01b031661051c61095f565b6001600160a01b0316146105425760405162461bcd60e51b8152600401610436906113ef565b60005b838110156105cc576000838152600360205260408120839187878581811061057d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906105929190610de4565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806105c481611475565b915050610545565b50506000908152600460205260409020805460ff191660011790555050565b6105f3610c1d565b6001600160a01b031661060461095f565b6001600160a01b03161461062a5760405162461bcd60e51b8152600401610436906113ef565b60005b8281101561069957816004600086868581811061065a57634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550808061069190611475565b91505061062d565b50505050565b6106a7610c1d565b6001600160a01b03166106b861095f565b6001600160a01b0316146106de5760405162461bcd60e51b8152600401610436906113ef565b6040514790339082156108fc029083906000818181858888f1935050505015801561070d573d6000803e3d6000fd5b5050565b610719610c1d565b6001600160a01b031661072a61095f565b6001600160a01b0316146107505760405162461bcd60e51b8152600401610436906113ef565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61077a610c1d565b6001600160a01b031661078b61095f565b6001600160a01b0316146107b15760405162461bcd60e51b8152600401610436906113ef565b60009182526002602052604090912055565b60009081526002602052604090205490565b6005546001600160a01b031681565b600554604051627eeac760e11b815260009182916001600160a01b039091169062fdd58e9061081990309088906004016111bb565b60206040518083038186803b15801561083157600080fd5b505afa158015610845573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086991906110d2565b909211159392505050565b60026020526000908152604090205481565b4790565b610892610c1d565b6001600160a01b03166108a361095f565b6001600160a01b0316146108c95760405162461bcd60e51b8152600401610436906113ef565b6108d36000610c21565b565b60006108df610c1d565b6001600160a01b03166108f061095f565b6001600160a01b0316146109165760405162461bcd60e51b8152600401610436906113ef565b826001836040516109279190611136565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905550600192915050565b6000546001600160a01b031690565b60046020526000908152604090205460ff1681565b61098b610c1d565b6001600160a01b031661099c61095f565b6001600160a01b0316146104975760405162461bcd60e51b8152600401610436906113ef565b80516020818301810180516001825292820191909301209152546001600160a01b031681565b600360209081526000928352604080842090915290825290205460ff1681565b63bc197c8160e01b95945050505050565b610a21610c1d565b6001600160a01b0316610a3261095f565b6001600160a01b031614610a585760405162461bcd60e51b8152600401610436906113ef565b60005b8251811015610b71576000838281518110610a8657634e487b7160e01b600052603260045260246000fd5b60200260200101511015610aac5760405162461bcd60e51b8152600401610436906112d9565b6000828281518110610ace57634e487b7160e01b600052603260045260246000fd5b60200260200101511015610af45760405162461bcd60e51b8152600401610436906111f4565b600060026000858481518110610b1a57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000209050828281518110610b5257634e487b7160e01b600052603260045260246000fd5b6020908102919091010151905580610b6981611475565b915050610a5b565b505050565b63f23a6e6160e01b95945050505050565b610b8f610c1d565b6001600160a01b0316610ba061095f565b6001600160a01b031614610bc65760405162461bcd60e51b8152600401610436906113ef565b6001600160a01b038116610bec5760405162461bcd60e51b815260040161043690611293565b610bf581610c21565b50565b60006001600160e01b03198216630271189760e51b14806103d457506103d482610c71565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160e01b031981166301ffc9a760e01b14919050565b80356001600160a01b03811681146103d757600080fd5b60008083601f840112610cb2578182fd5b5081356001600160401b03811115610cc8578182fd5b6020830191508360208083028501011115610ce257600080fd5b9250929050565b600082601f830112610cf9578081fd5b813560206001600160401b03821115610d1457610d146114a6565b808202610d2282820161142d565b838152828101908684018388018501891015610d3c578687fd5b8693505b85841015610d5e578035835260019390930192918401918401610d40565b50979650505050505050565b803580151581146103d757600080fd5b600082601f830112610d8a578081fd5b81356001600160401b03811115610da357610da36114a6565b610db6601f8201601f191660200161142d565b818152846020838601011115610dca578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215610df5578081fd5b610dfe82610c8a565b9392505050565b600080600080600060a08688031215610e1c578081fd5b610e2586610c8a565b9450610e3360208701610c8a565b935060408601356001600160401b0380821115610e4e578283fd5b610e5a89838a01610ce9565b94506060880135915080821115610e6f578283fd5b610e7b89838a01610ce9565b93506080880135915080821115610e90578283fd5b50610e9d88828901610d7a565b9150509295509295909350565b600080600080600060a08688031215610ec1578081fd5b610eca86610c8a565b9450610ed860208701610c8a565b9350604086013592506060860135915060808601356001600160401b03811115610f00578182fd5b610e9d88828901610d7a565b60008060408385031215610f1e578182fd5b610f2783610c8a565b915060208301356001600160401b03811115610f41578182fd5b610f4d85828601610d7a565b9150509250929050565b60008060008060608587031215610f6c578384fd5b84356001600160401b03811115610f81578485fd5b610f8d87828801610ca1565b90955093505060208501359150610fa660408601610d6a565b905092959194509250565b600080600060408486031215610fc5578283fd5b83356001600160401b03811115610fda578384fd5b610fe686828701610ca1565b9094509250610ff9905060208501610d6a565b90509250925092565b60008060408385031215611014578182fd5b82356001600160401b038082111561102a578384fd5b61103686838701610ce9565b9350602085013591508082111561104b578283fd5b50610f4d85828601610ce9565b600060208284031215611069578081fd5b81356001600160e01b031981168114610dfe578182fd5b600060208284031215611091578081fd5b81356001600160401b038111156110a6578182fd5b6110b284828501610d7a565b949350505050565b6000602082840312156110cb578081fd5b5035919050565b6000602082840312156110e3578081fd5b5051919050565b600080604083850312156110fc578182fd5b8235915061110c60208401610c8a565b90509250929050565b60008060408385031215611127578182fd5b50508035926020909101359150565b60008251815b81811015611156576020818601810151858301520161113c565b818111156111645782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b60208082526023908201527f596f752063616e2774206769766520617761792061737365747320666f72206660408201526272656560e81b606082015260800190565b6020808252603c908201527f5641554c542048414c543a2054686520617373657420796f752061726520747260408201527b79696e6720746f20627579206973206e6f7420617661696c61626c6560201b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602f908201527f596f752063616e2774206368616e676520746865207072696365206f6620616e60408201526e20617373657420737562207a65726f60881b606082015260800190565b60208082526038908201527f4d41524b45542053544f503a20596f75206d7573742073656e642074686520706040820152771c9bdc195c881d985b1d59481d1bc8189d5e48185cdcd95d60421b606082015260800190565b60208082526049908201527f57484954454c4953542048414c543a20596f7520617265206e6f74207768697460408201527f656c697374656420666f7220746869732064726f702c20636865636b2062616360608201526835903630ba32b9171760b91b608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b90815260200190565b6040518181016001600160401b038111828210171561144e5761144e6114a6565b604052919050565b600081600019048311821515161561147057611470611490565b500290565b600060001982141561148957611489611490565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220c71040cb58195f5fa118a56d0f4f03c81b157f6b55431b2a1a6db79266af820d64736f6c63430008000033
Deployed Bytecode
0x6080604052600436106101105760003560e01c806301ffc9a71461011557806309b69e8d1461014b57806311ff63cb146101605780631f9270851461018057806324600fc3146101a05780632eefdce1146101b55780634c38358e146101d55780635e694cf5146101e85780635ff4225914610215578063652aa955146102375780636f06875b1461025757806370ed0ada14610277578063715018a61461028c57806383e6373d146102a15780638da5cb5b146102c1578063992ccbdc146102d6578063a20b0440146102f6578063a4e9c2f414610309578063b37bc8b414610329578063bc197c8114610349578063e7d674d014610376578063f23a6e6114610389578063f2fde38b146103a9575b600080fd5b34801561012157600080fd5b50610135610130366004611058565b6103c9565b60405161014291906111d4565b60405180910390f35b61015e610159366004611115565b6103dc565b005b34801561016c57600080fd5b5061015e61017b366004610f57565b610503565b34801561018c57600080fd5b5061015e61019b366004610fb1565b6105eb565b3480156101ac57600080fd5b5061015e61069f565b3480156101c157600080fd5b5061015e6101d0366004610de4565b610711565b61015e6101e3366004611115565b610772565b3480156101f457600080fd5b506102086102033660046110ba565b6107c3565b6040516101429190611424565b34801561022157600080fd5b5061022a6107d5565b604051610142919061116f565b34801561024357600080fd5b50610135610252366004611115565b6107e4565b34801561026357600080fd5b506102086102723660046110ba565b610874565b34801561028357600080fd5b50610208610886565b34801561029857600080fd5b5061015e61088a565b3480156102ad57600080fd5b506101356102bc366004610f0c565b6108d5565b3480156102cd57600080fd5b5061022a61095f565b3480156102e257600080fd5b506101356102f13660046110ba565b61096e565b61015e610304366004611115565b610983565b34801561031557600080fd5b5061022a610324366004611080565b6109c2565b34801561033557600080fd5b506101356103443660046110ea565b6109e8565b34801561035557600080fd5b50610369610364366004610e05565b610a08565b60405161014291906111df565b61015e610384366004611002565b610a19565b34801561039557600080fd5b506103696103a4366004610eaa565b610b76565b3480156103b557600080fd5b5061015e6103c4366004610de4565b610b87565b60006103d482610bf8565b90505b919050565b60008281526004602052604090205460ff1615156001141561043f57600082815260036020908152604080832033845290915290205460ff16151560011461043f5760405162461bcd60e51b815260040161043690611380565b60405180910390fd5b61044982826107e4565b6104655760405162461bcd60e51b815260040161043690611237565b8061046f836107c3565b6104799190611456565b34146104975760405162461bcd60e51b815260040161043690611328565b600554604051637921219560e11b81526001600160a01b039091169063f242432a906104cd903090339087908790600401611183565b600060405180830381600087803b1580156104e757600080fd5b505af11580156104fb573d6000803e3d6000fd5b505050505050565b61050b610c1d565b6001600160a01b031661051c61095f565b6001600160a01b0316146105425760405162461bcd60e51b8152600401610436906113ef565b60005b838110156105cc576000838152600360205260408120839187878581811061057d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906105929190610de4565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806105c481611475565b915050610545565b50506000908152600460205260409020805460ff191660011790555050565b6105f3610c1d565b6001600160a01b031661060461095f565b6001600160a01b03161461062a5760405162461bcd60e51b8152600401610436906113ef565b60005b8281101561069957816004600086868581811061065a57634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550808061069190611475565b91505061062d565b50505050565b6106a7610c1d565b6001600160a01b03166106b861095f565b6001600160a01b0316146106de5760405162461bcd60e51b8152600401610436906113ef565b6040514790339082156108fc029083906000818181858888f1935050505015801561070d573d6000803e3d6000fd5b5050565b610719610c1d565b6001600160a01b031661072a61095f565b6001600160a01b0316146107505760405162461bcd60e51b8152600401610436906113ef565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61077a610c1d565b6001600160a01b031661078b61095f565b6001600160a01b0316146107b15760405162461bcd60e51b8152600401610436906113ef565b60009182526002602052604090912055565b60009081526002602052604090205490565b6005546001600160a01b031681565b600554604051627eeac760e11b815260009182916001600160a01b039091169062fdd58e9061081990309088906004016111bb565b60206040518083038186803b15801561083157600080fd5b505afa158015610845573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086991906110d2565b909211159392505050565b60026020526000908152604090205481565b4790565b610892610c1d565b6001600160a01b03166108a361095f565b6001600160a01b0316146108c95760405162461bcd60e51b8152600401610436906113ef565b6108d36000610c21565b565b60006108df610c1d565b6001600160a01b03166108f061095f565b6001600160a01b0316146109165760405162461bcd60e51b8152600401610436906113ef565b826001836040516109279190611136565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905550600192915050565b6000546001600160a01b031690565b60046020526000908152604090205460ff1681565b61098b610c1d565b6001600160a01b031661099c61095f565b6001600160a01b0316146104975760405162461bcd60e51b8152600401610436906113ef565b80516020818301810180516001825292820191909301209152546001600160a01b031681565b600360209081526000928352604080842090915290825290205460ff1681565b63bc197c8160e01b95945050505050565b610a21610c1d565b6001600160a01b0316610a3261095f565b6001600160a01b031614610a585760405162461bcd60e51b8152600401610436906113ef565b60005b8251811015610b71576000838281518110610a8657634e487b7160e01b600052603260045260246000fd5b60200260200101511015610aac5760405162461bcd60e51b8152600401610436906112d9565b6000828281518110610ace57634e487b7160e01b600052603260045260246000fd5b60200260200101511015610af45760405162461bcd60e51b8152600401610436906111f4565b600060026000858481518110610b1a57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000209050828281518110610b5257634e487b7160e01b600052603260045260246000fd5b6020908102919091010151905580610b6981611475565b915050610a5b565b505050565b63f23a6e6160e01b95945050505050565b610b8f610c1d565b6001600160a01b0316610ba061095f565b6001600160a01b031614610bc65760405162461bcd60e51b8152600401610436906113ef565b6001600160a01b038116610bec5760405162461bcd60e51b815260040161043690611293565b610bf581610c21565b50565b60006001600160e01b03198216630271189760e51b14806103d457506103d482610c71565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160e01b031981166301ffc9a760e01b14919050565b80356001600160a01b03811681146103d757600080fd5b60008083601f840112610cb2578182fd5b5081356001600160401b03811115610cc8578182fd5b6020830191508360208083028501011115610ce257600080fd5b9250929050565b600082601f830112610cf9578081fd5b813560206001600160401b03821115610d1457610d146114a6565b808202610d2282820161142d565b838152828101908684018388018501891015610d3c578687fd5b8693505b85841015610d5e578035835260019390930192918401918401610d40565b50979650505050505050565b803580151581146103d757600080fd5b600082601f830112610d8a578081fd5b81356001600160401b03811115610da357610da36114a6565b610db6601f8201601f191660200161142d565b818152846020838601011115610dca578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215610df5578081fd5b610dfe82610c8a565b9392505050565b600080600080600060a08688031215610e1c578081fd5b610e2586610c8a565b9450610e3360208701610c8a565b935060408601356001600160401b0380821115610e4e578283fd5b610e5a89838a01610ce9565b94506060880135915080821115610e6f578283fd5b610e7b89838a01610ce9565b93506080880135915080821115610e90578283fd5b50610e9d88828901610d7a565b9150509295509295909350565b600080600080600060a08688031215610ec1578081fd5b610eca86610c8a565b9450610ed860208701610c8a565b9350604086013592506060860135915060808601356001600160401b03811115610f00578182fd5b610e9d88828901610d7a565b60008060408385031215610f1e578182fd5b610f2783610c8a565b915060208301356001600160401b03811115610f41578182fd5b610f4d85828601610d7a565b9150509250929050565b60008060008060608587031215610f6c578384fd5b84356001600160401b03811115610f81578485fd5b610f8d87828801610ca1565b90955093505060208501359150610fa660408601610d6a565b905092959194509250565b600080600060408486031215610fc5578283fd5b83356001600160401b03811115610fda578384fd5b610fe686828701610ca1565b9094509250610ff9905060208501610d6a565b90509250925092565b60008060408385031215611014578182fd5b82356001600160401b038082111561102a578384fd5b61103686838701610ce9565b9350602085013591508082111561104b578283fd5b50610f4d85828601610ce9565b600060208284031215611069578081fd5b81356001600160e01b031981168114610dfe578182fd5b600060208284031215611091578081fd5b81356001600160401b038111156110a6578182fd5b6110b284828501610d7a565b949350505050565b6000602082840312156110cb578081fd5b5035919050565b6000602082840312156110e3578081fd5b5051919050565b600080604083850312156110fc578182fd5b8235915061110c60208401610c8a565b90509250929050565b60008060408385031215611127578182fd5b50508035926020909101359150565b60008251815b81811015611156576020818601810151858301520161113c565b818111156111645782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b60208082526023908201527f596f752063616e2774206769766520617761792061737365747320666f72206660408201526272656560e81b606082015260800190565b6020808252603c908201527f5641554c542048414c543a2054686520617373657420796f752061726520747260408201527b79696e6720746f20627579206973206e6f7420617661696c61626c6560201b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602f908201527f596f752063616e2774206368616e676520746865207072696365206f6620616e60408201526e20617373657420737562207a65726f60881b606082015260800190565b60208082526038908201527f4d41524b45542053544f503a20596f75206d7573742073656e642074686520706040820152771c9bdc195c881d985b1d59481d1bc8189d5e48185cdcd95d60421b606082015260800190565b60208082526049908201527f57484954454c4953542048414c543a20596f7520617265206e6f74207768697460408201527f656c697374656420666f7220746869732064726f702c20636865636b2062616360608201526835903630ba32b9171760b91b608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b90815260200190565b6040518181016001600160401b038111828210171561144e5761144e6114a6565b604052919050565b600081600019048311821515161561147057611470611490565b500290565b600060001982141561148957611489611490565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220c71040cb58195f5fa118a56d0f4f03c81b157f6b55431b2a1a6db79266af820d64736f6c63430008000033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.