@@ -8,16 +8,13 @@ import {ERC721URIStorage} from "openzeppelin-contracts/contracts/token/ERC721/ex
88import {WhitelistPaymaster} from "../paymasters/WhitelistPaymaster.sol " ;
99
1010/// @notice a simple NFT contract for contentsign data where each nft is mapped to a one-time
11- /// configurable URL
12- contract ContentSignNFT is ERC721 , ERC721URIStorage {
11+ /// configurable URL. This is used for every variant of ContentSign with associated hooks.
12+ abstract contract BaseContentSign is ERC721 , ERC721URIStorage {
1313 uint256 public nextTokenId;
14- WhitelistPaymaster public whitelistPaymaster;
1514
16- error UserIsNotWhitelisted ();
15+ error UserIsNotWhitelisted (address user );
1716
18- constructor (string memory name , string memory symbol , WhitelistPaymaster whitelist ) ERC721 (name, symbol) {
19- whitelistPaymaster = whitelist;
20- }
17+ constructor (string memory name , string memory symbol ) ERC721 (name, symbol) {}
2118
2219 function safeMint (address to , string memory uri ) public {
2320 _mustBeWhitelisted ();
@@ -31,13 +28,21 @@ contract ContentSignNFT is ERC721, ERC721URIStorage {
3128 return super .tokenURI (tokenId);
3229 }
3330
34- function supportsInterface (bytes4 interfaceId ) public view override (ERC721 , ERC721URIStorage ) returns (bool ) {
35- return super .supportsInterface (interfaceId);
31+ function supportsInterface (bytes4 interfaceId )
32+ public
33+ view
34+ virtual
35+ override (ERC721 , ERC721URIStorage )
36+ returns (bool )
37+ {
38+ return ERC721 .supportsInterface (interfaceId) || ERC721URIStorage .supportsInterface (interfaceId);
3639 }
3740
3841 function _mustBeWhitelisted () internal view {
39- if (! whitelistPaymaster. isWhitelistedUser (msg .sender )) {
40- revert UserIsNotWhitelisted ();
42+ if (! _userIsWhitelisted (msg .sender )) {
43+ revert UserIsNotWhitelisted (msg . sender );
4144 }
4245 }
46+
47+ function _userIsWhitelisted (address user ) internal view virtual returns (bool );
4348}
0 commit comments