diff --git a/packages/beacon-node/src/chain/options.ts b/packages/beacon-node/src/chain/options.ts index 93947f105c94..b487b6b43105 100644 --- a/packages/beacon-node/src/chain/options.ts +++ b/packages/beacon-node/src/chain/options.ts @@ -26,6 +26,7 @@ export type IChainOptions = BlockProcessOpts & /** Option to load a custom kzg trusted setup in txt format */ trustedSetup?: string; broadcastValidationStrictness?: string; + minSameMessageSignatureSetsToBatch: number; }; export type BlockProcessOpts = { @@ -83,4 +84,8 @@ export const defaultChainOptions: IChainOptions = { // for attestation validation, having this value ensures we don't have to regen states most of the time maxSkipSlots: 32, broadcastValidationStrictness: "warn", + // should be less than or equal to MIN_SIGNATURE_SETS_TO_BATCH_VERIFY + // batching too much may block the I/O thread + // this value is conservative, can decrease it if useWorker = true + minSameMessageSignatureSetsToBatch: 32, }; diff --git a/packages/beacon-node/src/chain/validation/attestation.ts b/packages/beacon-node/src/chain/validation/attestation.ts index 290391cf2fa4..94b985e835a2 100644 --- a/packages/beacon-node/src/chain/validation/attestation.ts +++ b/packages/beacon-node/src/chain/validation/attestation.ts @@ -116,7 +116,7 @@ export async function validateGossipAttestationsSameAttData( } let signatureValids: boolean[]; - const batchableBls = signatureSets.length >= MIN_SIGNATURE_SETS_TO_BATCH_VERIFY; + const batchableBls = signatureSets.length >= chain.opts.minSameMessageSignatureSetsToBatch; if (batchableBls) { // all signature sets should have same signing root since we filtered in network processor signatureValids = await chain.bls.verifySignatureSetsSameMessage( diff --git a/packages/beacon-node/src/network/processor/gossipQueues/index.ts b/packages/beacon-node/src/network/processor/gossipQueues/index.ts index a028981a630c..7dc7931d2639 100644 --- a/packages/beacon-node/src/network/processor/gossipQueues/index.ts +++ b/packages/beacon-node/src/network/processor/gossipQueues/index.ts @@ -23,7 +23,6 @@ const MAX_GOSSIP_ATTESTATION_BATCH_SIZE = 128; /** * Batching signatures have the cost of signature aggregation which blocks the main thread. * We should only batch verify when there are at least 32 signatures. - * TODO: make this configurable */ export const MIN_SIGNATURE_SETS_TO_BATCH_VERIFY = 32; diff --git a/packages/cli/src/options/beaconNodeOptions/chain.ts b/packages/cli/src/options/beaconNodeOptions/chain.ts index 9c7e1edc49c6..359b77740b00 100644 --- a/packages/cli/src/options/beaconNodeOptions/chain.ts +++ b/packages/cli/src/options/beaconNodeOptions/chain.ts @@ -23,6 +23,7 @@ export type ChainArgs = { "chain.archiveStateEpochFrequency": number; emitPayloadAttributes?: boolean; broadcastValidationStrictness?: string; + "chain.minSameMessageSignatureSetsToBatch"?: number; }; export function parseArgs(args: ChainArgs): IBeaconNodeOptions["chain"] { @@ -46,6 +47,8 @@ export function parseArgs(args: ChainArgs): IBeaconNodeOptions["chain"] { archiveStateEpochFrequency: args["chain.archiveStateEpochFrequency"], emitPayloadAttributes: args["emitPayloadAttributes"], broadcastValidationStrictness: args["broadcastValidationStrictness"], + minSameMessageSignatureSetsToBatch: + args["chain.minSameMessageSignatureSetsToBatch"] ?? defaultOptions.chain.minSameMessageSignatureSetsToBatch, }; } @@ -182,4 +185,12 @@ Will double processing times. Use only for debugging purposes.", type: "string", default: "warn", }, + + "chain.minSameMessageSignatureSetsToBatch": { + hidden: true, + description: "Minimum number of same message signature sets to batch", + type: "number", + default: defaultOptions.chain.minSameMessageSignatureSetsToBatch, + group: "chain", + }, }; diff --git a/packages/cli/test/unit/options/beaconNodeOptions.test.ts b/packages/cli/test/unit/options/beaconNodeOptions.test.ts index 31f11cf4a79d..94f5bf5a2e9a 100644 --- a/packages/cli/test/unit/options/beaconNodeOptions.test.ts +++ b/packages/cli/test/unit/options/beaconNodeOptions.test.ts @@ -33,6 +33,7 @@ describe("options / beaconNodeOptions", () => { "safe-slots-to-import-optimistically": 256, "chain.archiveStateEpochFrequency": 1024, "chain.trustedSetup": "", + "chain.minSameMessageSignatureSetsToBatch": 32, emitPayloadAttributes: false, eth1: true, @@ -131,6 +132,7 @@ describe("options / beaconNodeOptions", () => { archiveStateEpochFrequency: 1024, emitPayloadAttributes: false, trustedSetup: "", + minSameMessageSignatureSetsToBatch: 32, }, eth1: { enabled: true,