@airdao/astra-universal-router
Version:
Smart contracts for Universal Router
58 lines (52 loc) • 2.45 kB
text/typescript
import { UniversalRouter, Permit2, ISAMB, ERC20, MintableERC20__factory, ISAMB__factory } from '../../../typechain'
import { expect } from '../shared/expect'
import { ALICE_ADDRESS } from '../shared/constants'
import { abi as TOKEN_ABI } from '../../../artifacts/solmate/src/tokens/ERC20.sol/ERC20.json'
import { abi as SAMB_ABI } from '../../../artifacts/contracts/interfaces/external/ISAMB.sol/ISAMB.json'
import { resetFork, SAMB } from '../shared/testnetForkHelpers'
import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'
import hre from 'hardhat'
import { expandTo18DecimalsBN } from '../shared/helpers'
import deployUniversalRouter, { deployPermit2 } from '../shared/deployUniversalRouter'
import { RoutePlanner } from '../shared/planner'
import { BigNumber } from 'ethers'
import { Token } from 'astra-sdk-core'
const { ethers } = hre
describe('UniversalRouter Gas Tests', () => {
let alice: SignerWithAddress
let planner: RoutePlanner
let router: UniversalRouter
let permit2: Permit2
let bondContract: ERC20
let sambContract: ISAMB
async function deployMintableToken(name: string, symbol: string, signer: SignerWithAddress): Promise<Token> {
const token = await new MintableERC20__factory(signer).deploy(
name,
symbol,
BigNumber.from(10).pow(18).mul('1000000000000000000')
)
return new Token(22040, token.address, 18, name, symbol)
}
beforeEach(async () => {
await resetFork()
alice = await ethers.getSigner(ALICE_ADDRESS)
await hre.network.provider.request({
method: 'hardhat_impersonateAccount',
params: [ALICE_ADDRESS],
})
await hre.network.provider.request({
method: 'hardhat_setBalance',
params: [ALICE_ADDRESS, '0x10000000000000000000000'],
})
const BOND = await deployMintableToken('Bond', 'BOND', alice)
await (await ISAMB__factory.connect(SAMB.address, alice).deposit({ value: expandTo18DecimalsBN(1000) })).wait()
bondContract = new ethers.Contract(BOND.address, TOKEN_ABI, alice) as ERC20
sambContract = new ethers.Contract(SAMB.address, SAMB_ABI, alice) as ISAMB
permit2 = (await deployPermit2()).connect(alice) as Permit2
router = (await deployUniversalRouter(permit2)).connect(alice) as UniversalRouter
planner = new RoutePlanner()
})
it('gas: bytecode size', async () => {
expect(((await router.provider.getCode(router.address)).length - 2) / 2).to.matchSnapshot()
})
})