@@ -318,59 +318,10 @@ contract SignatureDropTest is BaseTest {
318318 Signature Mint Tests
319319 //////////////////////////////////////////////////////////////*/
320320
321- /**
322- * note: Testing revert condition; invalid signature.
323- */
324- function test_revert_mintWithSignature_processRequestAndRecoverSigner () public {
325- vm.prank (deployerSigner);
326- sigdrop.lazyMint (100 , "ipfs:// " , "" );
327- uint256 id = 0 ;
328-
329- ISignatureMintERC721.MintRequest memory mintrequest;
330- mintrequest.to = address (0 );
331- mintrequest.royaltyRecipient = address (2 );
332- mintrequest.royaltyBps = 0 ;
333- mintrequest.primarySaleRecipient = address (deployer);
334- mintrequest.uri = "ipfs:// " ;
335- mintrequest.quantity = 1 ;
336- mintrequest.pricePerToken = 0 ;
337- mintrequest.currency = address (3 );
338- mintrequest.validityStartTimestamp = 1000 ;
339- mintrequest.validityEndTimestamp = 2000 ;
340- mintrequest.uid = bytes32 (id);
341-
342- bytes memory encodedRequest = abi.encode (
343- typehashMintRequest,
344- mintrequest.to,
345- mintrequest.royaltyRecipient,
346- mintrequest.royaltyBps,
347- mintrequest.primarySaleRecipient,
348- keccak256 (bytes (mintrequest.uri)),
349- mintrequest.quantity,
350- mintrequest.pricePerToken,
351- mintrequest.currency,
352- mintrequest.validityStartTimestamp,
353- mintrequest.validityEndTimestamp,
354- mintrequest.uid
355- );
356- bytes32 structHash = keccak256 (encodedRequest);
357- bytes32 typedDataHash = keccak256 (abi.encodePacked ("\x19\x01 " , domainSeparator, structHash));
358-
359- (uint8 v , bytes32 r , bytes32 s ) = vm.sign (privateKey, typedDataHash);
360- bytes memory signature = abi.encodePacked (r, s, v);
361- vm.warp (1000 );
362- sigdrop.mintWithSignature (mintrequest, signature);
363-
364- (v, r, s) = vm.sign (4321 , typedDataHash);
365- signature = abi.encodePacked (r, s, v);
366- vm.expectRevert ("Invalid request " );
367- sigdrop.mintWithSignature (mintrequest, signature);
368- }
369-
370321 /*
371322 * note: Testing state changes; minting with signature, for a given price and currency.
372323 */
373- function test_state_mintWithSignature_priceAndCurrency () public {
324+ function test_state_mintWithSignature () public {
374325 vm.prank (deployerSigner);
375326 sigdrop.lazyMint (100 , "ipfs:// " , "" );
376327 uint256 id = 0 ;
@@ -388,7 +339,11 @@ contract SignatureDropTest is BaseTest {
388339 mintrequest.validityEndTimestamp = 2000 ;
389340 mintrequest.uid = bytes32 (id);
390341
342+ // Test with ERC20 currency
391343 {
344+
345+ uint256 totalSupplyBefore = sigdrop.totalSupply ();
346+
392347 bytes memory encodedRequest = abi.encode (
393348 typehashMintRequest,
394349 mintrequest.to,
@@ -413,9 +368,14 @@ contract SignatureDropTest is BaseTest {
413368 erc20.approve (address (sigdrop), 1 );
414369 sigdrop.mintWithSignature (mintrequest, signature);
415370 vm.stopPrank ();
371+
372+ assertEq (totalSupplyBefore + mintrequest.quantity, sigdrop.totalSupply ());
416373 }
417374
375+ // Test with native token currency
418376 {
377+ uint256 totalSupplyBefore = sigdrop.totalSupply ();
378+
419379 mintrequest.currency = address (NATIVE_TOKEN);
420380 id = 1 ;
421381 mintrequest.uid = bytes32 (id);
@@ -442,13 +402,64 @@ contract SignatureDropTest is BaseTest {
442402 vm.warp (1000 );
443403 sigdrop.mintWithSignature { value: mintrequest.pricePerToken }(mintrequest, signature);
444404 vm.stopPrank ();
405+
406+ assertEq (totalSupplyBefore + mintrequest.quantity, sigdrop.totalSupply ());
445407 }
446408 }
447409
410+ /**
411+ * note: Testing revert condition; invalid signature.
412+ */
413+ function test_revert_mintWithSignature_unapprovedSigner () public {
414+ vm.prank (deployerSigner);
415+ sigdrop.lazyMint (100 , "ipfs:// " , "" );
416+ uint256 id = 0 ;
417+
418+ ISignatureMintERC721.MintRequest memory mintrequest;
419+ mintrequest.to = address (0 );
420+ mintrequest.royaltyRecipient = address (2 );
421+ mintrequest.royaltyBps = 0 ;
422+ mintrequest.primarySaleRecipient = address (deployer);
423+ mintrequest.uri = "ipfs:// " ;
424+ mintrequest.quantity = 1 ;
425+ mintrequest.pricePerToken = 0 ;
426+ mintrequest.currency = address (3 );
427+ mintrequest.validityStartTimestamp = 1000 ;
428+ mintrequest.validityEndTimestamp = 2000 ;
429+ mintrequest.uid = bytes32 (id);
430+
431+ bytes memory encodedRequest = abi.encode (
432+ typehashMintRequest,
433+ mintrequest.to,
434+ mintrequest.royaltyRecipient,
435+ mintrequest.royaltyBps,
436+ mintrequest.primarySaleRecipient,
437+ keccak256 (bytes (mintrequest.uri)),
438+ mintrequest.quantity,
439+ mintrequest.pricePerToken,
440+ mintrequest.currency,
441+ mintrequest.validityStartTimestamp,
442+ mintrequest.validityEndTimestamp,
443+ mintrequest.uid
444+ );
445+ bytes32 structHash = keccak256 (encodedRequest);
446+ bytes32 typedDataHash = keccak256 (abi.encodePacked ("\x19\x01 " , domainSeparator, structHash));
447+
448+ (uint8 v , bytes32 r , bytes32 s ) = vm.sign (privateKey, typedDataHash);
449+ bytes memory signature = abi.encodePacked (r, s, v);
450+ vm.warp (1000 );
451+ sigdrop.mintWithSignature (mintrequest, signature);
452+
453+ (v, r, s) = vm.sign (4321 , typedDataHash);
454+ signature = abi.encodePacked (r, s, v);
455+ vm.expectRevert ("Invalid request " );
456+ sigdrop.mintWithSignature (mintrequest, signature);
457+ }
458+
448459 /**
449460 * note: Testing token balances; checking balance and owner of tokens after minting with signature.
450461 */
451- function test_balances_mintWithSignature_checkBalanceAndOwner () public {
462+ function test_balances_mintWithSignature () public {
452463 vm.prank (deployerSigner);
453464 sigdrop.lazyMint (100 , "ipfs:// " , "" );
454465 uint256 id = 0 ;
@@ -467,6 +478,8 @@ contract SignatureDropTest is BaseTest {
467478 mintrequest.uid = bytes32 (id);
468479
469480 {
481+ uint256 currencyBalBefore = erc20.balanceOf (deployerSigner);
482+
470483 bytes memory encodedRequest = abi.encode (
471484 typehashMintRequest,
472485 mintrequest.to,
@@ -498,6 +511,8 @@ contract SignatureDropTest is BaseTest {
498511 address owner = sigdrop.ownerOf (0 );
499512 assertEq (deployerSigner, owner);
500513
514+ assertEq (currencyBalBefore - mintrequest.pricePerToken * mintrequest.quantity, erc20.balanceOf (deployerSigner));
515+
501516 vm.expectRevert (abi.encodeWithSignature ("OwnerQueryForNonexistentToken() " ));
502517 owner = sigdrop.ownerOf (1 );
503518 }
@@ -506,7 +521,7 @@ contract SignatureDropTest is BaseTest {
506521 /*
507522 * note: Testing state changes; minting with signature, for a given price and currency.
508523 */
509- function mintWithSignature_priceAndCurrency (ISignatureMintERC721.MintRequest memory mintrequest ) internal {
524+ function mintWithSignature (ISignatureMintERC721.MintRequest memory mintrequest ) internal {
510525 vm.prank (deployerSigner);
511526 sigdrop.lazyMint (100 , "ipfs:// " , "" );
512527 uint256 id = 0 ;
@@ -568,7 +583,7 @@ contract SignatureDropTest is BaseTest {
568583 }
569584 }
570585
571- function test_fuzz_mintWithSignature_priceAndCurrency (uint128 x , uint128 y ) public {
586+ function test_fuzz_mintWithSignature (uint128 x , uint128 y ) public {
572587 if (x < y) {
573588 uint256 id = 0 ;
574589 ISignatureMintERC721.MintRequest memory mintrequest;
@@ -585,7 +600,7 @@ contract SignatureDropTest is BaseTest {
585600 mintrequest.validityEndTimestamp = y;
586601 mintrequest.uid = bytes32 (id);
587602
588- mintWithSignature_priceAndCurrency (mintrequest);
603+ mintWithSignature (mintrequest);
589604 }
590605 }
591606
0 commit comments