Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Further gas improvements for lazy claim signing #91

Merged
merged 3 commits into from
May 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/manifold/contracts/lazyclaim/LazyPayableClaim.sol
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ abstract contract LazyPayableClaim is ILazyPayableClaim, AdminControl {

function _checkSignatureAndUpdate(address creatorContractAddress, uint256 instanceId, bytes calldata signature, bytes32 message, bytes32 nonce, address signingAddress, address mintFor, uint256 expiration, uint16 mintCount) internal {
// Verify valid message based on input variables
bytes32 expectedMessage = keccak256(abi.encode(creatorContractAddress, instanceId, nonce, mintFor, expiration, mintCount));
bytes32 expectedMessage = keccak256(abi.encodePacked(creatorContractAddress, instanceId, nonce, mintFor, expiration, mintCount));
// Verify nonce usage/re-use
require(!_usedMessages[creatorContractAddress][instanceId][nonce], "Cannot replay transaction");
address signer = message.recover(signature);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ contract ERC1155LazyPayableClaimSignatureMintingTest is Test {
uint16 mintCount = uint16(3);
bytes32 nonce = "1";
uint expiration = uint(block.timestamp) + uint(120);
bytes32 message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
bytes32 message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));

(uint8 v, bytes32 r, bytes32 s) = vm.sign(privateKey, message);
bytes memory signature = abi.encodePacked(r, s, v);
Expand Down Expand Up @@ -123,7 +123,7 @@ contract ERC1155LazyPayableClaimSignatureMintingTest is Test {
expiration
);

message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other, expiration, mintCount));

// Cannot replay same tx with same nonce, even with different mintfor
vm.expectRevert("Cannot replay transaction");
Expand All @@ -139,7 +139,7 @@ contract ERC1155LazyPayableClaimSignatureMintingTest is Test {
);

expiration = uint(block.timestamp) + uint(121);
message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));

// Cannot replay same tx with same nonce, even with different expiration
vm.expectRevert("Cannot replay transaction");
Expand All @@ -157,7 +157,7 @@ contract ERC1155LazyPayableClaimSignatureMintingTest is Test {
// Bad message signed
nonce = "2";
expiration = uint(block.timestamp) + uint(120);
message = keccak256(abi.encode(address(creatorCore), nonce, uint256(1), other2, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), nonce, uint256(1), other2, expiration, mintCount));

(v, r, s) = vm.sign(privateKey, message);
signature = abi.encodePacked(r, s, v);
Expand All @@ -177,7 +177,7 @@ contract ERC1155LazyPayableClaimSignatureMintingTest is Test {
// Correct message, wrong signer
nonce = "2";
expiration = uint(block.timestamp) + uint(120);
message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
(v, r, s) = vm.sign(privateKey2, message);
signature = abi.encodePacked(r, s, v);
vm.expectRevert(ILazyPayableClaim.InvalidSignature.selector);
Expand All @@ -195,7 +195,7 @@ contract ERC1155LazyPayableClaimSignatureMintingTest is Test {
// Expired signature
nonce = "2";
expiration = uint(0);
message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
(v, r, s) = vm.sign(privateKey, message);
signature = abi.encodePacked(r, s, v);
vm.expectRevert(ILazyPayableClaim.ExpiredSignature.selector);
Expand Down Expand Up @@ -239,7 +239,7 @@ contract ERC1155LazyPayableClaimSignatureMintingTest is Test {
vm.startPrank(other);
nonce = "2";
expiration = uint(block.timestamp) + uint(120);
message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
(v, r, s) = vm.sign(privateKey, message);
signature = abi.encodePacked(r, s, v);
vm.expectRevert(ILazyPayableClaim.MustUseSignatureMinting.selector);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ contract ERC721LazyPayableClaimSignatureMintingTest is Test {
uint16 mintCount = uint16(3);
bytes32 nonce = "1";
uint expiration = uint(block.timestamp) + uint(120);
bytes32 message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
bytes32 message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));

(uint8 v, bytes32 r, bytes32 s) = vm.sign(privateKey, message);
bytes memory signature = abi.encodePacked(r, s, v);
Expand Down Expand Up @@ -124,7 +124,7 @@ contract ERC721LazyPayableClaimSignatureMintingTest is Test {
expiration
);

message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other, expiration, mintCount));

// Cannot replay same tx with same nonce, even with different mintfor
vm.expectRevert("Cannot replay transaction");
Expand All @@ -140,7 +140,7 @@ contract ERC721LazyPayableClaimSignatureMintingTest is Test {
);

expiration = uint(block.timestamp) + uint(121);
message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));

// Cannot replay same tx with same nonce, even with different expiration
vm.expectRevert("Cannot replay transaction");
Expand All @@ -158,7 +158,7 @@ contract ERC721LazyPayableClaimSignatureMintingTest is Test {
// Bad message signed
nonce = "2";
expiration = uint(block.timestamp) + uint(120);
message = keccak256(abi.encode(address(creatorCore), nonce, uint256(1), other2, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), nonce, uint256(1), other2, expiration, mintCount));

(v, r, s) = vm.sign(privateKey, message);
signature = abi.encodePacked(r, s, v);
Expand All @@ -178,7 +178,7 @@ contract ERC721LazyPayableClaimSignatureMintingTest is Test {
// Correct message, wrong signer
nonce = "2";
expiration = uint(block.timestamp) + uint(120);
message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
(v, r, s) = vm.sign(privateKey2, message);
signature = abi.encodePacked(r, s, v);
vm.expectRevert(ILazyPayableClaim.InvalidSignature.selector);
Expand All @@ -196,7 +196,7 @@ contract ERC721LazyPayableClaimSignatureMintingTest is Test {
// Expired signature
nonce = "2";
expiration = uint(0);
message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
(v, r, s) = vm.sign(privateKey, message);
signature = abi.encodePacked(r, s, v);
vm.expectRevert(ILazyPayableClaim.ExpiredSignature.selector);
Expand Down Expand Up @@ -240,7 +240,7 @@ contract ERC721LazyPayableClaimSignatureMintingTest is Test {
vm.startPrank(other);
nonce = "2";
expiration = uint(block.timestamp) + uint(120);
message = keccak256(abi.encode(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
message = keccak256(abi.encodePacked(address(creatorCore), uint256(1), nonce, other2, expiration, mintCount));
(v, r, s) = vm.sign(privateKey, message);
signature = abi.encodePacked(r, s, v);
vm.expectRevert(ILazyPayableClaim.MustUseSignatureMinting.selector);
Expand Down
Loading