Skip to content

Commit

Permalink
undo permit batch addr0 (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
snreynolds committed Oct 24, 2022
1 parent 426572d commit be3b48d
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 57 deletions.
@@ -1 +1 @@
145853
145155
2 changes: 1 addition & 1 deletion .forge-snapshots/permitBatchTransferFromSingleToken.snap
@@ -1 +1 @@
90609
90375
2 changes: 1 addition & 1 deletion .forge-snapshots/single recipient 2 tokens.snap
@@ -1 +1 @@
124492
120178
2 changes: 1 addition & 1 deletion .forge-snapshots/single recipient many tokens.snap
@@ -1 +1 @@
138425
136103
45 changes: 22 additions & 23 deletions .gas-snapshot
Expand Up @@ -24,31 +24,30 @@ NonceBitmapTest:testInvalidateFullWord() (gas: 62732)
NonceBitmapTest:testInvalidateNonzeroWord() (gas: 85931)
NonceBitmapTest:testLowNonces() (gas: 41250)
NonceBitmapTest:testNonceWordBoundary() (gas: 58074)
NonceBitmapTest:testUseTwoRandomNonces(uint256,uint256) (runs: 256, μ: 49473, ~: 51913)
NonceBitmapTest:testUseTwoRandomNonces(uint256,uint256) (runs: 256, μ: 49388, ~: 51913)
NonceBitmapTest:testUsingNonceTwiceFails(uint256) (runs: 256, μ: 32679, ~: 32679)
SignatureTransferTest:testGasMultiplePermitBatchTransferFrom() (gas: 267323)
SignatureTransferTest:testGasSinglePermitBatchTransferFrom() (gas: 183781)
SignatureTransferTest:testGasSinglePermitTransferFrom() (gas: 123516)
SignatureTransferTest:testInvalidateUnorderedNonces() (gas: 55806)
SignatureTransferTest:testPermitBatchTransferFrom() (gas: 161776)
SignatureTransferTest:testPermitBatchTransferFromAddr0() (gas: 189531)
SignatureTransferTest:testPermitBatchTransferFromSingleRecipient() (gas: 186524)
SignatureTransferTest:testPermitBatchTransferFromTypedWitness() (gas: 165860)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidType() (gas: 82831)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidTypeHash() (gas: 82564)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidTypeName() (gas: 83732)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidWitness() (gas: 83765)
SignatureTransferTest:testPermitBatchTransferInvalidAmountsLength() (gas: 43965)
SignatureTransferTest:testGasMultiplePermitBatchTransferFrom() (gas: 266625)
SignatureTransferTest:testGasSinglePermitBatchTransferFrom() (gas: 183516)
SignatureTransferTest:testGasSinglePermitTransferFrom() (gas: 123494)
SignatureTransferTest:testInvalidateUnorderedNonces() (gas: 55784)
SignatureTransferTest:testPermitBatchTransferFrom() (gas: 159502)
SignatureTransferTest:testPermitBatchTransferFromSingleRecipient() (gas: 186009)
SignatureTransferTest:testPermitBatchTransferFromTypedWitness() (gas: 163580)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidType() (gas: 82819)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidTypeHash() (gas: 82530)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidTypeName() (gas: 83698)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidWitness() (gas: 83731)
SignatureTransferTest:testPermitBatchTransferInvalidAmountsLength() (gas: 43943)
SignatureTransferTest:testPermitBatchTransferInvalidRecipientsLength() (gas: 43210)
SignatureTransferTest:testPermitBatchTransferInvalidSingleAddr() (gas: 41912)
SignatureTransferTest:testPermitBatchTransferMultiAddr() (gas: 158304)
SignatureTransferTest:testPermitBatchTransferSingleRecipientManyTokens() (gas: 198088)
SignatureTransferTest:testPermitBatchTransferMultiAddr() (gas: 157816)
SignatureTransferTest:testPermitBatchTransferSingleRecipientManyTokens() (gas: 195744)
SignatureTransferTest:testPermitTransferFrom() (gas: 92654)
SignatureTransferTest:testPermitTransferFromInvalidNonce() (gas: 92292)
SignatureTransferTest:testPermitTransferFromRandomNonceAndAmount(uint256,uint128) (runs: 256, μ: 95263, ~: 96239)
SignatureTransferTest:testPermitTransferFromToSpender() (gas: 97041)
SignatureTransferTest:testPermitTransferFromInvalidNonce() (gas: 92270)
SignatureTransferTest:testPermitTransferFromRandomNonceAndAmount(uint256,uint128) (runs: 256, μ: 95241, ~: 96217)
SignatureTransferTest:testPermitTransferFromToSpender() (gas: 97019)
SignatureTransferTest:testPermitTransferFromTypedWitness() (gas: 96460)
SignatureTransferTest:testPermitTransferFromTypedWitnessInvalidType() (gas: 57413)
SignatureTransferTest:testPermitTransferFromTypedWitnessInvalidTypeName() (gas: 58380)
SignatureTransferTest:testPermitTransferFromTypedWitnessInvalidTypehash() (gas: 56760)
SignatureTransferTest:testPermitTransferSpendLessThanFull(uint256,uint128) (runs: 256, μ: 97576, ~: 99294)
SignatureTransferTest:testPermitTransferFromTypedWitnessInvalidType() (gas: 57391)
SignatureTransferTest:testPermitTransferFromTypedWitnessInvalidTypeName() (gas: 58358)
SignatureTransferTest:testPermitTransferFromTypedWitnessInvalidTypehash() (gas: 56738)
SignatureTransferTest:testPermitTransferSpendLessThanFull(uint256,uint128) (runs: 256, μ: 97554, ~: 99272)
3 changes: 1 addition & 2 deletions src/SignatureTransfer.sol
Expand Up @@ -136,8 +136,7 @@ contract SignatureTransfer is ISignatureTransfer, EIP712 {

unchecked {
for (uint256 i = 0; i < permit.tokens.length; ++i) {
address recipient = to[i] == address(0) ? permit.spender : to[i];
ERC20(permit.tokens[i]).safeTransferFrom(owner, recipient, requestedAmounts[i]);
ERC20(permit.tokens[i]).safeTransferFrom(owner, to[i], requestedAmounts[i]);
}
}
}
Expand Down
2 changes: 0 additions & 2 deletions src/interfaces/ISignatureTransfer.sol
Expand Up @@ -81,7 +81,6 @@ interface ISignatureTransfer {
) external;

/// @notice Transfers multiple tokens using a signed permit message
/// @dev If to is the zero address, the tokens are sent to the spender
/// @param permit The permit data signed over by the owner
/// @param owner The owner of the tokens to transfer
/// @param to The recipients of the tokens
Expand All @@ -97,7 +96,6 @@ interface ISignatureTransfer {

/// @notice Transfers multiple tokens using a signed permit message
/// @notice Includes extra data provided by the caller to verify signature over
/// @dev If to is the zero address, the tokens are sent to the spender.
/// @param permit The permit data signed over by the owner
/// @param owner The owner of the tokens to transfer
/// @param to The recipients of the tokens
Expand Down
28 changes: 2 additions & 26 deletions test/SignatureTransfer.t.sol
Expand Up @@ -160,7 +160,7 @@ contract SignatureTransferTest is Test, PermitSignature, TokenProvider, GasSnaps
assertEq(token0.balanceOf(from), startBalanceFrom0 - defaultAmount);
assertEq(token1.balanceOf(from), startBalanceFrom1 - defaultAmount);
assertEq(token0.balanceOf(address2), startBalanceTo0 + defaultAmount);
assertEq(token1.balanceOf(address(this)), startBalanceTo1 + defaultAmount);
assertEq(token1.balanceOf(address0), startBalanceTo1 + defaultAmount);
}

function testPermitBatchTransferFromSingleRecipient() public {
Expand All @@ -187,30 +187,6 @@ contract SignatureTransferTest is Test, PermitSignature, TokenProvider, GasSnaps
assertEq(token1.balanceOf(address2), startBalanceTo1 + defaultAmount);
}

function testPermitBatchTransferFromAddr0() public {
uint256 nonce = 0;
address[] memory tokens = AddressBuilder.fill(1, address(token0)).push(address(token1));
ISignatureTransfer.PermitBatchTransfer memory permit = defaultERC20PermitMultiple(tokens, nonce);
bytes memory sig = getPermitBatchTransferSignature(permit, fromPrivateKey, DOMAIN_SEPARATOR);

address[] memory to = AddressBuilder.fill(2, address(0));
uint256[] memory amounts = AmountBuilder.fill(2, defaultAmount);

uint256 startBalanceFrom0 = token0.balanceOf(from);
uint256 startBalanceFrom1 = token1.balanceOf(from);
uint256 startBalanceTo0 = token0.balanceOf(address2);
uint256 startBalanceTo1 = token1.balanceOf(address2);

snapStart("single recipient 2 tokens");
permit2.permitBatchTransferFrom(permit, from, to, amounts, sig);
snapEnd();

assertEq(token0.balanceOf(from), startBalanceFrom0 - defaultAmount);
assertEq(token1.balanceOf(from), startBalanceFrom1 - defaultAmount);
assertEq(token0.balanceOf(address(this)), startBalanceTo0 + defaultAmount);
assertEq(token1.balanceOf(address(this)), startBalanceTo1 + defaultAmount);
}

function testPermitBatchTransferMultiAddr() public {
uint256 nonce = 0;
// signed spender is address(this)
Expand Down Expand Up @@ -383,7 +359,7 @@ contract SignatureTransferTest is Test, PermitSignature, TokenProvider, GasSnaps
assertEq(token0.balanceOf(from), startBalanceFrom0 - defaultAmount);
assertEq(token1.balanceOf(from), startBalanceFrom1 - defaultAmount);
assertEq(token0.balanceOf(address2), startBalanceTo0 + defaultAmount);
assertEq(token1.balanceOf(address(this)), startBalanceTo1 + defaultAmount);
assertEq(token1.balanceOf(address0), startBalanceTo1 + defaultAmount);
}

function testPermitBatchTransferFromTypedWitnessInvalidType() public {
Expand Down

0 comments on commit be3b48d

Please sign in to comment.