@@ -8,7 +8,7 @@ import { EventEmitter } from 'eventemitter3'
88import packageJson from '../../package.json' with { type : 'json' }
99
1010import { HistoryNetwork } from '../networks/history/history.js'
11- import { BeaconNetwork , NetworkId , StateNetwork , SyncStrategy } from '../networks/index.js'
11+ import { NetworkId , type SubNetwork } from '../networks/index.js'
1212import { PortalNetworkUTP } from '../wire/utp/PortalNetworkUtp/index.js'
1313
1414import { DBManager } from './dbManager.js'
@@ -24,17 +24,20 @@ import type { IClientInfo } from '../wire/payloadExtensions.js'
2424import type { Version } from '../wire/types.js'
2525import { MessageCodes , PortalWireMessageType } from '../wire/types.js'
2626import { ENRCache } from './enrCache.js'
27- import type {
28- INodeAddress ,
29- PortalNetworkEvents ,
30- PortalNetworkMetrics ,
31- PortalNetworkOpts ,
27+ import {
28+ ChainId ,
29+ type INodeAddress ,
30+ type PortalNetworkEvents ,
31+ type PortalNetworkMetrics ,
32+ type PortalNetworkOpts ,
3233} from './types.js'
34+ import { createNetwork } from '../networks/constructor.js'
3335
3436export class PortalNetwork extends EventEmitter < PortalNetworkEvents > {
3537 clientInfo : IClientInfo
3638 eventLog : boolean
3739 discv5 : Discv5
40+ chainId : ChainId
3841 networks : Map < NetworkId , BaseNetwork >
3942 uTP : PortalNetworkUTP
4043 utpTimout : number
@@ -53,6 +56,7 @@ export class PortalNetwork extends EventEmitter<PortalNetworkEvents> {
5356 */
5457 constructor ( opts : PortalNetworkOpts ) {
5558 super ( )
59+ this . chainId = opts . chainId ?? ChainId . MAINNET
5660 this . clientInfo = {
5761 clientName : 'ultralight' ,
5862 clientVersionAndShortCommit : `${ packageJson . version } -${ opts . shortCommit ?? '' } ` ,
@@ -78,54 +82,21 @@ export class PortalNetwork extends EventEmitter<PortalNetworkEvents> {
7882 )
7983 opts . supportedNetworks = opts . supportedNetworks ?? [ ]
8084 for ( const network of opts . supportedNetworks ) {
81- switch ( network . networkId ) {
82- case NetworkId . HistoryNetwork :
83- this . networks . set (
84- network . networkId ,
85- new HistoryNetwork ( {
86- client : this ,
87- networkId : NetworkId . HistoryNetwork ,
88- maxStorage : network . maxStorage ,
89- db : network . db ,
90- gossipCount : opts . gossipCount ,
91- dbSize : async ( ) => opts . dbSize ( ( opts . dataDir ?? '.' ) + '/history' ) ,
92- } ) ,
93- )
94- break
95- case NetworkId . StateNetwork :
96- this . networks . set (
97- network . networkId ,
98- new StateNetwork ( {
99- client : this ,
100- networkId : NetworkId . StateNetwork ,
101- maxStorage : network . maxStorage ,
102- db : network . db ,
103- gossipCount : opts . gossipCount ,
104- dbSize : async ( ) => opts . dbSize ( ( opts . dataDir ?? '.' ) + '/state' ) ,
105- } ) ,
106- )
107- break
108- case NetworkId . BeaconChainNetwork :
109- {
110- const syncStrategy =
111- opts . trustedBlockRoot !== undefined
112- ? SyncStrategy . TrustedBlockRoot
113- : SyncStrategy . PollNetwork
114- this . networks . set (
115- network . networkId ,
116- new BeaconNetwork ( {
117- client : this ,
118- networkId : NetworkId . BeaconChainNetwork ,
119- maxStorage : network . maxStorage ,
120- trustedBlockRoot : opts . trustedBlockRoot ,
121- sync : syncStrategy ,
122- db : network . db ,
123- gossipCount : opts . gossipCount ,
124- dbSize : async ( ) => opts . dbSize ( ( opts . dataDir ?? '.' ) + '/beacon' ) ,
125- } ) ,
126- )
127- }
128- break
85+ try {
86+ const networkInstance = createNetwork ( network . networkId , {
87+ client : this ,
88+ maxStorage : network . maxStorage ,
89+ db : network . db ,
90+ gossipCount : opts . gossipCount ,
91+ dbSize : ( dir : string ) => opts . dbSize ( dir ) ,
92+ trustedBlockRoot : opts . trustedBlockRoot ? hexToBytes ( opts . trustedBlockRoot as `0x${string } `) : undefined ,
93+ dataDir : opts . dataDir ,
94+ } )
95+ this . networks . set ( network . networkId , networkInstance )
96+ } catch ( err : any ) {
97+ this . logger . extend ( 'error' ) (
98+ `Failed to initialize network ${ network . networkId } : ${ err . message } ` ,
99+ )
129100 }
130101 }
131102 for ( const network of this . networks . values ( ) ) {
@@ -216,25 +187,12 @@ export class PortalNetwork extends EventEmitter<PortalNetworkEvents> {
216187 }
217188 }
218189
219- public network = ( ) : {
220- [ NetworkId . HistoryNetwork ] : HistoryNetwork | undefined
221- [ NetworkId . StateNetwork ] : StateNetwork | undefined
222- [ NetworkId . BeaconChainNetwork ] : BeaconNetwork | undefined
223- } => {
224- const history = this . networks . get ( NetworkId . HistoryNetwork )
225- ? ( this . networks . get ( NetworkId . HistoryNetwork ) as HistoryNetwork )
226- : undefined
227- const state = this . networks . get ( NetworkId . StateNetwork )
228- ? ( this . networks . get ( NetworkId . StateNetwork ) as StateNetwork )
229- : undefined
230- const beacon = this . networks . get ( NetworkId . BeaconChainNetwork )
231- ? ( this . networks . get ( NetworkId . BeaconChainNetwork ) as BeaconNetwork )
232- : undefined
233- return {
234- [ NetworkId . HistoryNetwork ] : history ,
235- [ NetworkId . StateNetwork ] : state ,
236- [ NetworkId . BeaconChainNetwork ] : beacon ,
190+ public network ( ) : Partial < Record < NetworkId , SubNetwork < NetworkId > | undefined > > {
191+ const networks : Partial < Record < NetworkId , SubNetwork < NetworkId > | undefined > > = { }
192+ for ( const [ networkId , network ] of this . networks . entries ( ) ) {
193+ networks [ networkId ] = network as SubNetwork < NetworkId >
237194 }
195+ return networks
238196 }
239197
240198 /**
0 commit comments