From a830c4265f21b890478763ed62088a36e56b0dce Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Wed, 5 Jul 2023 12:53:17 +0700 Subject: [PATCH] fix: validate gossip attestation perf test --- .../perf/chain/validation/attestation.test.ts | 68 +++++++++++-------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/packages/beacon-node/test/perf/chain/validation/attestation.test.ts b/packages/beacon-node/test/perf/chain/validation/attestation.test.ts index 835d963176b8..1425227d3bca 100644 --- a/packages/beacon-node/test/perf/chain/validation/attestation.test.ts +++ b/packages/beacon-node/test/perf/chain/validation/attestation.test.ts @@ -4,6 +4,7 @@ import {ssz} from "@lodestar/types"; import {validateAttestation, validateGossipAttestationsSameAttData} from "../../../../src/chain/validation/index.js"; import {generateTestCachedBeaconStateOnlyValidators} from "../../../../../state-transition/test/perf/util.js"; import {getAttestationValidData} from "../../../utils/validationData/attestation.js"; +import {getAttDataBase64FromAttestationSerialized} from "../../../../src/util/sszBytes.js"; describe("validate gossip attestation", () => { setBenchOpts({ @@ -14,7 +15,6 @@ describe("validate gossip attestation", () => { const stateSlot = 100; const state = generateTestCachedBeaconStateOnlyValidators({vc, slot: stateSlot}); - const chunkSize = 64; const { chain, attestation: attestation0, @@ -26,16 +26,6 @@ describe("validate gossip attestation", () => { // enable this in local environment to match production // blsVerifyAllMainThread: false, }); - const attestations = [attestation0]; - for (let i = 1; i < chunkSize; i++) { - const {attestation, subnet} = getAttestationValidData({ - currentSlot: stateSlot, - state, - bitIndex: i, - }); - expect(subnet).to.be.equal(subnet0); - attestations.push(attestation); - } const attSlot = attestation0.data.slot; const serializedData = ssz.phase0.Attestation.serialize(attestation0); @@ -44,24 +34,48 @@ describe("validate gossip attestation", () => { id: `validate gossip attestation - vc ${vc}`, beforeEach: () => chain.seenAttesters["validatorIndexesByEpoch"].clear(), fn: async () => { - await validateAttestation(chain, {attestation: null, serializedData, attSlot}, subnet0); + await validateAttestation( + chain, + { + attestation: null, + serializedData, + attSlot, + attDataBase64: getAttDataBase64FromAttestationSerialized(serializedData), + }, + subnet0 + ); }, }); - const attestationOrBytesArr = attestations.map((att) => { - return { - attestation: null, - serializedData: ssz.phase0.Attestation.serialize(att), - attSlot, - }; - }); + for (const chunkSize of [32, 64, 128, 256]) { + const attestations = [attestation0]; + for (let i = 1; i < chunkSize; i++) { + const {attestation, subnet} = getAttestationValidData({ + currentSlot: stateSlot, + state, + bitIndex: i, + }); + expect(subnet).to.be.equal(subnet0); + attestations.push(attestation); + } - itBench({ - id: `batch validate gossip attestation - vc ${vc} - chunk ${chunkSize}`, - beforeEach: () => chain.seenAttesters["validatorIndexesByEpoch"].clear(), - fn: async () => { - await validateGossipAttestationsSameAttData(chain, attestationOrBytesArr, subnet0); - }, - runsFactor: chunkSize, - }); + const attestationOrBytesArr = attestations.map((att) => { + const serializedData = ssz.phase0.Attestation.serialize(att); + return { + attestation: null, + serializedData, + attSlot, + attDataBase64: getAttDataBase64FromAttestationSerialized(serializedData) + }; + }); + + itBench({ + id: `batch validate gossip attestation - vc ${vc} - chunk ${chunkSize}`, + beforeEach: () => chain.seenAttesters["validatorIndexesByEpoch"].clear(), + fn: async () => { + await validateGossipAttestationsSameAttData(chain, attestationOrBytesArr, subnet0); + }, + runsFactor: chunkSize, + }); + } });