Skip to content

Commit

Permalink
Add skeleton
Browse files Browse the repository at this point in the history
  • Loading branch information
zhongeric committed Nov 22, 2023
1 parent 56dcd35 commit fa2abb3
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 137 deletions.
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
FOUNDRY_RPC_URL=https://mainnet.infura.io/v3/123456789
INFURA_API_KEY=
13 changes: 13 additions & 0 deletions test/integration-tests/RelayOrderReactor.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import hre from 'hardhat'
import { expect } from 'chai'

const { ethers } = hre

describe("Relay order reactor tests", () => {
beforeEach(async () => {
})

it("passes", async () => {
expect(true).to.be.true;
});
})
18 changes: 0 additions & 18 deletions test/integration-tests/shared/mainnetForkHelpers.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,11 @@
import { abi as V2_PAIR_ABI } from '../../../out/@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol/IUniswapV2Pair.json'
import { Token, WETH9 } from '@uniswap/sdk-core'
import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'
import { BigNumber } from 'ethers'
import hre from 'hardhat'
import { Pair } from '@uniswap/v2-sdk'
const { ethers } = hre

export const WETH = WETH9[1]
export const DAI = new Token(1, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin')
export const USDC = new Token(1, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C')
export const USDT = new Token(1, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD')

type Reserves = {
reserve0: BigNumber
reserve1: BigNumber
}

export const getV2PoolReserves = async (alice: SignerWithAddress, tokenA: Token, tokenB: Token): Promise<Reserves> => {
const contractAddress = Pair.getAddress(tokenA, tokenB)
const contract = new ethers.Contract(contractAddress, V2_PAIR_ABI, alice)

const { reserve0, reserve1 } = await contract.getReserves()
return { reserve0, reserve1 }
}

export const resetFork = async (block: number = 15360000) => {
await hre.network.provider.request({
method: 'hardhat_reset',
Expand Down
238 changes: 119 additions & 119 deletions test/integration-tests/shared/protocolHelpers/permit2.ts
Original file line number Diff line number Diff line change
@@ -1,119 +1,119 @@
import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'
import { BigNumber } from 'ethers'
import hre from 'hardhat'
import PERMIT2_COMPILE from '../../../../artifacts/permit2/src/Permit2.sol/Permit2.json'
import { Permit2 } from '../../../../typechain'

const { ethers } = hre

const chainId: number = hre.network.config.chainId ? hre.network.config.chainId : 1

export type PermitDetails = {
token: string
amount: number | BigNumber
expiration: number | BigNumber
nonce: number | BigNumber
}

export type PermitSingle = {
details: PermitDetails
spender: string
sigDeadline: number | BigNumber
}

export type PermitBatch = {
details: PermitDetails[]
spender: string
sigDeadline: number | BigNumber
}

export type TransferDetail = {
from: string
to: string
amount: number | BigNumber
token: string
}

export const PERMIT2_PERMIT_TYPE = {
PermitDetails: [
{ name: 'token', type: 'address' },
{ name: 'amount', type: 'uint160' },
{ name: 'expiration', type: 'uint48' },
{ name: 'nonce', type: 'uint48' },
],
PermitSingle: [
{ name: 'details', type: 'PermitDetails' },
{ name: 'spender', type: 'address' },
{ name: 'sigDeadline', type: 'uint256' },
],
}

export const PERMIT2_PERMIT_BATCH_TYPE = {
PermitDetails: [
{ name: 'token', type: 'address' },
{ name: 'amount', type: 'uint160' },
{ name: 'expiration', type: 'uint48' },
{ name: 'nonce', type: 'uint48' },
],
PermitBatch: [
{ name: 'details', type: 'PermitDetails[]' },
{ name: 'spender', type: 'address' },
{ name: 'sigDeadline', type: 'uint256' },
],
}

export const PERMIT2_INTERFACE = new ethers.utils.Interface(PERMIT2_COMPILE.abi)

export function getEip712Domain(chainId: number, verifyingContract: string) {
return {
name: 'Permit2',
chainId,
verifyingContract,
}
}

export async function signPermit(
permit: PermitSingle,
signer: SignerWithAddress,
verifyingContract: string
): Promise<string> {
const eip712Domain = getEip712Domain(chainId, verifyingContract)
const signature = await signer._signTypedData(eip712Domain, PERMIT2_PERMIT_TYPE, permit)

return signature
}

export async function getPermitSignature(
permit: PermitSingle,
signer: SignerWithAddress,
permit2: Permit2
): Promise<string> {
// look up the correct nonce for this permit
const nextNonce = (await permit2.allowance(signer.address, permit.details.token, permit.spender)).nonce
permit.details.nonce = nextNonce
return await signPermit(permit, signer, permit2.address)
}

export async function getPermitBatchSignature(
permit: PermitBatch,
signer: SignerWithAddress,
permit2: Permit2
): Promise<string> {
for (const i in permit.details) {
const nextNonce = (await permit2.allowance(signer.address, permit.details[i].token, permit.spender)).nonce
permit.details[i].nonce = nextNonce
}

return await signPermitBatch(permit, signer, permit2.address)
}

export async function signPermitBatch(
permit: PermitBatch,
signer: SignerWithAddress,
verifyingContract: string
): Promise<string> {
const eip712Domain = getEip712Domain(chainId, verifyingContract)
const signature = await signer._signTypedData(eip712Domain, PERMIT2_PERMIT_BATCH_TYPE, permit)

return signature
}
// import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'
// import { BigNumber } from 'ethers'
// import hre from 'hardhat'
// import PERMIT2_COMPILE from '../../../../out/permit2/src/Permit2.sol/Permit2.json'
// import { Permit2 } from '../../../../typechain'

// const { ethers } = hre

// const chainId: number = hre.network.config.chainId ? hre.network.config.chainId : 1

// export type PermitDetails = {
// token: string
// amount: number | BigNumber
// expiration: number | BigNumber
// nonce: number | BigNumber
// }

// export type PermitSingle = {
// details: PermitDetails
// spender: string
// sigDeadline: number | BigNumber
// }

// export type PermitBatch = {
// details: PermitDetails[]
// spender: string
// sigDeadline: number | BigNumber
// }

// export type TransferDetail = {
// from: string
// to: string
// amount: number | BigNumber
// token: string
// }

// export const PERMIT2_PERMIT_TYPE = {
// PermitDetails: [
// { name: 'token', type: 'address' },
// { name: 'amount', type: 'uint160' },
// { name: 'expiration', type: 'uint48' },
// { name: 'nonce', type: 'uint48' },
// ],
// PermitSingle: [
// { name: 'details', type: 'PermitDetails' },
// { name: 'spender', type: 'address' },
// { name: 'sigDeadline', type: 'uint256' },
// ],
// }

// export const PERMIT2_PERMIT_BATCH_TYPE = {
// PermitDetails: [
// { name: 'token', type: 'address' },
// { name: 'amount', type: 'uint160' },
// { name: 'expiration', type: 'uint48' },
// { name: 'nonce', type: 'uint48' },
// ],
// PermitBatch: [
// { name: 'details', type: 'PermitDetails[]' },
// { name: 'spender', type: 'address' },
// { name: 'sigDeadline', type: 'uint256' },
// ],
// }

// export const PERMIT2_INTERFACE = new ethers.utils.Interface(PERMIT2_COMPILE.abi)

// export function getEip712Domain(chainId: number, verifyingContract: string) {
// return {
// name: 'Permit2',
// chainId,
// verifyingContract,
// }
// }

// export async function signPermit(
// permit: PermitSingle,
// signer: SignerWithAddress,
// verifyingContract: string
// ): Promise<string> {
// const eip712Domain = getEip712Domain(chainId, verifyingContract)
// const signature = await signer._signTypedData(eip712Domain, PERMIT2_PERMIT_TYPE, permit)

// return signature
// }

// export async function getPermitSignature(
// permit: PermitSingle,
// signer: SignerWithAddress,
// permit2: Permit2
// ): Promise<string> {
// // look up the correct nonce for this permit
// const nextNonce = (await permit2.allowance(signer.address, permit.details.token, permit.spender)).nonce
// permit.details.nonce = nextNonce
// return await signPermit(permit, signer, permit2.address)
// }

// export async function getPermitBatchSignature(
// permit: PermitBatch,
// signer: SignerWithAddress,
// permit2: Permit2
// ): Promise<string> {
// for (const i in permit.details) {
// const nextNonce = (await permit2.allowance(signer.address, permit.details[i].token, permit.spender)).nonce
// permit.details[i].nonce = nextNonce
// }

// return await signPermitBatch(permit, signer, permit2.address)
// }

// export async function signPermitBatch(
// permit: PermitBatch,
// signer: SignerWithAddress,
// verifyingContract: string
// ): Promise<string> {
// const eip712Domain = getEip712Domain(chainId, verifyingContract)
// const signature = await signer._signTypedData(eip712Domain, PERMIT2_PERMIT_BATCH_TYPE, permit)

// return signature
// }

0 comments on commit fa2abb3

Please sign in to comment.