improve code quality of tests

This commit is contained in:
Noah Zinsmeister
2020-01-22 12:16:55 -05:00
parent 62e4187562
commit ea5e63c427
5 changed files with 53 additions and 64 deletions

View File

@ -1,4 +1,5 @@
import { providers, Contract } from 'ethers'
import { Contract } from 'ethers'
import { Web3Provider } from 'ethers/providers'
import {
BigNumber,
bigNumberify,
@ -9,16 +10,15 @@ import {
solidityPack
} from 'ethers/utils'
export function expandTo18Decimals(n: number): BigNumber {
return bigNumberify(n).mul(bigNumberify(10).pow(18))
}
const PERMIT_TYPEHASH = keccak256(
toUtf8Bytes('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)')
)
const GET_DOMAIN_SEPARATOR = async (token: Contract) => {
const name = await token.name()
export function expandTo18Decimals(n: number): BigNumber {
return bigNumberify(n).mul(bigNumberify(10).pow(18))
}
function getDomainSeparator(name: string, tokenAddress: string) {
return keccak256(
defaultAbiCoder.encode(
['bytes32', 'bytes32', 'bytes32', 'uint256', 'address'],
@ -27,7 +27,7 @@ const GET_DOMAIN_SEPARATOR = async (token: Contract) => {
keccak256(toUtf8Bytes(name)),
keccak256(toUtf8Bytes('1')),
1,
token.address
tokenAddress
]
)
)
@ -45,24 +45,22 @@ export function getCreate2Address(
keccak256(solidityPack(['address', 'address'], [token0Address, token1Address])),
keccak256(bytecode)
]
const sanitizedInputs = `0x${create2Inputs.map(i => i.slice(2)).join('')}`
return getAddress(`0x${keccak256(sanitizedInputs).slice(-40)}`)
}
interface Approve {
owner: string
spender: string
value: BigNumber
}
export async function getApprovalDigest(
token: Contract,
approve: Approve,
approve: {
owner: string
spender: string
value: BigNumber
},
nonce: BigNumber,
expiration: BigNumber
): Promise<string> {
const DOMAIN_SEPARATOR = await GET_DOMAIN_SEPARATOR(token)
const name = await token.name()
const DOMAIN_SEPARATOR = getDomainSeparator(name, token.address)
return keccak256(
solidityPack(
['bytes1', 'bytes1', 'bytes32', 'bytes32'],
@ -81,7 +79,7 @@ export async function getApprovalDigest(
)
}
async function mineBlock(provider: providers.Web3Provider, timestamp?: number): Promise<void> {
async function mineBlock(provider: Web3Provider, timestamp?: number): Promise<void> {
await new Promise((resolve, reject) => {
;(provider._web3Provider.sendAsync as any)(
{ jsonrpc: '2.0', method: 'evm_mine', params: timestamp ? [timestamp] : [] },
@ -96,11 +94,7 @@ async function mineBlock(provider: providers.Web3Provider, timestamp?: number):
})
}
export async function mineBlocks(
provider: providers.Web3Provider,
numberOfBlocks: number,
timestamp?: number
): Promise<void> {
export async function mineBlocks(provider: Web3Provider, numberOfBlocks: number, timestamp?: number): Promise<void> {
await Promise.all([...Array(numberOfBlocks - 1)].map(() => mineBlock(provider)))
await mineBlock(provider, timestamp)
}