// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "ERC721.sol"; import "ERC721Enumerable.sol"; import "Ownable.sol"; // ERC5169 interface declaration interface IERC5169 { event ScriptUpdate(string[]); function scriptURI() external view returns (string[] memory); function setScriptURI(string[] memory) external; } contract MyNFT is ERC721, ERC721Enumerable, Ownable, IERC5169 { uint private _tokenIdCounter; string private constant baseTokenURI = "ipfs://QmYourIPFSHashHere"; // Replace with your IPFS hash constructor() ERC721("MyNFT", "MNFT") Ownable() { _tokenIdCounter = 1; mint(); } function mint() public { uint tokenId = _tokenIdCounter; _safeMint(msg.sender, tokenId); _tokenIdCounter++; } function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal override(ERC721,ERC721Enumerable) { // Intentionally left blank } function tokenURI(uint256 tokenId) public pure override(ERC721) returns (string memory) { tokenId; return baseTokenURI; } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId) || interfaceId == type(IERC5169).interfaceId; } string[] private _scriptURI; function scriptURI() external view override returns (string[] memory) { return _scriptURI; } function setScriptURI(string[] memory newScriptURI) external override onlyOwner { _scriptURI = newScriptURI; emit ScriptUpdate(newScriptURI); } }