// SPDX-License-Identifier: UNLICENSED pragma solidity >=0.8.18; interface ISmartAssetBase { function footprintOf(uint256 tokenId) external view returns (TokenFootprint memory); function getTransferKey(uint256 tokenId) external view returns (address); function getViewKey(uint256 tokenId) external view returns (address); function hydrateToken(TokenHydratationParams memory tokenHydratationParams) external; function imprintOf(uint256 tokenId) external view returns (bytes32); function isRequestable(uint256 tokenId) external view returns (bool); function isShared() external pure returns (bool); function issuerOf(uint256 tokenId) external view returns (address issuer); function requestToken(uint256 tokenId, bytes memory signature, address newOwner, bool keepTransferKey, address walletProvider) external; function reserveToken(address to, uint256 tokenId) external; function setTokenTransferKey(uint256 tokenId, address key) external; function setTokenViewKey(uint256 tokenId, address key) external; /** * @notice Footprint of a token. See {SmartAssetBase-idToFootprint}. */ struct TokenFootprint { address issuer; uint256 creationTimestamp; } /** * @notice Parameters for hydrating a token. See {SmartAssetBase-hydrateToken}. * @param tokenId The token ID. * @param imprint The token imprint. * @param viewKey The token initial view key. * @param transferKey The token initial transfer key (optional). * @param issuer The token issuer. * @param otherParams An array of bytes that can be used by child contracts if any to gather additional parameters. Its construction depends on your SmartAsset inheritance graph. */ struct TokenHydratationParams { uint256 tokenId; bytes32 imprint; address viewKey; address transferKey; address creatorProvider; bytes[] otherParams; } }