// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; import "./SmartAssetBase.sol"; import "../Interfaces/ISmartAssetBurnable.sol"; /** * @title SmartAssetBurnable. * @author Arianee - Dynamic NFTs for real-world use cases and consumer engagement (www.arianee.org). */ abstract contract SmartAssetBurnable is SmartAssetBase, ISmartAssetBurnable { /** * @notice This emits when a token is burned. */ event TokenBurned(uint256 indexed tokenId); function burn(uint256 tokenId) external virtual whenNotPaused { require(super._isApprovedOrOwner(_msgSender(), tokenId), "SmartAssetBurnable: caller is not token owner or approved"); super._burn(tokenId); delete idToFootprint[tokenId]; delete idToImprint[tokenId]; delete idToFirstTransfer[tokenId]; delete idToViewKey[tokenId]; delete idToTransferKey[tokenId]; delete tokenProviders[tokenId]; emit TokenBurned(tokenId); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(ISmartAssetBurnable).interfaceId || super.supportsInterface(interfaceId); } }