51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import { constants } from 'ethers'
|
|
import { ethers } from 'hardhat'
|
|
import { TestMulticallExtended } from '../typechain/TestMulticallExtended'
|
|
import { expect } from './shared/expect'
|
|
|
|
describe('MulticallExtended', async () => {
|
|
let multicall: TestMulticallExtended
|
|
|
|
beforeEach('create multicall', async () => {
|
|
const multicallTestFactory = await ethers.getContractFactory('TestMulticallExtended')
|
|
multicall = (await multicallTestFactory.deploy()) as TestMulticallExtended
|
|
})
|
|
|
|
it('fails deadline check', async () => {
|
|
await multicall.setTime(1)
|
|
await expect(
|
|
multicall['multicall(uint256,bytes[])'](0, [
|
|
multicall.interface.encodeFunctionData('functionThatReturnsTuple', ['1', '2']),
|
|
])
|
|
).to.be.revertedWith('Transaction too old')
|
|
})
|
|
|
|
it('passes deadline check', async () => {
|
|
const [data] = await multicall.callStatic['multicall(uint256,bytes[])'](0, [
|
|
multicall.interface.encodeFunctionData('functionThatReturnsTuple', ['1', '2']),
|
|
])
|
|
const {
|
|
tuple: { a, b },
|
|
} = multicall.interface.decodeFunctionResult('functionThatReturnsTuple', data)
|
|
expect(b).to.eq(1)
|
|
expect(a).to.eq(2)
|
|
})
|
|
|
|
it('fails previousBlockhash check', async () => {
|
|
await expect(
|
|
multicall['multicall(bytes32,bytes[])'](constants.HashZero, [
|
|
multicall.interface.encodeFunctionData('functionThatReturnsTuple', ['1', '2']),
|
|
])
|
|
).to.be.revertedWith('Blockhash')
|
|
})
|
|
|
|
it('passes previousBlockhash check', async () => {
|
|
const block = await ethers.provider.getBlock('latest')
|
|
await expect(
|
|
multicall['multicall(bytes32,bytes[])'](block.hash, [
|
|
multicall.interface.encodeFunctionData('functionThatReturnsTuple', ['1', '2']),
|
|
])
|
|
).to.not.be.reverted
|
|
})
|
|
})
|