From 3842e212a08b0e34d66756216c7a76ef86ccf8e2 Mon Sep 17 00:00:00 2001 From: Evgeny Gusarov Date: Thu, 9 May 2024 22:18:18 +0300 Subject: [PATCH] Add tests for Gnosis --- test/EthValidatorsChecker.spec.ts | 625 ++++++++++++++++-------------- test/shared/constants.ts | 2 +- test/shared/fixtures.ts | 31 +- test/shared/validators.ts | 17 +- 4 files changed, 365 insertions(+), 310 deletions(-) diff --git a/test/EthValidatorsChecker.spec.ts b/test/EthValidatorsChecker.spec.ts index 59cbd5d7..f4feee3b 100644 --- a/test/EthValidatorsChecker.spec.ts +++ b/test/EthValidatorsChecker.spec.ts @@ -6,6 +6,7 @@ import keccak256 from 'keccak256' import { DepositDataRegistry, EthValidatorsChecker, + GnoValidatorsChecker, EthVault, Keeper, VaultsRegistry, @@ -18,335 +19,359 @@ import { EthValidatorsData, createEthValidatorsData, createValidatorPublicKeys, - getEthValidatorsCheckerSigningData, + getValidatorsCheckerSigningData, getValidatorsMultiProof, } from './shared/validators' -describe('EthValidatorsChecker', () => { - const validatorDeposit = ethers.parseEther('32') - const capacity = MAX_UINT256 - const feePercent = 1000 - const metadataIpfsHash = 'bafkreidivzimqfqtoqxkrpge6bjyhlvxqs3rhe73owtmdulaxr5do5in7u' - - let admin: Signer, adminV1: Signer, other: Wallet - let vault: EthVault, - keeper: Keeper, - validatorsRegistry: Contract, - vaultsRegistry: VaultsRegistry, - depositDataRegistry: DepositDataRegistry, - ethValidatorsChecker: EthValidatorsChecker, - vaultV1: Contract, - vaultNotDeposited: EthVault - let validatorsData: EthValidatorsData - let publicKeys: Uint8Array[] - let validatorsRegistryRoot: string - - beforeEach('deploy fixture', async () => { - ;[admin, adminV1, other] = await (ethers as any).getSigners() - - const fixture = await loadFixture(ethVaultFixture) - validatorsRegistry = fixture.validatorsRegistry - keeper = fixture.keeper - depositDataRegistry = fixture.depositDataRegistry - ethValidatorsChecker = fixture.ethValidatorsChecker - vaultsRegistry = fixture.vaultsRegistry - - vault = await fixture.createEthVault(admin, { - capacity, - feePercent, - metadataIpfsHash, - }) - vaultV1 = await deployEthVaultV1( - await getEthVaultV1Factory(), - adminV1, - keeper, - vaultsRegistry, - validatorsRegistry, - fixture.osTokenVaultController, - fixture.osTokenConfig, - fixture.sharedMevEscrow, - encodeEthVaultInitParams({ +const networks = ['ETHEREUM', 'GNOSIS'] + +networks.forEach((network) => { + describe(`EthValidatorsChecker [${network}]`, () => { + let validatorDeposit = ethers.parseEther('32') + if (network == 'GNOSIS') { + validatorDeposit = ethers.parseEther('1') + } + + const capacity = MAX_UINT256 + const feePercent = 1000 + const metadataIpfsHash = 'bafkreidivzimqfqtoqxkrpge6bjyhlvxqs3rhe73owtmdulaxr5do5in7u' + + let admin: Signer, adminV1: Signer, other: Wallet + let vault: EthVault, + keeper: Keeper, + validatorsRegistry: Contract, + vaultsRegistry: VaultsRegistry, + depositDataRegistry: DepositDataRegistry, + validatorsChecker: EthValidatorsChecker | GnoValidatorsChecker, + validatorsCheckerTypeName: string, + vaultV1: Contract, + vaultNotDeposited: EthVault + let validatorsData: EthValidatorsData + let publicKeys: Uint8Array[] + let validatorsRegistryRoot: string + + beforeEach('deploy fixture', async () => { + ;[admin, adminV1, other] = await (ethers as any).getSigners() + + const fixture = await loadFixture(ethVaultFixture) + validatorsRegistry = fixture.validatorsRegistry + keeper = fixture.keeper + depositDataRegistry = fixture.depositDataRegistry + + validatorsCheckerTypeName = 'EthValidatorsChecker' + validatorsChecker = fixture.ethValidatorsChecker + + if (network == 'GNOSIS') { + validatorsCheckerTypeName = 'GnoValidatorsChecker' + validatorsChecker = fixture.gnoValidatorsChecker + } + + vaultsRegistry = fixture.vaultsRegistry + + vault = await fixture.createEthVault(admin, { capacity, feePercent, metadataIpfsHash, }) - ) - // get real admin in the case of mainnet fork - admin = await ethers.getImpersonatedSigner(await vault.admin()) - - validatorsData = await createEthValidatorsData(vault) - publicKeys = await createValidatorPublicKeys() - validatorsRegistryRoot = await validatorsRegistry.get_deposit_root() - await vault.connect(other).deposit(other.address, ZERO_ADDRESS, { value: validatorDeposit }) - await vaultV1.connect(other).deposit(other.address, ZERO_ADDRESS, { value: validatorDeposit }) - - vaultNotDeposited = await fixture.createEthVault( - admin, - { - capacity, - feePercent, - metadataIpfsHash, - }, - true, // own mev escrow - true // skip fork - ) - await vaultNotDeposited - .connect(other) - .deposit(other.address, ZERO_ADDRESS, { value: ethers.parseEther('31') }) - - await depositDataRegistry - .connect(admin) - .setDepositDataRoot(await vault.getAddress(), validatorsData.root) - - await vaultV1.connect(adminV1).setValidatorsRoot(validatorsData.root) - await depositDataRegistry - .connect(admin) - .setDepositDataRoot(await vaultNotDeposited.getAddress(), validatorsData.root) - }) - - describe('check validators manager signature', () => { - // I need explicit privateKey to create EIP-712 signature - const validatorsManager = new Wallet( - '0x798ce32ec683f3287dab0594b9ead26403a6da9c1d216d00e5aa088c9cf36864' - ) - const fakeValidatorsManager = new Wallet( - '0xb4942e4f87ddfd23ddf833a47ebcf6bb37e0da344a2d6e229fd593c0b22bdb68' - ) - - beforeEach('set validators manager', async () => { - await vault.connect(admin).setValidatorsManager(validatorsManager.address) + vaultV1 = await deployEthVaultV1( + await getEthVaultV1Factory(), + adminV1, + keeper, + vaultsRegistry, + validatorsRegistry, + fixture.osTokenVaultController, + fixture.osTokenConfig, + fixture.sharedMevEscrow, + encodeEthVaultInitParams({ + capacity, + feePercent, + metadataIpfsHash, + }) + ) + // get real admin in the case of mainnet fork + admin = await ethers.getImpersonatedSigner(await vault.admin()) + + validatorsData = await createEthValidatorsData(vault) + publicKeys = await createValidatorPublicKeys() + validatorsRegistryRoot = await validatorsRegistry.get_deposit_root() + await vault.connect(other).deposit(other.address, ZERO_ADDRESS, { value: validatorDeposit }) + await vaultV1.connect(other).deposit(other.address, ZERO_ADDRESS, { value: validatorDeposit }) + + vaultNotDeposited = await fixture.createEthVault( + admin, + { + capacity, + feePercent, + metadataIpfsHash, + }, + true, // own mev escrow + true // skip fork + ) + // Remember about security deposit 1 gwei, so vault balance is not zero at this point. + let validatorDepositIncomplete = ethers.parseEther('31') + if (network == 'GNOSIS') { + validatorDepositIncomplete = ethers.parseEther('0.9') + } + await vaultNotDeposited + .connect(other) + .deposit(other.address, ZERO_ADDRESS, { value: validatorDepositIncomplete }) + + await depositDataRegistry + .connect(admin) + .setDepositDataRoot(await vault.getAddress(), validatorsData.root) + + await vaultV1.connect(adminV1).setValidatorsRoot(validatorsData.root) + await depositDataRegistry + .connect(admin) + .setDepositDataRoot(await vaultNotDeposited.getAddress(), validatorsData.root) }) - it('fails for invalid validators registry root', async () => { - const fakeRoot = Buffer.alloc(32).fill(1) - await expect( - ethValidatorsChecker - .connect(admin) - .checkValidatorsManagerSignature(await vault.getAddress(), fakeRoot, '0x', '0x') - ).to.be.revertedWithCustomError(ethValidatorsChecker, 'InvalidValidatorsRegistryRoot') - }) + describe('check validators manager signature', () => { + // I need explicit privateKey to create EIP-712 signature + const validatorsManager = new Wallet( + '0x798ce32ec683f3287dab0594b9ead26403a6da9c1d216d00e5aa088c9cf36864' + ) + const fakeValidatorsManager = new Wallet( + '0xb4942e4f87ddfd23ddf833a47ebcf6bb37e0da344a2d6e229fd593c0b22bdb68' + ) - it('fails for non-vault', async () => { - await expect( - ethValidatorsChecker - .connect(admin) - .checkValidatorsManagerSignature(other.address, validatorsRegistryRoot, '0x', '0x') - ).to.be.revertedWithCustomError(ethValidatorsChecker, 'InvalidVault') - }) + beforeEach('set validators manager', async () => { + await vault.connect(admin).setValidatorsManager(validatorsManager.address) + }) - it('fails for vault v1', async () => { - await expect( - ethValidatorsChecker - .connect(admin) - .checkValidatorsManagerSignature( - await vaultV1.getAddress(), - validatorsRegistryRoot, - '0x', - '0x' - ) - ).to.be.revertedWithCustomError(ethValidatorsChecker, 'InvalidVault') - }) + it('fails for invalid validators registry root', async () => { + const fakeRoot = Buffer.alloc(32).fill(1) + await expect( + validatorsChecker + .connect(admin) + .checkValidatorsManagerSignature(await vault.getAddress(), fakeRoot, '0x', '0x') + ).to.be.revertedWithCustomError(validatorsChecker, 'InvalidValidatorsRegistryRoot') + }) - it('fails for vault not collateralized not deposited', async () => { - await expect( - ethValidatorsChecker - .connect(admin) - .checkValidatorsManagerSignature( - await vaultNotDeposited.getAddress(), - validatorsRegistryRoot, - '0x', - '0x' - ) - ).to.be.revertedWithCustomError(ethValidatorsChecker, 'InsufficientAssets') - }) + it('fails for non-vault', async () => { + await expect( + validatorsChecker + .connect(admin) + .checkValidatorsManagerSignature(other.address, validatorsRegistryRoot, '0x', '0x') + ).to.be.revertedWithCustomError(validatorsChecker, 'InvalidVault') + }) - it('fails for signer who is not validators manager', async () => { - const vaultAddress = await vault.getAddress() - const typedData = await getEthValidatorsCheckerSigningData( - keccak256(Buffer.concat(publicKeys)), - ethValidatorsChecker, - vault, - validatorsRegistryRoot - ) - const signature = signTypedData({ - privateKey: Buffer.from(ethers.getBytes(fakeValidatorsManager.privateKey)), - data: typedData, - version: SignTypedDataVersion.V4, + it('fails for vault v1', async () => { + await expect( + validatorsChecker + .connect(admin) + .checkValidatorsManagerSignature( + await vaultV1.getAddress(), + validatorsRegistryRoot, + '0x', + '0x' + ) + ).to.be.revertedWithCustomError(validatorsChecker, 'InvalidVault') }) - await expect( - ethValidatorsChecker - .connect(admin) - .checkValidatorsManagerSignature( - vaultAddress, - validatorsRegistryRoot, - Buffer.concat(publicKeys), - ethers.getBytes(signature) - ) - ).to.be.revertedWithCustomError(ethValidatorsChecker, 'AccessDenied') - }) - it('succeeds', async () => { - const vaultAddress = await vault.getAddress() - const typedData = await getEthValidatorsCheckerSigningData( - Buffer.concat(publicKeys), - ethValidatorsChecker, - vault, - validatorsRegistryRoot - ) - const signature = signTypedData({ - privateKey: Buffer.from(ethers.getBytes(validatorsManager.privateKey)), - data: typedData, - version: SignTypedDataVersion.V4, + it('fails for vault not collateralized not deposited', async () => { + await expect( + validatorsChecker + .connect(admin) + .checkValidatorsManagerSignature( + await vaultNotDeposited.getAddress(), + validatorsRegistryRoot, + '0x', + '0x' + ) + ).to.be.revertedWithCustomError(validatorsChecker, 'InsufficientAssets') + }) + + it('fails for signer who is not validators manager', async () => { + const vaultAddress = await vault.getAddress() + const typedData = await getValidatorsCheckerSigningData( + validatorsCheckerTypeName, + keccak256(Buffer.concat(publicKeys)), + validatorsChecker, + vault, + validatorsRegistryRoot + ) + const signature = signTypedData({ + privateKey: Buffer.from(ethers.getBytes(fakeValidatorsManager.privateKey)), + data: typedData, + version: SignTypedDataVersion.V4, + }) + await expect( + validatorsChecker + .connect(admin) + .checkValidatorsManagerSignature( + vaultAddress, + validatorsRegistryRoot, + Buffer.concat(publicKeys), + ethers.getBytes(signature) + ) + ).to.be.revertedWithCustomError(validatorsChecker, 'AccessDenied') + }) + + it('succeeds', async () => { + const vaultAddress = await vault.getAddress() + const typedData = await getValidatorsCheckerSigningData( + validatorsCheckerTypeName, + Buffer.concat(publicKeys), + validatorsChecker, + vault, + validatorsRegistryRoot + ) + const signature = signTypedData({ + privateKey: Buffer.from(ethers.getBytes(validatorsManager.privateKey)), + data: typedData, + version: SignTypedDataVersion.V4, + }) + const blockNumber = await ethers.provider.getBlockNumber() + + expect( + await validatorsChecker + .connect(admin) + .checkValidatorsManagerSignature( + vaultAddress, + validatorsRegistryRoot, + Buffer.concat(publicKeys), + ethers.getBytes(signature) + ) + ).to.eq(blockNumber) }) - const blockNumber = await ethers.provider.getBlockNumber() - - expect( - await ethValidatorsChecker - .connect(admin) - .checkValidatorsManagerSignature( - vaultAddress, - validatorsRegistryRoot, - Buffer.concat(publicKeys), - ethers.getBytes(signature) - ) - ).to.eq(blockNumber) }) - }) - describe('check deposit data root', () => { - let proof: string[], proofFlags: boolean[], proofIndexes: number[], validators: Buffer[] + describe('check deposit data root', () => { + let proof: string[], proofFlags: boolean[], proofIndexes: number[], validators: Buffer[] - beforeEach('set multiproof', () => { - // Proof is empty list when passing all validators - // I need non-empty proof for some test cases - // Slice validators because of that + beforeEach('set multiproof', () => { + // Proof is empty list when passing all validators + // I need non-empty proof for some test cases + // Slice validators because of that - const numValidators = 5 - validators = validatorsData.validators.slice(0, numValidators) + const numValidators = 5 + validators = validatorsData.validators.slice(0, numValidators) - const multiProof = getValidatorsMultiProof(validatorsData.tree, validators, [ - ...Array(validators.length).keys(), - ]) - const sortedVals = multiProof.leaves.map((v) => v[0]) + const multiProof = getValidatorsMultiProof(validatorsData.tree, validators, [ + ...Array(validators.length).keys(), + ]) + const sortedVals = multiProof.leaves.map((v) => v[0]) - ;(proof = multiProof.proof), - (proofFlags = multiProof.proofFlags), - (proofIndexes = validators.map((v) => sortedVals.indexOf(v))) - }) + ;(proof = multiProof.proof), + (proofFlags = multiProof.proofFlags), + (proofIndexes = validators.map((v) => sortedVals.indexOf(v))) + }) - it('fails for invalid validators registry root', async () => { - const fakeRoot = Buffer.alloc(32).fill(1) - - await expect( - ethValidatorsChecker - .connect(admin) - .checkDepositDataRoot( - await vault.getAddress(), - fakeRoot, - Buffer.concat(validators), - proof, - proofFlags, - proofIndexes - ) - ).to.be.revertedWithCustomError(ethValidatorsChecker, 'InvalidValidatorsRegistryRoot') - }) + it('fails for invalid validators registry root', async () => { + const fakeRoot = Buffer.alloc(32).fill(1) + + await expect( + validatorsChecker + .connect(admin) + .checkDepositDataRoot( + await vault.getAddress(), + fakeRoot, + Buffer.concat(validators), + proof, + proofFlags, + proofIndexes + ) + ).to.be.revertedWithCustomError(validatorsChecker, 'InvalidValidatorsRegistryRoot') + }) - it('fails for non-vault', async () => { - await expect( - ethValidatorsChecker - .connect(admin) - .checkDepositDataRoot( - other.address, - validatorsRegistryRoot, - Buffer.concat(validators), - proof, - proofFlags, - proofIndexes - ) - ).to.be.revertedWithCustomError(ethValidatorsChecker, 'InvalidVault') - }) + it('fails for non-vault', async () => { + await expect( + validatorsChecker + .connect(admin) + .checkDepositDataRoot( + other.address, + validatorsRegistryRoot, + Buffer.concat(validators), + proof, + proofFlags, + proofIndexes + ) + ).to.be.revertedWithCustomError(validatorsChecker, 'InvalidVault') + }) - it('fails for vault not collateralized not deposited', async () => { - await expect( - ethValidatorsChecker - .connect(admin) - .checkDepositDataRoot( - await vaultNotDeposited.getAddress(), - validatorsRegistryRoot, - Buffer.concat(validators), - proof, - proofFlags, - proofIndexes - ) - ).to.be.revertedWithCustomError(ethValidatorsChecker, 'InsufficientAssets') - }) + it('fails for vault not collateralized not deposited', async () => { + await expect( + validatorsChecker + .connect(admin) + .checkDepositDataRoot( + await vaultNotDeposited.getAddress(), + validatorsRegistryRoot, + Buffer.concat(validators), + proof, + proofFlags, + proofIndexes + ) + ).to.be.revertedWithCustomError(validatorsChecker, 'InsufficientAssets') + }) - it('fails for validators manager not equal to deposit data registry', async () => { - await vault.connect(admin).setValidatorsManager(other.address) - - await expect( - ethValidatorsChecker - .connect(admin) - .checkDepositDataRoot( - await vault.getAddress(), - validatorsRegistryRoot, - Buffer.concat(validators), - proof, - proofFlags, - proofIndexes - ) - ).to.be.revertedWithCustomError(ethValidatorsChecker, 'AccessDenied') - }) + it('fails for validators manager not equal to deposit data registry', async () => { + await vault.connect(admin).setValidatorsManager(other.address) + + await expect( + validatorsChecker + .connect(admin) + .checkDepositDataRoot( + await vault.getAddress(), + validatorsRegistryRoot, + Buffer.concat(validators), + proof, + proofFlags, + proofIndexes + ) + ).to.be.revertedWithCustomError(validatorsChecker, 'AccessDenied') + }) - it('fails for invalid proof', async () => { - proof[0] = '0x' + '1'.repeat(64) - - await expect( - ethValidatorsChecker - .connect(admin) - .checkDepositDataRoot( - await vault.getAddress(), - validatorsRegistryRoot, - Buffer.concat(validators), - proof, - proofFlags, - proofIndexes - ) - ).to.be.revertedWithCustomError(ethValidatorsChecker, 'InvalidProof') - }) + it('fails for invalid proof', async () => { + proof[0] = '0x' + '1'.repeat(64) + + await expect( + validatorsChecker + .connect(admin) + .checkDepositDataRoot( + await vault.getAddress(), + validatorsRegistryRoot, + Buffer.concat(validators), + proof, + proofFlags, + proofIndexes + ) + ).to.be.revertedWithCustomError(validatorsChecker, 'InvalidProof') + }) - it('succeeds for vault v1', async () => { - const blockNumber = await ethers.provider.getBlockNumber() - - expect( - await ethValidatorsChecker - .connect(admin) - .checkDepositDataRoot( - await vaultV1.getAddress(), - validatorsRegistryRoot, - Buffer.concat(validators), - proof, - proofFlags, - proofIndexes - ) - ).to.eq(blockNumber) - }) + it('succeeds for vault v1', async () => { + const blockNumber = await ethers.provider.getBlockNumber() + + expect( + await validatorsChecker + .connect(admin) + .checkDepositDataRoot( + await vaultV1.getAddress(), + validatorsRegistryRoot, + Buffer.concat(validators), + proof, + proofFlags, + proofIndexes + ) + ).to.eq(blockNumber) + }) - it('succeeds for vault v2', async () => { - const blockNumber = await ethers.provider.getBlockNumber() - - expect( - await ethValidatorsChecker - .connect(admin) - .checkDepositDataRoot( - await vault.getAddress(), - validatorsRegistryRoot, - Buffer.concat(validators), - proof, - proofFlags, - proofIndexes - ) - ).to.eq(blockNumber) + it('succeeds for vault v2', async () => { + const blockNumber = await ethers.provider.getBlockNumber() + + expect( + await validatorsChecker + .connect(admin) + .checkDepositDataRoot( + await vault.getAddress(), + validatorsRegistryRoot, + Buffer.concat(validators), + proof, + proofFlags, + proofIndexes + ) + ).to.eq(blockNumber) + }) }) }) }) diff --git a/test/shared/constants.ts b/test/shared/constants.ts index 007eae5c..3377e42c 100644 --- a/test/shared/constants.ts +++ b/test/shared/constants.ts @@ -89,7 +89,7 @@ export const KeeperUpdateExitSignaturesSig = [ { name: 'deadline', type: 'uint256' }, ] -export const EthValidatorsCheckerSig = [ +export const ValidatorsCheckerSig = [ { name: 'validatorsRegistryRoot', type: 'bytes32' }, { name: 'vault', type: 'address' }, { name: 'validators', type: 'bytes' }, diff --git a/test/shared/fixtures.ts b/test/shared/fixtures.ts index 7f3cefc4..ad98bbb3 100644 --- a/test/shared/fixtures.ts +++ b/test/shared/fixtures.ts @@ -55,6 +55,8 @@ import { DepositDataRegistry__factory, EthValidatorsChecker, EthValidatorsChecker__factory, + GnoValidatorsChecker, + GnoValidatorsChecker__factory, } from '../../typechain-types' import { getEthValidatorsRegistryFactory, getOsTokenConfigV1Factory } from './contracts' import { @@ -276,6 +278,23 @@ export const createEthValidatorsChecker = async function ( return EthValidatorsChecker__factory.connect(await contract.getAddress(), signer) } +export const createGnoValidatorsChecker = async function ( + validatorsRegistry: Contract, + keeper: Keeper, + vaultsRegistry: VaultsRegistry, + depositDataRegistry: DepositDataRegistry +) { + const signer = await ethers.provider.getSigner() + const factory = await ethers.getContractFactory('GnoValidatorsChecker') + const contract = await factory.deploy( + await validatorsRegistry.getAddress(), + await keeper.getAddress(), + await vaultsRegistry.getAddress(), + await depositDataRegistry.getAddress() + ) + return GnoValidatorsChecker__factory.connect(await contract.getAddress(), signer) +} + export const createOsTokenVaultController = async function ( keeperAddress: string, registry: VaultsRegistry, @@ -604,6 +623,7 @@ interface EthVaultFixture { osTokenVaultController: OsTokenVaultController osTokenConfig: OsTokenConfig ethValidatorsChecker: EthValidatorsChecker + gnoValidatorsChecker: GnoValidatorsChecker createEthVault( admin: Signer, @@ -658,6 +678,8 @@ interface EthVaultFixture { ): Promise<[EthGenesisVault, LegacyRewardTokenMock, PoolEscrowMock]> } +export type { EthVaultFixture } + export const ethVaultFixture = async function (): Promise { const dao = await (ethers as any).provider.getSigner() const vaultsRegistry = await createVaultsRegistry() @@ -728,13 +750,19 @@ export const ethVaultFixture = async function (): Promise { // 7. deploy depositDataRegistry const depositDataRegistry = await createDepositDataRegistry(vaultsRegistry) - // 8. deploy ethValidatorsChecker + // 8. deploy ValidatorsCheckers for Ethereum and Gnosis const ethValidatorsChecker = await createEthValidatorsChecker( validatorsRegistry, keeper, vaultsRegistry, depositDataRegistry ) + const gnoValidatorsChecker = await createGnoValidatorsChecker( + validatorsRegistry, + keeper, + vaultsRegistry, + depositDataRegistry + ) // 9. deploy implementations and factories const factories = {} @@ -795,6 +823,7 @@ export const ethVaultFixture = async function (): Promise { osTokenConfig, osToken, ethValidatorsChecker, + gnoValidatorsChecker, createEthVault: async ( admin: Signer, vaultParams: EthVaultInitParamsStruct, diff --git a/test/shared/validators.ts b/test/shared/validators.ts index cf78cd74..28f45aaf 100644 --- a/test/shared/validators.ts +++ b/test/shared/validators.ts @@ -8,14 +8,14 @@ import { DepositDataRegistry, EthVault, Keeper, - DepositDataRegistry, EthValidatorsChecker, + GnoValidatorsChecker, } from '../../typechain-types' import { EIP712Domain, KeeperUpdateExitSignaturesSig, KeeperValidatorsSig, - EthValidatorsCheckerSig, + ValidatorsCheckerSig, VALIDATORS_DEADLINE, VALIDATORS_MIN_ORACLES, ZERO_BYTES32, @@ -301,20 +301,21 @@ export async function getEthValidatorsExitSignaturesSigningData( } } -export async function getEthValidatorsCheckerSigningData( +export async function getValidatorsCheckerSigningData( + validatorsCheckerTypeName: string, validators: Buffer, - ethValidatorsChecker: EthValidatorsChecker, + validatorsChecker: EthValidatorsChecker | GnoValidatorsChecker, vault: EthVaultType, validatorsRegistryRoot: BytesLike ) { return { - primaryType: 'EthValidatorsChecker', - types: { EIP712Domain, EthValidatorsChecker: EthValidatorsCheckerSig }, + primaryType: validatorsCheckerTypeName, + types: { EIP712Domain, [validatorsCheckerTypeName]: ValidatorsCheckerSig }, domain: { - name: 'EthValidatorsChecker', + name: validatorsCheckerTypeName, version: '1', chainId: network.config.chainId, - verifyingContract: await ethValidatorsChecker.getAddress(), + verifyingContract: await validatorsChecker.getAddress(), }, message: { validatorsRegistryRoot,