Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions packages/portalnetwork/src/networks/beacon/beacon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ import type { AcceptMessage, FindContentMessage, OfferMessage, Version } from '.
import type { ContentLookupResponse } from '../types.js'
import type { BeaconChainNetworkConfig, HistoricalSummaries, LightClientForkName } from './types.js'

export class BeaconNetwork extends BaseNetwork {
export class LegacyBeaconNetwork extends BaseNetwork {
networkId: NetworkId
beaconConfig: BeaconConfig
networkName = 'BeaconNetwork'
networkName = 'LegacyBeaconNetwork'
logger: Debugger
lightClient: Lightclient | undefined
bootstrapFinder: Map<NodeId, string[] | {}>
Expand All @@ -87,7 +87,7 @@ export class BeaconNetwork extends BaseNetwork {
const genesisRoot = hexToBytes(genesisData.mainnet.genesisValidatorsRoot as PrefixedHexString)
this.beaconConfig = createBeaconConfig(defaultChainConfig, genesisRoot)
this.networkId = NetworkIdByChain[client.chainId].BeaconChainNetwork
this.logger = debug(this.enr.nodeId.slice(0, 5)).extend('Portal').extend('BeaconNetwork')
this.logger = debug(this.enr.nodeId.slice(0, 5)).extend('Portal').extend('LegacyBeaconNetwork')
this.routingTable.setLogger(this.logger)
this.forkDigest = Uint8Array.from([0, 0, 0, 0])
this.portal.on(`${this.networkId}:ContentAdded`, async (contentKey: Uint8Array) => {
Expand Down Expand Up @@ -874,7 +874,7 @@ export class BeaconNetwork extends BaseNetwork {
}
} else {
for (const key of requestedKeys) {
let value = Uint8Array.from([])
let value: Uint8Array = Uint8Array.from([])
try {
// We use `findContentLocally` instead of `get` so the content keys for
// optimistic and finality updates are handled correctly
Expand Down
30 changes: 15 additions & 15 deletions packages/portalnetwork/src/networks/constructor.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type { AbstractLevel } from 'abstract-level'
import type { NetworkId } from './types.js'
import { HistoryNetwork } from './history/index.js'
import { StateNetwork } from './state/index.js'
import { BeaconNetwork, SyncStrategy } from './beacon/index.js'
import { LegacyHistoryNetwork } from './history/index.js'
import { LegacyStateNetwork } from './state/index.js'
import { LegacyBeaconNetwork, SyncStrategy } from './beacon/index.js'
import type { PortalNetwork } from '../client/client.js'
import { bytesToHex } from '@ethereumjs/util'

Expand All @@ -26,11 +26,11 @@ function parseNetworkId(networkId: NetworkId): { chain: string; type: string } {
const chainCode = id.slice(0, 2)

const typeMap: Record<string, string> = {
'0a': 'StateNetwork',
'0b': 'HistoryNetwork',
'0c': 'BeaconChainNetwork',
'0d': 'CanonicalTxIndexNetwork',
'0e': 'VerkleStateNetwork'
'0a': 'LegacyStateNetwork',
'0b': 'LegacyHistoryNetwork',
'0c': 'LegacyBeaconChainNetwork',
'0d': 'LegacyCanonicalTxIndexNetwork',
'0e': 'LegacyVerkleStateNetwork'
}

const chainMap: Record<string, string> = {
Expand All @@ -45,7 +45,7 @@ function parseNetworkId(networkId: NetworkId): { chain: string; type: string } {
}
}

export function createNetwork(networkId: NetworkId, config: NetworkConfig): HistoryNetwork | StateNetwork | BeaconNetwork {
export function createNetwork(networkId: NetworkId, config: NetworkConfig): LegacyHistoryNetwork | LegacyStateNetwork | LegacyBeaconNetwork {
const { chain, type } = parseNetworkId(networkId)
const baseConfig = {
client: config.client,
Expand All @@ -57,12 +57,12 @@ export function createNetwork(networkId: NetworkId, config: NetworkConfig): Hist
}

switch (type) {
case 'HistoryNetwork':
return new HistoryNetwork(baseConfig)
case 'StateNetwork':
return new StateNetwork(baseConfig)
case 'BeaconChainNetwork':
return new BeaconNetwork({
case 'LegacyHistoryNetwork':
return new LegacyHistoryNetwork(baseConfig)
case 'LegacyStateNetwork':
return new LegacyStateNetwork(baseConfig)
case 'LegacyBeaconChainNetwork':
return new LegacyBeaconNetwork({
...baseConfig,
trustedBlockRoot: config.trustedBlockRoot ? bytesToHex(config.trustedBlockRoot) : undefined,
sync: config.trustedBlockRoot ? SyncStrategy.TrustedBlockRoot : SyncStrategy.PollNetwork
Expand Down
60 changes: 30 additions & 30 deletions packages/portalnetwork/src/networks/history/history.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import debug from 'debug'

import type {
BaseNetworkConfig,
BeaconNetwork,
LegacyBeaconNetwork,
ContentLookupResponse,
EphemeralHeaderKeyValues,
FindContentMessage,
Expand Down Expand Up @@ -54,7 +54,7 @@ import {
EphemeralHeaderOfferPayload,
EphemeralHeaderPayload,
HistoricalRootsBlockProof,
HistoryNetworkContentType,
LegacyHistoryNetworkContentType,
MERGE_BLOCK,
SHANGHAI_BLOCK,
sszReceiptsListType,
Expand All @@ -73,9 +73,9 @@ import { RunStatusCode } from '@lodestar/light-client'
import type { LightClientHeader } from '@lodestar/types/lib/deneb/types.js'
import type { Debugger } from 'debug'

export class HistoryNetwork extends BaseNetwork {
export class LegacyHistoryNetwork extends BaseNetwork {
networkId: NetworkId
networkName = 'HistoryNetwork'
networkName = 'LegacyHistoryNetwork'
logger: Debugger
public ephemeralHeaderIndex: BiMap<bigint, string> // Map of block number to block hashes
public blockHashIndex: Map<string, string>
Expand All @@ -86,7 +86,7 @@ export class HistoryNetwork extends BaseNetwork {
PingPongPayloadExtensions.HISTORY_RADIUS_PAYLOAD,
]
this.networkId = NetworkIdByChain[client.chainId].HistoryNetwork
this.logger = debug(this.enr.nodeId.slice(0, 5)).extend('Portal').extend('HistoryNetwork')
this.logger = debug(this.enr.nodeId.slice(0, 5)).extend('Portal').extend('LegacyHistoryNetwork')
this.routingTable.setLogger(this.logger)
this.blockHashIndex = new Map()
this.ephemeralHeaderIndex = new BiMap()
Expand All @@ -111,13 +111,13 @@ export class HistoryNetwork extends BaseNetwork {
*/
public findContentLocally = async (contentKey: Uint8Array): Promise<Uint8Array | undefined> => {
const contentType = contentKey[0]
if (contentType === HistoryNetworkContentType.BlockHeaderByNumber) {
if (contentType === LegacyHistoryNetworkContentType.BlockHeaderByNumber) {
const blockNumber = decodeHistoryNetworkContentKey(contentKey).keyOpt
const blockHash = this.blockNumberToHash(<bigint>blockNumber)
if (blockHash === undefined) {
return undefined
}
const hashKey = getContentKey(HistoryNetworkContentType.BlockHeader, blockHash)
const hashKey = getContentKey(LegacyHistoryNetworkContentType.BlockHeader, blockHash)
const value = await this.retrieve(hashKey)
return value !== undefined ? hexToBytes(value as PrefixedHexString) : undefined
}
Expand Down Expand Up @@ -145,8 +145,8 @@ export class HistoryNetwork extends BaseNetwork {
): Promise<undefined | (Uint8Array | BlockHeader)> => {
const contentKey =
'blockHash' in opt
? getContentKey(HistoryNetworkContentType.BlockHeader, opt.blockHash)
: getContentKey(HistoryNetworkContentType.BlockHeaderByNumber, opt.blockNumber)
? getContentKey(LegacyHistoryNetworkContentType.BlockHeader, opt.blockHash)
: getContentKey(LegacyHistoryNetworkContentType.BlockHeaderByNumber, opt.blockNumber)
const value = await this.findContentLocally(contentKey)
if (value === undefined) return undefined
const header = BlockHeaderWithProof.deserialize(value).header
Expand All @@ -155,7 +155,7 @@ export class HistoryNetwork extends BaseNetwork {
}

public getBlockBodyBytes = async (blockHash: Uint8Array): Promise<Uint8Array | undefined> => {
const contentKey = getContentKey(HistoryNetworkContentType.BlockBody, blockHash)
const contentKey = getContentKey(LegacyHistoryNetworkContentType.BlockBody, blockHash)
const value = await this.retrieve(contentKey)
return value !== undefined ? hexToBytes(value as PrefixedHexString) : undefined
}
Expand Down Expand Up @@ -264,7 +264,7 @@ export class HistoryNetwork extends BaseNetwork {
this.logger(`invalid proof for block ${bytesToHex(header.hash())}`)
throw new Error(`invalid proof for block ${bytesToHex(header.hash())}`)
}
const beacon = this.portal.network()['0x500c'] as BeaconNetwork | undefined
const beacon = this.portal.network()['0x500c'] as LegacyBeaconNetwork | undefined
if (beacon !== undefined && beacon.lightClient?.status === RunStatusCode.started) {
try {
verifyHistoricalSummariesHeaderProof(
Expand Down Expand Up @@ -374,7 +374,7 @@ export class HistoryNetwork extends BaseNetwork {
}
case FoundContent.CONTENT:
this.logger.extend('FOUNDCONTENT')(
`received ${HistoryNetworkContentType[contentType]} content corresponding to ${contentKey}`,
`received ${LegacyHistoryNetworkContentType[contentType]} content corresponding to ${contentKey}`,
)
try {
await this.store(key, decoded.value as Uint8Array)
Expand Down Expand Up @@ -411,9 +411,9 @@ export class HistoryNetwork extends BaseNetwork {

const contentKey = decodeHistoryNetworkContentKey(decodedContentMessage.contentKey)
let value: Uint8Array | undefined
if (contentKey.contentType === HistoryNetworkContentType.EphemeralHeaderFindContent) {
if (contentKey.contentType === LegacyHistoryNetworkContentType.EphemeralHeaderFindContent) {
const ck = contentKey as {
contentType: HistoryNetworkContentType.EphemeralHeaderFindContent
contentType: LegacyHistoryNetworkContentType.EphemeralHeaderFindContent
keyOpt: EphemeralHeaderKeyValues
}
if (ck.keyOpt.ancestorCount < 0 || ck.keyOpt.ancestorCount > 255) {
Expand Down Expand Up @@ -542,7 +542,7 @@ export class HistoryNetwork extends BaseNetwork {
let keyOpt: Uint8Array | bigint = contentKey.slice(1)
this.logger.extend('STORE')(`Storing ${bytesToHex(contentKey)} (${value.length} bytes)`)
switch (contentType) {
case HistoryNetworkContentType.BlockHeader: {
case LegacyHistoryNetworkContentType.BlockHeader: {
try {
await this.validateHeader(value, { blockHash: bytesToHex(keyOpt) })
await this.put(contentKey, bytesToHex(value))
Expand All @@ -552,11 +552,11 @@ export class HistoryNetwork extends BaseNetwork {
}
break
}
case HistoryNetworkContentType.BlockBody: {
case LegacyHistoryNetworkContentType.BlockBody: {
await this.addBlockBody(value, keyOpt)
break
}
case HistoryNetworkContentType.Receipt: {
case LegacyHistoryNetworkContentType.Receipt: {
try {
sszReceiptsListType.deserialize(value)
await this.put(contentKey, bytesToHex(value))
Expand All @@ -566,12 +566,12 @@ export class HistoryNetwork extends BaseNetwork {
}
break
}
case HistoryNetworkContentType.BlockHeaderByNumber: {
case LegacyHistoryNetworkContentType.BlockHeaderByNumber: {
const { blockNumber } = BlockNumberKey.deserialize(keyOpt)
try {
const blockHash = await this.validateHeader(value, { blockNumber })
// Store block header using 0x00 key type
const hashKey = getContentKey(HistoryNetworkContentType.BlockHeader, blockHash)
const hashKey = getContentKey(LegacyHistoryNetworkContentType.BlockHeader, blockHash)
await this.put(hashKey, bytesToHex(value))
// Switch keyOpt to blockNumber for gossip purposes
keyOpt = blockNumber
Expand All @@ -581,7 +581,7 @@ export class HistoryNetwork extends BaseNetwork {
break
}

case HistoryNetworkContentType.EphemeralHeaderFindContent: {
case LegacyHistoryNetworkContentType.EphemeralHeaderFindContent: {
const payload = EphemeralHeaderPayload.deserialize(value)
if (payload.length === 0) {
this.logger.extend('STORE')('Received empty ephemeral header payload')
Expand Down Expand Up @@ -629,7 +629,7 @@ export class HistoryNetwork extends BaseNetwork {
return
}
}
case HistoryNetworkContentType.EphemeralHeaderOffer: {
case LegacyHistoryNetworkContentType.EphemeralHeaderOffer: {
const payload = EphemeralHeaderOfferPayload.deserialize(value)
const header = createBlockHeaderFromRLP(payload.header, { setHardfork: true })
// Check if we already have this header
Expand All @@ -649,24 +649,24 @@ export class HistoryNetwork extends BaseNetwork {
this.portal.emit(`${this.networkId}:ContentAdded`, contentKey, value)
if (this.routingTable.values().length > 0) {
if (
contentType !== HistoryNetworkContentType.EphemeralHeader &&
contentType !== HistoryNetworkContentType.EphemeralHeaderOffer &&
contentType !== HistoryNetworkContentType.EphemeralHeaderFindContent
contentType !== LegacyHistoryNetworkContentType.EphemeralHeader &&
contentType !== LegacyHistoryNetworkContentType.EphemeralHeaderOffer &&
contentType !== LegacyHistoryNetworkContentType.EphemeralHeaderFindContent
) {
// Gossip new content to network except for ephemeral headers
this.gossipManager.add(contentKey)
}
}
this.logger(
`${HistoryNetworkContentType[contentType]} added for ${keyOpt instanceof Uint8Array ? bytesToHex(keyOpt) : keyOpt
`${LegacyHistoryNetworkContentType[contentType]} added for ${keyOpt instanceof Uint8Array ? bytesToHex(keyOpt) : keyOpt
}`,
)
}

public async saveReceipts(block: Block) {
this.logger.extend('BLOCK_BODY')(`added for block #${block.header.number}`)
const receipts = await saveReceipts(block)
const contentKey = getContentKey(HistoryNetworkContentType.Receipt, block.hash())
const contentKey = getContentKey(LegacyHistoryNetworkContentType.Receipt, block.hash())
await this.store(contentKey, receipts)
return decodeReceipts(receipts)
}
Expand All @@ -689,7 +689,7 @@ export class HistoryNetwork extends BaseNetwork {
`Error: ${err?.message} while validating block body for ${shortId(bytesToHex(hashKey))}`,
)
}
const bodyContentKey = getContentKey(HistoryNetworkContentType.BlockBody, hashKey)
const bodyContentKey = getContentKey(LegacyHistoryNetworkContentType.BlockBody, hashKey)
if (block instanceof Block) {
await this.put(bodyContentKey, bytesToHex(bodyBytes))
this.portal.emit(`${this.networkId}:ContentAdded`, bodyContentKey, bodyBytes)
Expand Down Expand Up @@ -776,7 +776,7 @@ export class HistoryNetwork extends BaseNetwork {
const decodedContentKeys = msg.contentKeys.map((key) => decodeHistoryNetworkContentKey(key))
// Check to see if the first content key is for ephemeral headers. If so, we expect all
// content keys to be for ephemeral headers.
if (decodedContentKeys[0].contentType === HistoryNetworkContentType.EphemeralHeaderOffer) {
if (decodedContentKeys[0].contentType === LegacyHistoryNetworkContentType.EphemeralHeaderOffer) {
this.logger.extend('OFFER').extend('EPHEMERALHEADERS')(
'Received offer for ephemeral headers starting with block hash: ' +
bytesToHex(decodedContentKeys[0].keyOpt),
Expand All @@ -787,7 +787,7 @@ export class HistoryNetwork extends BaseNetwork {
let headHashIndex = -1
do {
for (const key of decodedContentKeys) {
if (key.contentType !== HistoryNetworkContentType.EphemeralHeaderOffer) {
if (key.contentType !== LegacyHistoryNetworkContentType.EphemeralHeaderOffer) {
this.logger.extend('ACCEPT').extend('EPHEMERALHEADERS')(
'Received non-ephemeral header in offer for ephemeral headers. Declining offer.',
)
Expand All @@ -796,7 +796,7 @@ export class HistoryNetwork extends BaseNetwork {
break
}
}
const beacon = this.portal.networks.get(NetworkIdByChain[this.portal.chainId].BeaconChainNetwork) as BeaconNetwork
const beacon = this.portal.networks.get(NetworkIdByChain[this.portal.chainId].BeaconChainNetwork) as LegacyBeaconNetwork
if (
beacon === undefined ||
(beacon.lightClient?.status !== RunStatusCode.started &&
Expand Down
6 changes: 3 additions & 3 deletions packages/portalnetwork/src/networks/state/state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,17 +53,17 @@ import {
stateNetworkContentIdFromBytes,
} from './util.js'

export class StateNetwork extends BaseNetwork {
export class LegacyStateNetwork extends BaseNetwork {
networkId: NetworkId
networkName = 'StateNetwork'
networkName = 'LegacyStateNetwork'
logger: Debugger
stateroots: Map<bigint, Uint8Array> = new Map()
manager: StateManager

constructor({ client, db, radius, maxStorage }: BaseNetworkConfig) {
super({ client, db, radius, maxStorage, networkId: NetworkIdByChain[client.chainId].StateNetwork })
this.networkId = NetworkIdByChain[client.chainId].StateNetwork
this.logger = debug(this.enr.nodeId.slice(0, 5)).extend('Portal').extend('StateNetwork')
this.logger = debug(this.enr.nodeId.slice(0, 5)).extend('Portal').extend('LegacyStateNetwork')
this.routingTable.setLogger(this.logger)
this.manager = new StateManager(this)
}
Expand Down
34 changes: 17 additions & 17 deletions packages/portalnetwork/src/networks/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import type { ENR, NodeId } from '@chainsafe/enr'
import type { PrefixedHexString } from '@ethereumjs/util'
import type { AbstractLevel } from 'abstract-level'
import type { ChainId, PortalNetwork } from '../client'
import type { BeaconNetwork } from './beacon'
import type { HistoryNetwork } from './history'
import type { StateNetwork } from './state'
import type { LegacyBeaconNetwork } from './beacon'
import type { LegacyHistoryNetwork } from './history'
import type { LegacyStateNetwork } from './state'

export interface BaseNetworkConfig {
client: PortalNetwork
Expand All @@ -24,12 +24,12 @@ const BYTE_SIZE = 256

// subnetwork IDs
export enum NetworkId {
// Mainnet
StateNetwork = '0x500a',
HistoryNetwork = '0x500b',
BeaconChainNetwork = '0x500c',
CanonicalTxIndexNetwork = '0x500d',
VerkleStateNetwork = '0x500e',
// Mainnet (Legacy)
LegacyStateNetwork = '0x500a',
LegacyHistoryNetwork = '0x500b',
LegacyBeaconChainNetwork = '0x500c',
LegacyCanonicalTxIndexNetwork = '0x500d',
LegacyVerkleStateNetwork = '0x500e',

// Angelfood
AngelFoodStateNetwork = '0x504a',
Expand All @@ -51,11 +51,11 @@ export enum NetworkId {
}

const MainnetId: Record<string, NetworkId> = {
StateNetwork: NetworkId.StateNetwork,
HistoryNetwork: NetworkId.HistoryNetwork,
BeaconChainNetwork: NetworkId.BeaconChainNetwork,
CanonicalTxIndexNetwork: NetworkId.CanonicalTxIndexNetwork,
VerkleStateNetwork: NetworkId.VerkleStateNetwork,
StateNetwork: NetworkId.LegacyStateNetwork,
HistoryNetwork: NetworkId.LegacyHistoryNetwork,
BeaconChainNetwork: NetworkId.LegacyBeaconChainNetwork,
CanonicalTxIndexNetwork: NetworkId.LegacyCanonicalTxIndexNetwork,
VerkleStateNetwork: NetworkId.LegacyVerkleStateNetwork,
}

const SepoliaId: Record<string, NetworkId> = {
Expand All @@ -81,11 +81,11 @@ export const NetworkIdByChain: Record<ChainId, Record<string, NetworkId>> = {
}

export type SubNetwork<T extends NetworkId> = T extends `0x${string}a`
? StateNetwork
? LegacyStateNetwork
: T extends `0x${string}b`
? HistoryNetwork
? LegacyHistoryNetwork
: T extends `0x${string}c`
? BeaconNetwork
? LegacyBeaconNetwork
: never

export class Bloom {
Expand Down
Loading