@@ -16,17 +16,20 @@ import "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol";
1616import "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol " ;
1717import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol " ;
1818
19+ // ========== Feature imports ==========//mychange
20+ import "../feature/TokenBundle.sol " ;
21+
1922// ========== Internal imports ==========
2023
2124import "../interfaces/IThirdwebContract.sol " ;
2225import "../interfaces/IThirdwebRoyalty.sol " ;
2326import "../interfaces/IThirdwebOwnable.sol " ;
2427
25- import "../interfaces/IMultiwrap .sol " ;
28+ import "./ITempMultiwrap .sol " ;
2629import "../lib/CurrencyTransferLib.sol " ;
2730import "../openzeppelin-presets/metatx/ERC2771ContextUpgradeable.sol " ;
2831
29- contract Multiwrap is
32+ contract TempMultiwrap is
3033 IThirdwebContract ,
3134 IThirdwebOwnable ,
3235 IThirdwebRoyalty ,
@@ -37,8 +40,9 @@ contract Multiwrap is
3740 ERC1155HolderUpgradeable ,
3841 ERC721HolderUpgradeable ,
3942 ERC721Upgradeable ,
40- IMultiwrap
41- {
43+ ITempMultiwrap ,
44+ TokenBundle
45+ {//mychange TokenBundle
4246 /*///////////////////////////////////////////////////////////////
4347 State variables
4448 //////////////////////////////////////////////////////////////*/
@@ -60,7 +64,8 @@ contract Multiwrap is
6064 address private immutable nativeTokenWrapper;
6165
6266 /// @dev The next token ID of the NFT to mint.
63- uint256 public nextTokenIdToMint;
67+ // uint256 public nextTokenIdToMint;
68+ //mychange
6469
6570 /// @dev The (default) address that receives all royalty value.
6671 address private royaltyRecipient;
@@ -85,7 +90,9 @@ contract Multiwrap is
8590 mapping (uint256 => string ) private uri;
8691
8792 /// @dev Mapping from tokenId of wrapped NFT => wrapped contents of the token.
88- mapping (uint256 => WrappedContents) private wrappedContents;
93+ // mapping(uint256 => WrappedContents) private wrappedContents;
94+ //mychange
95+ // mapping(uint256=>BundleInfo) private bundle;
8996
9097 /*///////////////////////////////////////////////////////////////
9198 Constructor + initializer logic
@@ -163,7 +170,8 @@ contract Multiwrap is
163170
164171 /// @dev Returns the URI for a given tokenId.
165172 function tokenURI (uint256 _tokenId ) public view override returns (string memory ) {
166- return uri[_tokenId];
173+ // return uri[_tokenId]; //mychange
174+ return getUri (_tokenId);
167175 }
168176
169177 /// @dev See ERC 165
@@ -202,15 +210,23 @@ contract Multiwrap is
202210 string calldata _uriForWrappedToken ,
203211 address _recipient
204212 ) external payable nonReentrant onlyMinter returns (uint256 tokenId ) {
205- tokenId = nextTokenIdToMint;
206- nextTokenIdToMint += 1 ;
213+ // tokenId = nextTokenIdToMint;
214+ // nextTokenIdToMint += 1;
215+ //mychange
216+ tokenId = _getNextTokenId ();
207217
208- for (uint256 i = 0 ; i < _wrappedContents.length ; i += 1 ) {
209- wrappedContents[tokenId].token[i] = _wrappedContents[i];
210- }
211- wrappedContents[tokenId].count = _wrappedContents.length ;
218+ _setBundle (_wrappedContents, tokenId); //mychange
219+
220+ //mychange
221+ // for (uint256 i = 0; i < _wrappedContents.length; i += 1) {
222+ // bundle[tokenId].tokens[i] = _wrappedContents[i];
223+ // }
224+ // wrappedContents[tokenId].count = _wrappedContents.length;
212225
213- uri[tokenId] = _uriForWrappedToken;
226+ //mychange
227+ // uri[tokenId] = _uriForWrappedToken;
228+
229+ _setUri (_uriForWrappedToken, tokenId);
214230
215231 _safeMint (_recipient, tokenId);
216232
@@ -230,15 +246,19 @@ contract Multiwrap is
230246
231247 _burn (_tokenId);
232248
233- uint256 count = wrappedContents[_tokenId].count;
249+ // uint256 count = wrappedContents[_tokenId].count; //mychange
250+
251+ uint256 count = getTokenCount (_tokenId);
234252 Token[] memory tokensUnwrapped = new Token [](count);
235253
236254 for (uint256 i = 0 ; i < count; i += 1 ) {
237- tokensUnwrapped[i] = wrappedContents[_tokenId].token[i];
255+ // tokensUnwrapped[i] = wrappedContents[_tokenId].token[i]; //mychange
256+ tokensUnwrapped[i] = getToken (_tokenId, i);
238257 transferToken (address (this ), _recipient, tokensUnwrapped[i]);
239258 }
240259
241- delete wrappedContents[_tokenId];
260+ // delete wrappedContents[_tokenId]; //mychange
261+ _deleteBundle (_tokenId);
242262
243263 emit TokensUnwrapped (_msgSender (), _recipient, _tokenId, tokensUnwrapped);
244264 }
@@ -254,14 +274,16 @@ contract Multiwrap is
254274 _token.assetContract,
255275 _from,
256276 _to,
257- _token.amount ,
277+ _token.totalAmount ,
258278 nativeTokenWrapper
259279 );
260280 } else if (_token.tokenType == TokenType.ERC721 ) {
261281 IERC721Upgradeable (_token.assetContract).safeTransferFrom (_from, _to, _token.tokenId);
262282 } else if (_token.tokenType == TokenType.ERC1155 ) {
263- IERC1155Upgradeable (_token.assetContract).safeTransferFrom (_from, _to, _token.tokenId, _token.amount , "" );
283+ IERC1155Upgradeable (_token.assetContract).safeTransferFrom (_from, _to, _token.tokenId, _token.totalAmount , "" );
264284 }
285+
286+ //mychange _token.amount now _token.totalAmount
265287 }
266288
267289 /// @dev Transfers multiple arbitrary ERC20 / ERC721 / ERC1155 tokens.
@@ -296,11 +318,13 @@ contract Multiwrap is
296318
297319 /// @dev Returns the underlygin contents of a wrapped NFT.
298320 function getWrappedContents (uint256 _tokenId ) external view returns (Token[] memory contents ) {
299- uint256 total = wrappedContents[_tokenId].count;
321+ //mychange
322+ uint256 total = getTokenCount (_tokenId);
300323 contents = new Token [](total);
301324
325+ //mychange
302326 for (uint256 i = 0 ; i < total; i += 1 ) {
303- contents[i] = wrappedContents[ _tokenId].token[i] ;
327+ contents[i] = getToken ( _tokenId, i) ;
304328 }
305329 }
306330
0 commit comments