// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import {NftFMetadata} from "../../interfaces/INftF.sol"; abstract contract NftFStorage { bytes32 internal constant TOKEN_F_STORAGE_SLOT = keccak256("nftf.standard.nftf.storage"); struct FStorage { bool isTransferable; address slcAddress; string baseURI; mapping(uint256 => NftFMetadata) tokenMetadata; } function getMetadata(uint256 tokenId) public view virtual returns (NftFMetadata memory) { return _getNftFStorage().tokenMetadata[tokenId]; } function getSlcAddress() public view virtual returns (address) { return _getNftFStorage().slcAddress; } function getIsTransferable() public view virtual returns (bool) { return _getNftFStorage().isTransferable; } function _getNftFStorage() internal pure returns (FStorage storage _nftfStorage) { bytes32 slot_ = TOKEN_F_STORAGE_SLOT; assembly { _nftfStorage.slot := slot_ } } }