diff --git a/packages/portalnetwork/src/networks/beacon/types.ts b/packages/portalnetwork/src/networks/beacon/types.ts index 8c30008d8..c0227a1e2 100644 --- a/packages/portalnetwork/src/networks/beacon/types.ts +++ b/packages/portalnetwork/src/networks/beacon/types.ts @@ -76,8 +76,3 @@ export type HistoricalSummaries = Array<{ blockSummaryRoot: Uint8Array stateSummaryRoot: Uint8Array }> - -export type EphemeralHeaderKeyValues = { - blockHash: Uint8Array - ancestorCount: number -} diff --git a/packages/portalnetwork/src/networks/history/history.ts b/packages/portalnetwork/src/networks/history/history.ts index d21fd1db1..788c16074 100644 --- a/packages/portalnetwork/src/networks/history/history.ts +++ b/packages/portalnetwork/src/networks/history/history.ts @@ -313,6 +313,8 @@ export class HistoryNetwork extends BaseNetwork { beacon.lightClient?.status === RunStatusCode.uninitialized || beacon.lightClient?.status === RunStatusCode.stopped ) { + // TODO: Decide whether to keep this or not. It's not technically correct according to the spec + // since you can track the HEAD of the chan however you want. const errorMessage = 'Cannot verify ephemeral headers when beacon network is not running' this.logger.extend('FINDCONTENT')(errorMessage) throw new Error(errorMessage) @@ -450,6 +452,9 @@ export class HistoryNetwork extends BaseNetwork { } } } + this.logger.extend('FOUNDCONTENT')( + `found ${headersList.length} ancestor headers for ${bytesToHex(contentKey.keyOpt.blockHash)}`, + ) value = EphemeralHeaderPayload.serialize(headersList) } } else { diff --git a/packages/portalnetwork/src/networks/history/types.ts b/packages/portalnetwork/src/networks/history/types.ts index e5f7ae080..e9851adce 100644 --- a/packages/portalnetwork/src/networks/history/types.ts +++ b/packages/portalnetwork/src/networks/history/types.ts @@ -225,3 +225,8 @@ export const EphemeralHeaderPayload = new ListCompositeType( BlockHeader, MAX_EPHEMERAL_HEADERS_PAYLOAD, ) + +export type EphemeralHeaderKeyValues = { + blockHash: Uint8Array + ancestorCount: number +} diff --git a/packages/portalnetwork/src/networks/history/util.ts b/packages/portalnetwork/src/networks/history/util.ts index b2266264c..0396888a4 100644 --- a/packages/portalnetwork/src/networks/history/util.ts +++ b/packages/portalnetwork/src/networks/history/util.ts @@ -41,7 +41,7 @@ import type { WithdrawalBytes } from '@ethereumjs/util' import type { ForkConfig } from '@lodestar/config' import type { HistoryNetwork } from './history.js' import type { BlockBodyContent, Witnesses } from './types.js' -import type { EphemeralHeaderKeyValues } from '../beacon/types.js' +import type { EphemeralHeaderKeyValues } from '../history/types.js' export const BlockHeaderByNumberKey = (blockNumber: bigint) => { return Uint8Array.from([ diff --git a/packages/portalnetwork/test/networks/history/ephemeralHeader.spec.ts b/packages/portalnetwork/test/networks/history/ephemeralHeader.spec.ts index b90d9b545..4a014dd83 100644 --- a/packages/portalnetwork/test/networks/history/ephemeralHeader.spec.ts +++ b/packages/portalnetwork/test/networks/history/ephemeralHeader.spec.ts @@ -1,6 +1,6 @@ import type { BlockHeader, JsonRpcBlock } from '@ethereumjs/block' import { Block } from '@ethereumjs/block' -import { hexToBytes } from '@ethereumjs/util' +import { bytesToHex, hexToBytes } from '@ethereumjs/util' import { assert, beforeAll, describe, it } from 'vitest' import { EphemeralHeaderPayload, @@ -35,7 +35,10 @@ describe('ephemeral header handling', () => { await network!.store(contentKey, headerPayload) const storedHeaderPayload = await network?.get(getEphemeralHeaderDbKey(headers[0].hash())) assert.deepEqual(hexToBytes(storedHeaderPayload!), headers[0].serialize()) - assert.deepEqual(network!.ephemeralHeaderIndex.getByKey(headers[1].number), headers[1].hash()) + assert.deepEqual( + network!.ephemeralHeaderIndex.getByKey(headers[1].number), + bytesToHex(headers[1].hash()), + ) }) it('should produce the correct HISTORY_RADIUS ping payload', async () => { const node = await PortalNetwork.create({})