Skip to content

Commit

Permalink
feat: implement metrics for data columns
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewkeil committed Sep 19, 2024
1 parent 57dbb4c commit 5230b83
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 3 deletions.
2 changes: 2 additions & 0 deletions packages/beacon-node/src/api/impl/beacon/blocks/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ export function getBeaconBlockApi({
const fork = config.getForkName(signedBlock.message.slot);
let blockData: BlockInputData;
if (fork === ForkName.peerdas) {
const timer = chain.metrics?.peerDas.sidecarComputationTimeInSec.startTimer();
dataColumnSidecars = computeDataColumnSidecars(config, signedBlock, signedBlockOrContents);
timer?.();
blockData = {
fork,
dataColumnsLen: dataColumnSidecars.length,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ export async function verifyBlocksDataAvailability(
}

async function maybeValidateBlobs(
chain: {config: ChainForkConfig; genesisTime: UintNum64; logger: Logger},
chain: {config: ChainForkConfig; genesisTime: UintNum64; logger: Logger; metrics: Metrics | null},
blockInput: BlockInput,
opts: ImportBlockOpts
): Promise<{dataAvailabilityStatus: DataAvailabilityStatus; availableBlockInput: BlockInput}> {
Expand Down Expand Up @@ -119,7 +119,9 @@ async function maybeValidateBlobs(
const {dataColumns} = blockData;
const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
// might require numColumns, custodyColumns from blockData as input to below
const timer = chain.metrics?.peerDas.batchColumnVerificationTimeInSec.startTimer();
validateDataColumnsSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, dataColumns, {skipProofsCheck});
timer?.();
}

const availableBlockInput = getBlockInput.availableData(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,11 @@ export async function validateGossipDataColumnSidecar(
});
}

if (!validateInclusionProof(dataColumnSideCar)) {
const timer = chain.metrics?.peerDas.inclusionProofVerificationTimeInSec.startTimer();
const isValid = validateInclusionProof(dataColumnSideCar);
timer?.();

if (!isValid) {
throw new DataColumnSidecarGossipError(GossipAction.REJECT, {
code: DataColumnSidecarErrorCode.INCLUSION_PROOF_INVALID,
slot: dataColumnSideCar.signedBlockHeader.message.slot,
Expand Down
5 changes: 4 additions & 1 deletion packages/beacon-node/src/network/processor/gossipHandlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -282,12 +282,14 @@ function getDefaultHandlers(modules: ValidatorFnsModules, options: GossipHandler
);

try {
metrics?.gossipColumn.processRequestCount.inc();
await validateGossipDataColumnSidecar(chain, dataColumnSidecar, gossipIndex);
metrics?.gossipColumn.processSuccessCount.inc();
const recvToValidation = Date.now() / 1000 - seenTimestampSec;
const validationTime = recvToValidation - recvToValLatency;

metrics?.gossipBlob.recvToValidation.observe(recvToValidation);
metrics?.gossipBlob.validationTime.observe(validationTime);
metrics?.gossipColumn.verificationTimeInSec.observe(validationTime);

logger.debug("Received gossip dataColumn", {
slot: slot,
Expand Down Expand Up @@ -650,6 +652,7 @@ function getDefaultHandlers(modules: ValidatorFnsModules, options: GossipHandler

chain.emitter.emit(routes.events.EventType.attestation, signedAggregateAndProof.message.aggregate);
},

[GossipType.beacon_attestation]: async ({
gossipData,
topic,
Expand Down

0 comments on commit 5230b83

Please sign in to comment.