Skip to content
Open
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
26 changes: 26 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
SEPOLIA_RPC_URL=https://sepolia.infura.io/v3/YOUR_INFURA_KEY
PRIVATE_KEY=0xYOUR_PRIVATE_KEY
ETHERSCAN_API_KEY=YOUR_ETHERSCAN_KEY

UNISWAP_UNIVERSAL_ROUTER=
PERMIT2_ADDRESS=
INITIAL_OPERATOR=
INITIAL_FEE_DESTINATION=
CONTRACT_ADDRESS=
OPERATOR_PRIVATE_KEY=
PAYER_PRIVATE_KEY=
RECIPIENT=
REFUND_DESTINATION=
RPC_URL=

POOL_FEE_TIER=
RECIPIENT_AMOUNT_WEI=
FEE_AMOUNT_WEI=
GAS_CUSHION_WEI=

# Mainnet
WRAPPED_NATIVE_ADDRESS=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
USDC_ADDRESS=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
UNISWAP_V3_FACTORY=0x1F98431c8aD98523631AE4a59f267346ea31F984
UNISWAP_V3_QUOTER_V1=0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6
UNISWAP_V3_QUOTER_V2=0x61fFE014bA17989E743c5F6cB21bF9697530B21e
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
.idea
.idea
node_modules
artifacts
cache
.vscode
.env
2 changes: 1 addition & 1 deletion contracts/interfaces/ITransfers.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.17;

import "../permit2/src/interfaces/ISignatureTransfer.sol";
import "../../lib/permit2/src/interfaces/ISignatureTransfer.sol";

// @notice Description of the transfer
// @member recipientAmount Amount of currency to transfer
Expand Down
3 changes: 2 additions & 1 deletion contracts/transfers/Transfers.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ import "../interfaces/IWrappedNativeCurrency.sol";
import "../interfaces/ITransfers.sol";
import "../interfaces/IERC7597.sol";
import "../utils/Sweepable.sol";
import "../permit2/src/Permit2.sol";
import "../../lib/permit2/src/Permit2.sol";


// Uniswap error selectors, used to surface information when swaps fail
// Pulled from @uniswap/universal-router/out/V3SwapRouter.sol/V3SwapRouter.json after compiling with forge
Expand Down
22 changes: 22 additions & 0 deletions hardhat.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
require("dotenv").config();
require("@nomicfoundation/hardhat-toolbox");

module.exports = {
solidity: {
version: "0.8.17",
settings: {
optimizer: { enabled: true, runs: 200 },
viaIR: true,
},
},
networks: {
sepolia: {
url: process.env.SEPOLIA_RPC_URL || "",
accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
},
},
etherscan: { apiKey: process.env.ETHERSCAN_API_KEY || "" },
sourcify: {
enabled: false,
}
};
1 change: 1 addition & 0 deletions lib/permit2/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
FORK_URL=
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/batchTransferFrom.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
61797
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
81786
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/lockdown.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
28435
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
60346
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
65533
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
60811
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
46296
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/permitBatchCleanWrite.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
91924
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/permitBatchDirtyWrite.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
57724
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
143387
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
88867
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/permitCleanWrite.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
63119
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/permitCompactSig.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
63094
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/permitDirtyNonce.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
44014
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/permitDirtyWrite.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
46019
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/permitInvalidSigner.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
40301
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
61114
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
44014
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/permitSignatureExpired.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
31700
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
120325
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
86066
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
86092
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
87817
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
48268
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
60811
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
118525
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
133544
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
61886
1 change: 1 addition & 0 deletions lib/permit2/.forge-snapshots/transferFrom.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
52197
115 changes: 115 additions & 0 deletions lib/permit2/.gas-snapshot
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
AllowanceTransferInvariants:invariant_balanceEqualsSpent() (runs: 256, calls: 3840, reverts: 879)
AllowanceTransferInvariants:invariant_permit2NeverHoldsBalance() (runs: 256, calls: 3840, reverts: 878)
AllowanceTransferInvariants:invariant_spendNeverExceedsPermit() (runs: 256, calls: 3840, reverts: 881)
AllowanceTransferTest:testApprove() (gas: 47570)
AllowanceTransferTest:testBatchTransferFrom() (gas: 159197)
AllowanceTransferTest:testBatchTransferFromDifferentOwners() (gas: 235094)
AllowanceTransferTest:testBatchTransferFromMultiToken() (gas: 231841)
AllowanceTransferTest:testBatchTransferFromWithGasSnapshot() (gas: 159857)
AllowanceTransferTest:testExcessiveInvalidation() (gas: 64205)
AllowanceTransferTest:testInvalidateMultipleNonces() (gas: 83150)
AllowanceTransferTest:testInvalidateNonces() (gas: 62847)
AllowanceTransferTest:testInvalidateNoncesInvalid() (gas: 16327)
AllowanceTransferTest:testLockdown() (gas: 145984)
AllowanceTransferTest:testLockdownEvent() (gas: 117749)
AllowanceTransferTest:testMaxAllowance() (gas: 134888)
AllowanceTransferTest:testMaxAllowanceDirtyWrite() (gas: 117455)
AllowanceTransferTest:testPartialAllowance() (gas: 105140)
AllowanceTransferTest:testReuseOrderedNonceInvalid() (gas: 69154)
AllowanceTransferTest:testSetAllowance() (gas: 89627)
AllowanceTransferTest:testSetAllowanceBatch() (gas: 133740)
AllowanceTransferTest:testSetAllowanceBatchDifferentNonces() (gas: 118603)
AllowanceTransferTest:testSetAllowanceBatchDirtyWrite() (gas: 99210)
AllowanceTransferTest:testSetAllowanceBatchEvent() (gas: 116049)
AllowanceTransferTest:testSetAllowanceCompactSig() (gas: 89587)
AllowanceTransferTest:testSetAllowanceDeadlinePassed() (gas: 56512)
AllowanceTransferTest:testSetAllowanceDirtyWrite() (gas: 72175)
AllowanceTransferTest:testSetAllowanceIncorrectSigLength() (gas: 29198)
AllowanceTransferTest:testSetAllowanceInvalidSignature() (gas: 64065)
AllowanceTransferTest:testSetAllowanceTransfer() (gas: 103115)
AllowanceTransferTest:testSetAllowanceTransferDirtyNonceDirtyTransfer() (gas: 97194)
AllowanceTransferTest:testTransferFromWithGasSnapshot() (gas: 132867)
AllowanceUnitTest:testPackAndUnpack(uint160,uint48,uint48) (runs: 256, μ: 39025, ~: 39103)
AllowanceUnitTest:testUpdateAllRandomly(uint160,uint48,uint48) (runs: 256, μ: 40243, ~: 40244)
AllowanceUnitTest:testUpdateAmountExpirationRandomly(uint160,uint48) (runs: 256, μ: 39169, ~: 39170)
CompactSignature:testCompactSignature27() (gas: 300)
CompactSignature:testCompactSignature28() (gas: 144)
DeployPermit2Test:testAllowanceTransferSanityCheck() (gas: 101876)
DeployPermit2Test:testDeployPermit2() (gas: 4337527)
DeployPermit2Test:testSignatureTransferSanityCheck() (gas: 92792)
EIP712Test:testDomainSeparator() (gas: 5881)
EIP712Test:testDomainSeparatorAfterFork() (gas: 10830)
MockPermit2Lib:testPermit2Code(address):(bool) (runs: 256, μ: 3003, ~: 3016)
NonceBitmapTest:testHighNonces() (gas: 36305)
NonceBitmapTest:testInvalidateFullWord() (gas: 63061)
NonceBitmapTest:testInvalidateNoncesRandomly(uint248,uint256) (runs: 256, μ: 30439, ~: 31139)
NonceBitmapTest:testInvalidateNonzeroWord() (gas: 85642)
NonceBitmapTest:testInvalidateTwoNoncesRandomly(uint248,uint256,uint256) (runs: 256, μ: 39182, ~: 39182)
NonceBitmapTest:testLowNonces() (gas: 41041)
NonceBitmapTest:testNonceWordBoundary() (gas: 42284)
NonceBitmapTest:testUseTwoRandomNonces(uint256,uint256) (runs: 256, μ: 49190, ~: 51625)
NonceBitmapTest:testUsingNonceTwiceFails(uint256) (runs: 256, μ: 21935, ~: 21960)
Permit2LibTest:testOZSafePermit() (gas: 24682)
Permit2LibTest:testOZSafePermitPlusOZSafeTransferFrom() (gas: 129329)
Permit2LibTest:testOZSafeTransferFrom() (gas: 39007)
Permit2LibTest:testPermit2() (gas: 22941)
Permit2LibTest:testPermit2DSLessToken() (gas: 7143)
Permit2LibTest:testPermit2DSMore32Token() (gas: 7252)
Permit2LibTest:testPermit2DSMoreToken() (gas: 7023)
Permit2LibTest:testPermit2Full() (gas: 42356)
Permit2LibTest:testPermit2InvalidAmount() (gas: 21011)
Permit2LibTest:testPermit2LargerDS() (gas: 51464)
Permit2LibTest:testPermit2LargerDSRevert() (gas: 32841)
Permit2LibTest:testPermit2NonPermitFallback() (gas: 37245)
Permit2LibTest:testPermit2NonPermitToken() (gas: 32164)
Permit2LibTest:testPermit2PlusTransferFrom2() (gas: 126995)
Permit2LibTest:testPermit2PlusTransferFrom2WithNonPermit() (gas: 148221)
Permit2LibTest:testPermit2PlusTransferFrom2WithNonPermitFallback() (gas: 174749)
Permit2LibTest:testPermit2PlusTransferFrom2WithWETH9Mainnet() (gas: 147934)
Permit2LibTest:testPermit2SmallerDS() (gas: 77688)
Permit2LibTest:testPermit2SmallerDSNoRevert() (gas: 59324)
Permit2LibTest:testPermit2WETH9Mainnet() (gas: 28774)
Permit2LibTest:testSimplePermit2() (gas: 29117)
Permit2LibTest:testSimplePermit2InvalidAmount() (gas: 16944)
Permit2LibTest:testSimplePermit2PlusTransferFrom2WithNonPermit() (gas: 148463)
Permit2LibTest:testStandardPermit() (gas: 22535)
Permit2LibTest:testStandardTransferFrom() (gas: 38143)
Permit2LibTest:testTransferFrom2() (gas: 38734)
Permit2LibTest:testTransferFrom2Full() (gas: 53368)
Permit2LibTest:testTransferFrom2InvalidAmount() (gas: 12732)
Permit2LibTest:testTransferFrom2NonPermitToken() (gas: 53170)
SignatureTransferTest:testCorrectWitnessTypehashes() (gas: 3091)
SignatureTransferTest:testGasMultiplePermitBatchTransferFrom() (gas: 270972)
SignatureTransferTest:testGasSinglePermitBatchTransferFrom() (gas: 183860)
SignatureTransferTest:testGasSinglePermitTransferFrom() (gas: 123854)
SignatureTransferTest:testInvalidateUnorderedNonces() (gas: 41396)
SignatureTransferTest:testPermitBatchMultiPermitSingleTransfer() (gas: 133675)
SignatureTransferTest:testPermitBatchTransferFrom() (gas: 162019)
SignatureTransferTest:testPermitBatchTransferFromSingleRecipient() (gas: 187957)
SignatureTransferTest:testPermitBatchTransferFromTypedWitness() (gas: 239926)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidType() (gas: 84489)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidTypeHash() (gas: 86007)
SignatureTransferTest:testPermitBatchTransferFromTypedWitnessInvalidWitness() (gas: 85751)
SignatureTransferTest:testPermitBatchTransferInvalidAmountsLengthMismatch() (gas: 41574)
SignatureTransferTest:testPermitBatchTransferMultiAddr() (gas: 160547)
SignatureTransferTest:testPermitBatchTransferSingleRecipientManyTokens() (gas: 209422)
SignatureTransferTest:testPermitTransferFrom() (gas: 92909)
SignatureTransferTest:testPermitTransferFromCompactSig() (gas: 124059)
SignatureTransferTest:testPermitTransferFromIncorrectSigLength() (gas: 51346)
SignatureTransferTest:testPermitTransferFromInvalidNonce() (gas: 72928)
SignatureTransferTest:testPermitTransferFromRandomNonceAndAmount(uint256,uint128) (runs: 256, μ: 95752, ~: 96728)
SignatureTransferTest:testPermitTransferFromToSpender() (gas: 93283)
SignatureTransferTest:testPermitTransferFromTypedWitness() (gas: 125159)
SignatureTransferTest:testPermitTransferFromTypedWitnessInvalidType() (gas: 55947)
SignatureTransferTest:testPermitTransferFromTypedWitnessInvalidTypehash() (gas: 56879)
SignatureTransferTest:testPermitTransferSpendLessThanFull(uint256,uint128) (runs: 256, μ: 97604, ~: 99733)
TypehashGeneration:testPermitBatch() (gas: 40473)
TypehashGeneration:testPermitBatchTransferFrom() (gas: 49837)
TypehashGeneration:testPermitBatchTransferFromWithWitness() (gas: 56621)
TypehashGeneration:testPermitBatchTransferFromWithWitnessIncorrectPermitData() (gas: 56744)
TypehashGeneration:testPermitBatchTransferFromWithWitnessIncorrectTypehashStub() (gas: 57353)
TypehashGeneration:testPermitSingle() (gas: 28138)
TypehashGeneration:testPermitTransferFrom() (gas: 36511)
TypehashGeneration:testPermitTransferFromWithWitness() (gas: 43469)
TypehashGeneration:testPermitTransferFromWithWitnessIncorrectPermitData() (gas: 43436)
TypehashGeneration:testPermitTransferFromWithWitnessIncorrectTypehashStub() (gas: 43956)
2 changes: 2 additions & 0 deletions lib/permit2/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.sol linguist-language=Solidity
.gas-snapshot linguist-language=Julia
21 changes: 21 additions & 0 deletions lib/permit2/.github/workflows/gas.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Gas

on:
push:
branches:
- main
pull_request:

jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Check gas snapshots
run: forge snapshot --check
30 changes: 30 additions & 0 deletions lib/permit2/.github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Integration Tests

on:
push:
branches:
- main
pull_request:

jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Install dependencies
run: forge install

- name: Check contract sizes
run: forge build --sizes

- name: Run tests
run: forge test
env:
FOUNDRY_PROFILE: integration
FORK_URL: ${{ secrets.FORK_URL }}
21 changes: 21 additions & 0 deletions lib/permit2/.github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Lint

on:
push:
branches:
- main
pull_request:

jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Check formatting
run: forge fmt --check
27 changes: 27 additions & 0 deletions lib/permit2/.github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Unit Tests

on:
push:
branches:
- main
pull_request:

jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Install dependencies
run: forge install

- name: Check contract sizes
run: forge build --sizes

- name: Run tests
run: forge test
4 changes: 4 additions & 0 deletions lib/permit2/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.env
/cache
/out
broadcast/
Loading