3
3
pragma solidity >= 0.8.8 < 0.9.0 ;
4
4
5
5
import {ERC721 } from "openzeppelin-contracts/contracts/token/ERC721/ERC721.sol " ;
6
+ import {INonFungibleNttManager} from "../interfaces/INonFungibleNttManager.sol " ;
6
7
7
8
contract DummyNft is ERC721 {
8
9
// Common URI for all NFTs handled by this contract.
@@ -12,7 +13,7 @@ contract DummyNft is ERC721 {
12
13
error BaseUriEmpty ();
13
14
error BaseUriTooLong ();
14
15
15
- constructor (bytes memory baseUri ) ERC721 ("DummyNft " , "DNTF " ) {
16
+ constructor (bytes memory baseUri ) ERC721 ("DummyNft " , "DNFT " ) {
16
17
if (baseUri.length == 0 ) {
17
18
revert BaseUriEmpty ();
18
19
}
@@ -52,17 +53,46 @@ contract DummyNft is ERC721 {
52
53
}
53
54
54
55
contract DummyNftMintAndBurn is DummyNft {
55
- constructor (bytes memory baseUri ) DummyNft (baseUri) {}
56
+ bool private reentrant;
57
+ address private owner;
58
+
59
+ constructor (bytes memory baseUri ) DummyNft (baseUri) {
60
+ owner = msg .sender ;
61
+ }
62
+
63
+ function setReentrant (bool enabled ) public {
64
+ require (msg .sender == owner, "DummyNftMintAndBurn: not owner " );
65
+ reentrant = enabled;
66
+ }
56
67
57
68
function mint (address to , uint256 tokenId ) public override {
58
- // TODO - add access control here?
59
69
_safeMint (to, tokenId);
70
+
71
+ _callback ();
60
72
}
61
73
62
74
function burn (uint256 tokenId ) public {
63
- // TODO - add access control here?
64
75
_burn (tokenId);
76
+
77
+ _callback ();
65
78
}
66
79
67
- // TODO: Mint/Burn batches.
80
+ function safeTransferFrom (address from , address to , uint256 tokenId ) public override {
81
+ super .safeTransferFrom (from, to, tokenId, "" );
82
+
83
+ _callback ();
84
+ }
85
+
86
+ function _callback () public {
87
+ if (! reentrant) {
88
+ return ;
89
+ }
90
+
91
+ uint256 [] memory tokenIds = new uint256 [](1 );
92
+ tokenIds[0 ] = 1 ;
93
+
94
+ INonFungibleNttManager (msg .sender ).transfer (
95
+ tokenIds, 69 , bytes32 (uint256 (uint160 (msg .sender ))), ""
96
+ );
97
+ }
68
98
}
0 commit comments