@@ -205,8 +205,9 @@ contract StoryProtocolGatewayTest is BaseTest {
205
205
206
206
modifier withEnoughTokens () {
207
207
require (caller != address (0 ), "withEnoughTokens: caller not set " );
208
- mockToken.mint (address (caller), 1000 * 10 ** mockToken.decimals ());
208
+ mockToken.mint (address (caller), 2000 * 10 ** mockToken.decimals ());
209
209
mockToken.approve (address (nftContract), 1000 * 10 ** mockToken.decimals ());
210
+ mockToken.approve (address (spg), 1000 * 10 ** mockToken.decimals ());
210
211
_;
211
212
}
212
213
@@ -280,7 +281,7 @@ contract StoryProtocolGatewayTest is BaseTest {
280
281
});
281
282
}
282
283
283
- modifier withParentIp () {
284
+ modifier withNonCommercialParentIp () {
284
285
(ipIdParent, , ) = spg.mintAndRegisterIpAndAttachPILTerms ({
285
286
nftContract: address (nftContract),
286
287
recipient: caller,
@@ -291,134 +292,67 @@ contract StoryProtocolGatewayTest is BaseTest {
291
292
_;
292
293
}
293
294
294
- function test_SPG_mintAndRegisterIpAndMakeDerivative ()
295
+ function test_SPG_mintAndRegisterIpAndMakeDerivativeWithNonCommercialLicense ()
295
296
public
296
297
withCollection
297
298
whenCallerHasMinterRole
298
299
withEnoughTokens
299
- withParentIp
300
+ withNonCommercialParentIp
300
301
{
301
- (address licenseTemplateParent , uint256 licenseTermsIdParent ) = licenseRegistry.getAttachedLicenseTerms (
302
- ipIdParent,
303
- 0
304
- );
305
-
306
- address [] memory parentIpIds = new address [](1 );
307
- parentIpIds[0 ] = ipIdParent;
302
+ _mintAndRegisterIpAndMakeDerivativeBaseTest ();
303
+ }
308
304
309
- uint256 [] memory licenseTermsIds = new uint256 [](1 );
310
- licenseTermsIds[0 ] = licenseTermsIdParent;
305
+ function test_SPG_registerIpAndMakeDerivativeWithNonCommercialLicense ()
306
+ public
307
+ withCollection
308
+ whenCallerHasMinterRole
309
+ withEnoughTokens
310
+ withNonCommercialParentIp
311
+ {
312
+ _registerIpAndMakeDerivativeBaseTest ();
313
+ }
311
314
312
- (address ipIdChild , uint256 tokenIdChild ) = spg.mintAndRegisterIpAndMakeDerivative ({
315
+ modifier withCommercialParentIp () {
316
+ (ipIdParent, , ) = spg.mintAndRegisterIpAndAttachPILTerms ({
313
317
nftContract: address (nftContract),
314
- derivData: ISPG.MakeDerivative ({
315
- parentIpIds: parentIpIds,
316
- licenseTemplate: address (pilTemplate),
317
- licenseTermsIds: licenseTermsIds,
318
- royaltyContext: ""
319
- }),
318
+ recipient: caller,
320
319
nftMetadata: nftMetadataDefault,
321
320
ipMetadata: ipMetadataDefault,
322
- recipient: caller
323
- });
324
- assertTrue (ipAssetRegistry.isRegistered (ipIdChild));
325
- assertEq (tokenIdChild, 2 );
326
- assertMetadata (ipIdChild, ipMetadataDefault);
327
- assertMetadata (ipIdChild, ipMetadataDefault);
328
- (address licenseTemplateChild , uint256 licenseTermsIdChild ) = licenseRegistry.getAttachedLicenseTerms (
329
- ipIdChild,
330
- 0
331
- );
332
- assertEq (licenseTemplateChild, licenseTemplateParent);
333
- assertEq (licenseTermsIdChild, licenseTermsIdParent);
334
- assertEq (IIPAccount (payable (ipIdChild)).owner (), caller);
335
-
336
- assertParentChild ({
337
- ipIdParent: ipIdParent,
338
- ipIdChild: ipIdChild,
339
- expectedParentCount: 1 ,
340
- expectedParentIndex: 0
321
+ terms: PILFlavors.commercialUse ({
322
+ mintingFee: 100 * 10 ** mockToken.decimals (),
323
+ currencyToken: address (mockToken),
324
+ royaltyPolicy: address (royaltyPolicyLAP)
325
+ })
341
326
});
327
+ _;
342
328
}
343
329
344
- function test_SPG_registerIpAndMakeDerivative ()
330
+ function test_SPG_mintAndRegisterIpAndMakeDerivativeWithCommercialLicense ()
345
331
public
346
332
withCollection
347
333
whenCallerHasMinterRole
348
334
withEnoughTokens
349
- withParentIp
335
+ withCommercialParentIp
350
336
{
351
- (address licenseTemplateParent , uint256 licenseTermsIdParent ) = licenseRegistry.getAttachedLicenseTerms (
352
- ipIdParent,
353
- 0
354
- );
355
-
356
- uint256 tokenIdChild = nftContract.mint (address (caller), nftMetadataEmpty);
357
- address ipIdChild = ipAssetRegistry.ipId (block .chainid , address (nftContract), tokenIdChild);
358
-
359
- uint256 deadline = block .timestamp + 1000 ;
360
-
361
- (bytes memory sigMetadata , ) = _getSetPermissionSignatureForSPG ({
362
- ipId: ipIdChild,
363
- module: address (coreMetadataModule),
364
- selector: ICoreMetadataModule.setAll.selector ,
365
- deadline: deadline,
366
- nonce: 1 ,
367
- signerPk: alicePk
368
- });
369
- (bytes memory sigRegister , ) = _getSetPermissionSignatureForSPG ({
370
- ipId: ipIdChild,
371
- module: address (licensingModule),
372
- selector: ILicensingModule.registerDerivative.selector ,
373
- deadline: deadline,
374
- nonce: 2 ,
375
- signerPk: alicePk
376
- });
377
-
378
- address [] memory parentIpIds = new address [](1 );
379
- parentIpIds[0 ] = ipIdParent;
380
-
381
- uint256 [] memory licenseTermsIds = new uint256 [](1 );
382
- licenseTermsIds[0 ] = licenseTermsIdParent;
383
-
384
- address ipIdChildActual = spg.registerIpAndMakeDerivative ({
385
- nftContract: address (nftContract),
386
- tokenId: tokenIdChild,
387
- derivData: ISPG.MakeDerivative ({
388
- parentIpIds: parentIpIds,
389
- licenseTemplate: address (pilTemplate),
390
- licenseTermsIds: licenseTermsIds,
391
- royaltyContext: ""
392
- }),
393
- ipMetadata: ipMetadataDefault,
394
- sigMetadata: ISPG.SignatureData ({ signer: alice, deadline: deadline, signature: sigMetadata }),
395
- sigRegister: ISPG.SignatureData ({ signer: alice, deadline: deadline, signature: sigRegister })
396
- });
397
- assertEq (ipIdChildActual, ipIdChild);
398
- assertTrue (ipAssetRegistry.isRegistered (ipIdChild));
399
- assertMetadata (ipIdChild, ipMetadataDefault);
400
- (address licenseTemplateChild , uint256 licenseTermsIdChild ) = licenseRegistry.getAttachedLicenseTerms (
401
- ipIdChild,
402
- 0
403
- );
404
- assertEq (licenseTemplateChild, licenseTemplateParent);
405
- assertEq (licenseTermsIdChild, licenseTermsIdParent);
406
- assertEq (IIPAccount (payable (ipIdChild)).owner (), caller);
337
+ _mintAndRegisterIpAndMakeDerivativeBaseTest ();
338
+ }
407
339
408
- assertParentChild ({
409
- ipIdParent: ipIdParent,
410
- ipIdChild: ipIdChild,
411
- expectedParentCount: 1 ,
412
- expectedParentIndex: 0
413
- });
340
+ function test_SPG_registerIpAndMakeDerivativeWithCommercialLicense ()
341
+ public
342
+ withCollection
343
+ whenCallerHasMinterRole
344
+ withEnoughTokens
345
+ withCommercialParentIp
346
+ {
347
+ _registerIpAndMakeDerivativeBaseTest ();
414
348
}
415
349
416
350
function test_SPG_mintAndRegisterIpAndMakeDerivativeWithLicenseTokens ()
417
351
public
418
352
withCollection
419
353
whenCallerHasMinterRole
420
354
withEnoughTokens
421
- withParentIp
355
+ withNonCommercialParentIp
422
356
{
423
357
(address licenseTemplateParent , uint256 licenseTermsIdParent ) = licenseRegistry.getAttachedLicenseTerms (
424
358
ipIdParent,
@@ -473,7 +407,7 @@ contract StoryProtocolGatewayTest is BaseTest {
473
407
withCollection
474
408
whenCallerHasMinterRole
475
409
withEnoughTokens
476
- withParentIp
410
+ withNonCommercialParentIp
477
411
{
478
412
caller = alice;
479
413
vm.startPrank (caller);
@@ -611,4 +545,114 @@ contract StoryProtocolGatewayTest is BaseTest {
611
545
(uint8 v , bytes32 r , bytes32 s ) = vm.sign (signerPk, digest);
612
546
signature = abi.encodePacked (r, s, v);
613
547
}
548
+
549
+ function _mintAndRegisterIpAndMakeDerivativeBaseTest () internal {
550
+ (address licenseTemplateParent , uint256 licenseTermsIdParent ) = licenseRegistry.getAttachedLicenseTerms (
551
+ ipIdParent,
552
+ 0
553
+ );
554
+
555
+ address [] memory parentIpIds = new address [](1 );
556
+ parentIpIds[0 ] = ipIdParent;
557
+
558
+ uint256 [] memory licenseTermsIds = new uint256 [](1 );
559
+ licenseTermsIds[0 ] = licenseTermsIdParent;
560
+
561
+ (address ipIdChild , uint256 tokenIdChild ) = spg.mintAndRegisterIpAndMakeDerivative ({
562
+ nftContract: address (nftContract),
563
+ derivData: ISPG.MakeDerivative ({
564
+ parentIpIds: parentIpIds,
565
+ licenseTemplate: address (pilTemplate),
566
+ licenseTermsIds: licenseTermsIds,
567
+ royaltyContext: ""
568
+ }),
569
+ nftMetadata: nftMetadataDefault,
570
+ ipMetadata: ipMetadataDefault,
571
+ recipient: caller
572
+ });
573
+ assertTrue (ipAssetRegistry.isRegistered (ipIdChild));
574
+ assertEq (tokenIdChild, 2 );
575
+ assertMetadata (ipIdChild, ipMetadataDefault);
576
+ assertMetadata (ipIdChild, ipMetadataDefault);
577
+ (address licenseTemplateChild , uint256 licenseTermsIdChild ) = licenseRegistry.getAttachedLicenseTerms (
578
+ ipIdChild,
579
+ 0
580
+ );
581
+ assertEq (licenseTemplateChild, licenseTemplateParent);
582
+ assertEq (licenseTermsIdChild, licenseTermsIdParent);
583
+ assertEq (IIPAccount (payable (ipIdChild)).owner (), caller);
584
+
585
+ assertParentChild ({
586
+ ipIdParent: ipIdParent,
587
+ ipIdChild: ipIdChild,
588
+ expectedParentCount: 1 ,
589
+ expectedParentIndex: 0
590
+ });
591
+ }
592
+
593
+ function _registerIpAndMakeDerivativeBaseTest () internal {
594
+ (address licenseTemplateParent , uint256 licenseTermsIdParent ) = licenseRegistry.getAttachedLicenseTerms (
595
+ ipIdParent,
596
+ 0
597
+ );
598
+
599
+ uint256 tokenIdChild = nftContract.mint (address (caller), nftMetadataEmpty);
600
+ address ipIdChild = ipAssetRegistry.ipId (block .chainid , address (nftContract), tokenIdChild);
601
+
602
+ uint256 deadline = block .timestamp + 1000 ;
603
+
604
+ (bytes memory sigMetadata , ) = _getSetPermissionSignatureForSPG ({
605
+ ipId: ipIdChild,
606
+ module: address (coreMetadataModule),
607
+ selector: ICoreMetadataModule.setAll.selector ,
608
+ deadline: deadline,
609
+ nonce: 1 ,
610
+ signerPk: alicePk
611
+ });
612
+ (bytes memory sigRegister , ) = _getSetPermissionSignatureForSPG ({
613
+ ipId: ipIdChild,
614
+ module: address (licensingModule),
615
+ selector: ILicensingModule.registerDerivative.selector ,
616
+ deadline: deadline,
617
+ nonce: 2 ,
618
+ signerPk: alicePk
619
+ });
620
+
621
+ address [] memory parentIpIds = new address [](1 );
622
+ parentIpIds[0 ] = ipIdParent;
623
+
624
+ uint256 [] memory licenseTermsIds = new uint256 [](1 );
625
+ licenseTermsIds[0 ] = licenseTermsIdParent;
626
+
627
+ address ipIdChildActual = spg.registerIpAndMakeDerivative ({
628
+ nftContract: address (nftContract),
629
+ tokenId: tokenIdChild,
630
+ derivData: ISPG.MakeDerivative ({
631
+ parentIpIds: parentIpIds,
632
+ licenseTemplate: address (pilTemplate),
633
+ licenseTermsIds: licenseTermsIds,
634
+ royaltyContext: ""
635
+ }),
636
+ ipMetadata: ipMetadataDefault,
637
+ sigMetadata: ISPG.SignatureData ({ signer: alice, deadline: deadline, signature: sigMetadata }),
638
+ sigRegister: ISPG.SignatureData ({ signer: alice, deadline: deadline, signature: sigRegister })
639
+ });
640
+ assertEq (ipIdChildActual, ipIdChild);
641
+ assertTrue (ipAssetRegistry.isRegistered (ipIdChild));
642
+ assertMetadata (ipIdChild, ipMetadataDefault);
643
+ (address licenseTemplateChild , uint256 licenseTermsIdChild ) = licenseRegistry.getAttachedLicenseTerms (
644
+ ipIdChild,
645
+ 0
646
+ );
647
+ assertEq (licenseTemplateChild, licenseTemplateParent);
648
+ assertEq (licenseTermsIdChild, licenseTermsIdParent);
649
+ assertEq (IIPAccount (payable (ipIdChild)).owner (), caller);
650
+
651
+ assertParentChild ({
652
+ ipIdParent: ipIdParent,
653
+ ipIdChild: ipIdChild,
654
+ expectedParentCount: 1 ,
655
+ expectedParentIndex: 0
656
+ });
657
+ }
614
658
}
0 commit comments