Skip to content

Commit

Permalink
fix: tests after changing ReportData
Browse files Browse the repository at this point in the history
  • Loading branch information
Amuhar committed Jan 19, 2025
1 parent b0b402c commit 96962ec
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 69 deletions.
2 changes: 2 additions & 0 deletions contracts/0.8.9/oracle/ValidatorsExitBus.sol
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ contract ValidatorsExitBus is AccessControlEnumerable {
uint256 blockNumber;
/// @dev Key index in exit request array
uint256 lastDeliveredKeyIndex;

// TODO: timestamp
}
// TODO: make type optimization
struct RequestStatus {
Expand Down
4 changes: 4 additions & 0 deletions contracts/0.8.9/oracle/ValidatorsExitBusOracle.sol
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,10 @@ contract ValidatorsExitBusOracle is BaseOracle, PausableUntil, ValidatorsExitBus
}

function _storeOracleExitRequestHash(bytes32 exitRequestHash, ReportData calldata report, uint256 contractVersion) internal {
if (report.exitRequestData.requestsCount == 0) {
return;
}

mapping(bytes32 => RequestStatus) storage hashes = _storageExitRequestsHashes();

RequestStatus storage request = hashes[exitRequestHash];
Expand Down
45 changes: 27 additions & 18 deletions test/0.8.9/oracle/validator-exit-bus-oracle.accessControl.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ethers } from "hardhat";

import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";

import { HashConsensus__Harness, ValidatorsExitBus__Harness } from "typechain-types";
import { HashConsensus__Harness, ValidatorsExitBus__Harness, WithdrawalVault__MockForVebo } from "typechain-types";

import { CONSENSUS_VERSION, de0x, numberToHex } from "lib";

Expand All @@ -22,12 +22,12 @@ describe("ValidatorsExitBusOracle.sol:accessControl", () => {
let oracle: ValidatorsExitBus__Harness;
let admin: HardhatEthersSigner;
let originalState: string;
let withdrawalVault: WithdrawalVault__MockForVebo;

let initTx: ContractTransactionResponse;
let oracleVersion: bigint;
let exitRequests: ExitRequest[];
let reportFields: ReportFields;
let reportItems: ReturnType<typeof getValidatorsExitBusReportDataItems>;
let reportHash: string;

let member1: HardhatEthersSigner;
Expand All @@ -42,24 +42,31 @@ describe("ValidatorsExitBusOracle.sol:accessControl", () => {
valIndex: number;
valPubkey: string;
}
interface ExitRequestData {
requestsCount: number;
dataFormat: number;
data: string;
}

interface ReportFields {
consensusVersion: bigint;
refSlot: bigint;
requestsCount: number;
dataFormat: number;
data: string;
exitRequestData: ExitRequestData;
}

const calcValidatorsExitBusReportDataHash = (items: ReturnType<typeof getValidatorsExitBusReportDataItems>) => {
const data = ethers.AbiCoder.defaultAbiCoder().encode(["(uint256,uint256,uint256,uint256,bytes)"], [items]);
const calcValidatorsExitBusReportDataHash = (items: ReportFields) => {
const exitRequestItems = [
items.exitRequestData.requestsCount,
items.exitRequestData.dataFormat,
items.exitRequestData.data,
];
const exitRequestData = ethers.AbiCoder.defaultAbiCoder().encode(["(uint256,uint256,bytes)"], [exitRequestItems]);
const dataHash = ethers.keccak256(exitRequestData);
const oracleReportItems = [items.consensusVersion, items.refSlot, dataHash];
const data = ethers.AbiCoder.defaultAbiCoder().encode(["(uint256,uint256,bytes32)"], [oracleReportItems]);
return ethers.keccak256(data);
};

const getValidatorsExitBusReportDataItems = (r: ReportFields) => {
return [r.consensusVersion, r.refSlot, r.requestsCount, r.dataFormat, r.data];
};

const encodeExitRequestHex = ({ moduleId, nodeOpId, valIndex, valPubkey }: ExitRequest) => {
const pubkeyHex = de0x(valPubkey);
expect(pubkeyHex.length).to.equal(48 * 2);
Expand All @@ -74,8 +81,9 @@ describe("ValidatorsExitBusOracle.sol:accessControl", () => {
const deployed = await deployVEBO(admin.address);
oracle = deployed.oracle;
consensus = deployed.consensus;
withdrawalVault = deployed.withdrawalVault;

initTx = await initVEBO({ admin: admin.address, oracle, consensus, resumeAfterDeploy: true });
initTx = await initVEBO({ admin: admin.address, oracle, consensus, withdrawalVault, resumeAfterDeploy: true });

oracleVersion = await oracle.getContractVersion();

Expand All @@ -92,14 +100,16 @@ describe("ValidatorsExitBusOracle.sol:accessControl", () => {

reportFields = {
consensusVersion: CONSENSUS_VERSION,
dataFormat: DATA_FORMAT_LIST,
refSlot: refSlot,
requestsCount: exitRequests.length,
data: encodeExitRequestsDataList(exitRequests),
exitRequestData: {
dataFormat: DATA_FORMAT_LIST,
requestsCount: exitRequests.length,
data: encodeExitRequestsDataList(exitRequests),
},
};

reportItems = getValidatorsExitBusReportDataItems(reportFields);
reportHash = calcValidatorsExitBusReportDataHash(reportItems);
// reportItems = getValidatorsExitBusReportDataItems(reportFields);
reportHash = calcValidatorsExitBusReportDataHash(reportFields);

await consensus.connect(member1).submitReport(refSlot, reportHash, CONSENSUS_VERSION);
await consensus.connect(member3).submitReport(refSlot, reportHash, CONSENSUS_VERSION);
Expand All @@ -123,7 +133,6 @@ describe("ValidatorsExitBusOracle.sol:accessControl", () => {
expect(oracleVersion).to.be.not.null;
expect(exitRequests).to.be.not.null;
expect(reportFields).to.be.not.null;
expect(reportItems).to.be.not.null;
expect(reportHash).to.be.not.null;
});
});
Expand Down
10 changes: 9 additions & 1 deletion test/0.8.9/oracle/validator-exit-bus-oracle.deploy.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@ import { ethers } from "hardhat";

import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";

import { HashConsensus__Harness, ValidatorsExitBus__Harness, ValidatorsExitBusOracle } from "typechain-types";
import {
HashConsensus__Harness,
ValidatorsExitBus__Harness,
ValidatorsExitBusOracle,
WithdrawalVault__MockForVebo,
} from "typechain-types";

import { CONSENSUS_VERSION, SECONDS_PER_SLOT } from "lib";

Expand Down Expand Up @@ -38,12 +43,15 @@ describe("ValidatorsExitBusOracle.sol:deploy", () => {
context("deployment and init finishes successfully (default setup)", async () => {
let consensus: HashConsensus__Harness;
let oracle: ValidatorsExitBus__Harness;
let withdrawalVault: WithdrawalVault__MockForVebo;

before(async () => {
const deployed = await deployVEBO(admin.address);
withdrawalVault = deployed.withdrawalVault;
await initVEBO({
admin: admin.address,
oracle: deployed.oracle,
withdrawalVault,
consensus: deployed.consensus,
});

Expand Down
42 changes: 26 additions & 16 deletions test/0.8.9/oracle/validator-exit-bus-oracle.gas.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ethers } from "hardhat";

import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";

import { HashConsensus__Harness, ValidatorsExitBus__Harness } from "typechain-types";
import { HashConsensus__Harness, ValidatorsExitBus__Harness, WithdrawalVault__MockForVebo } from "typechain-types";

import { trace } from "lib";
import { CONSENSUS_VERSION, de0x, numberToHex } from "lib";
Expand All @@ -31,6 +31,7 @@ describe("ValidatorsExitBusOracle.sol:gas", () => {
let consensus: HashConsensus__Harness;
let oracle: ValidatorsExitBus__Harness;
let admin: HardhatEthersSigner;
let withdrawalVault: WithdrawalVault__MockForVebo;

let oracleVersion: bigint;

Expand All @@ -49,24 +50,31 @@ describe("ValidatorsExitBusOracle.sol:gas", () => {
valIndex: number;
valPubkey: string;
}
interface ExitRequestData {
requestsCount: number;
dataFormat: number;
data: string;
}

interface ReportFields {
consensusVersion: bigint;
refSlot: bigint;
requestsCount: number;
dataFormat: number;
data: string;
exitRequestData: ExitRequestData;
}

const calcValidatorsExitBusReportDataHash = (items: ReturnType<typeof getValidatorsExitBusReportDataItems>) => {
const data = ethers.AbiCoder.defaultAbiCoder().encode(["(uint256,uint256,uint256,uint256,bytes)"], [items]);
const calcValidatorsExitBusReportDataHash = (items: ReportFields) => {
const exitRequestItems = [
items.exitRequestData.requestsCount,
items.exitRequestData.dataFormat,
items.exitRequestData.data,
];
const exitRequestData = ethers.AbiCoder.defaultAbiCoder().encode(["(uint256,uint256,bytes)"], [exitRequestItems]);
const dataHash = ethers.keccak256(exitRequestData);
const oracleReportItems = [items.consensusVersion, items.refSlot, dataHash];
const data = ethers.AbiCoder.defaultAbiCoder().encode(["(uint256,uint256,bytes32)"], [oracleReportItems]);
return ethers.keccak256(data);
};

const getValidatorsExitBusReportDataItems = (r: ReportFields) => {
return [r.consensusVersion, r.refSlot, r.requestsCount, r.dataFormat, r.data];
};

const encodeExitRequestHex = ({ moduleId, nodeOpId, valIndex, valPubkey }: ExitRequest) => {
const pubkeyHex = de0x(valPubkey);
expect(pubkeyHex.length).to.equal(48 * 2);
Expand All @@ -81,10 +89,12 @@ describe("ValidatorsExitBusOracle.sol:gas", () => {
const deployed = await deployVEBO(admin.address);
oracle = deployed.oracle;
consensus = deployed.consensus;
withdrawalVault = deployed.withdrawalVault;

await initVEBO({
admin: admin.address,
oracle,
withdrawalVault,
consensus,
resumeAfterDeploy: true,
});
Expand Down Expand Up @@ -142,7 +152,6 @@ describe("ValidatorsExitBusOracle.sol:gas", () => {
context(`Total requests: ${totalRequests}`, () => {
let exitRequests: { requests: ExitRequest[]; requestsPerModule: number; requestsPerNodeOp: number };
let reportFields: ReportFields;
let reportItems: ReturnType<typeof getValidatorsExitBusReportDataItems>;
let reportHash: string;
let originalState: string;

Expand Down Expand Up @@ -171,13 +180,14 @@ describe("ValidatorsExitBusOracle.sol:gas", () => {
reportFields = {
consensusVersion: CONSENSUS_VERSION,
refSlot: refSlot,
requestsCount: exitRequests.requests.length,
dataFormat: DATA_FORMAT_LIST,
data: encodeExitRequestsDataList(exitRequests.requests),
exitRequestData: {
requestsCount: exitRequests.requests.length,
dataFormat: DATA_FORMAT_LIST,
data: encodeExitRequestsDataList(exitRequests.requests),
},
};

reportItems = getValidatorsExitBusReportDataItems(reportFields);
reportHash = calcValidatorsExitBusReportDataHash(reportItems);
reportHash = calcValidatorsExitBusReportDataHash(reportFields);

await triggerConsensusOnHash(reportHash);
});
Expand Down
Loading

0 comments on commit 96962ec

Please sign in to comment.