Skip to content

Commit 1b11a72

Browse files
Krishang NadgaudaKrishang Nadgauda
authored andcommitted
format mintWithSignature test
1 parent da118d9 commit 1b11a72

File tree

1 file changed

+69
-54
lines changed

1 file changed

+69
-54
lines changed

src/test/drop/SignatureDrop.t.sol

Lines changed: 69 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)