Skip to content
This repository was archived by the owner on Dec 10, 2020. It is now read-only.

Commit a163cae

Browse files
holgerd77ryanio
authored andcommitted
Config -> servers: horizontal integration
1 parent 02e420c commit a163cae

18 files changed

+53
-65
lines changed

bin/cli.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,13 @@ async function run() {
147147
return new Server({ config, ...t.options })
148148
})
149149
const dataDir = `${args.datadir}/${networkDirName}ethereumjs/${syncDirName}`
150+
config.servers = servers
150151

151152
fs.ensureDirSync(dataDir)
152153
logger.info(`Data directory: ${dataDir}`)
153154

154155
const options = {
155156
config,
156-
servers,
157157
db: level(dataDir),
158158
rpcport: args.rpcport,
159159
rpcaddr: args.rpcaddr,

lib/config.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Common from '@ethereumjs/common'
22
import { Logger } from 'winston'
33
import { defaultLogger } from './logging'
4+
import { Libp2pServer, RlpxServer } from './net/server'
45

56
export interface Options {
67
/**
@@ -11,31 +12,37 @@ export interface Options {
1112
common?: Common
1213
/**
1314
* The logger instance with the log level set (winston)
14-
*
15+
*
1516
* Default: Logger with loglevel 'debug'
1617
*/
1718
logger?: Logger
19+
/**
20+
* Transport servers (RLPx or Libp2p)
21+
*
22+
* Default: []
23+
*/
24+
servers?: (RlpxServer | Libp2pServer)[]
1825
/**
1926
* Synchronization mode ('fast' or 'light')
20-
*
27+
*
2128
* Default: 'fast'
2229
*/
2330
syncmode?: string
2431
/**
2532
* Serve light peer requests
26-
*
33+
*
2734
* Default: false
2835
*/
2936
lightserv?: boolean
3037
/**
3138
* Number of peers needed before syncing
32-
*
39+
*
3340
* Default: 2
3441
*/
3542
minPeers?: number
3643
/**
3744
* Maximum peers allowed
38-
*
45+
*
3946
* Default: 25
4047
*/
4148
maxPeers?: number
@@ -44,19 +51,20 @@ export interface Options {
4451
export class Config {
4552
public common: Common
4653
public logger: Logger
54+
public servers: (RlpxServer | Libp2pServer)[]
4755
public syncmode: string
4856
public lightserv: boolean
4957
public minPeers: number
5058
public maxPeers: number
5159

5260
public static readonly COMMON_DEFAULT = new Common({ chain: 'mainnet', hardfork: 'chainstart' })
5361
public static readonly LOGGER_DEFAULT = defaultLogger
62+
public static readonly SERVERS_DEFAULT = []
5463
public static readonly SYNCMODE_DEFAULT = 'fast'
5564
public static readonly LIGHTSERV_DEFAULT = false
5665
public static readonly MINPEERS_DEFAULT = 2
5766
public static readonly MAXPEERS_DEFAULT = 25
5867

59-
6068
constructor(options: Options = {}) {
6169
// Initialize Common with an explicit 'chainstart' HF set until
6270
// hardfork awareness is implemented within the library
@@ -65,6 +73,7 @@ export class Config {
6573
// TODO: map chainParams (and lib/util.parseParams) to new Common format
6674
this.common = options.common ? options.common : Config.COMMON_DEFAULT
6775
this.logger = options.logger ? options.logger : Config.LOGGER_DEFAULT
76+
this.servers = options.servers ? options.servers : Config.SERVERS_DEFAULT
6877
this.syncmode = options.syncmode ? options.syncmode : Config.SYNCMODE_DEFAULT
6978
this.lightserv = options.lightserv ? options.lightserv : Config.LIGHTSERV_DEFAULT
7079
this.minPeers = options.minPeers ? options.minPeers : Config.MINPEERS_DEFAULT

lib/net/peerpool.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ import { EventEmitter } from 'events'
22
import { Config } from '../config'
33
import { Peer } from './peer/peer'
44

5-
const defaultOptions = {
6-
servers: [],
7-
}
8-
95
/**
106
* @module net
117
*/
@@ -25,7 +21,6 @@ const defaultOptions = {
2521
export class PeerPool extends EventEmitter {
2622
public config: Config
2723

28-
private servers: any[]
2924
private pool: Map<string, Peer>
3025
private noPeerPeriods: number
3126
private opened: boolean
@@ -34,16 +29,12 @@ export class PeerPool extends EventEmitter {
3429
/**
3530
* Create new peer pool
3631
* @param {Object} options constructor parameters
37-
* @param {Server[]} options.servers servers to aggregate peers from
3832
*/
3933
constructor(options: any) {
4034
super()
4135

4236
this.config = options.config
4337

44-
options = { ...defaultOptions, ...options }
45-
46-
this.servers = options.servers
4738
this.pool = new Map<string, Peer>()
4839
this.noPeerPeriods = 0
4940
this.opened = false
@@ -64,7 +55,7 @@ export class PeerPool extends EventEmitter {
6455
if (this.opened) {
6556
return false
6657
}
67-
this.servers.map((server: any) => {
58+
this.config.servers.map((server) => {
6859
server.on('connected', (peer: Peer) => {
6960
this.connected(peer)
7061
})
@@ -205,7 +196,7 @@ export class PeerPool extends EventEmitter {
205196
if (this.size === 0) {
206197
this.noPeerPeriods += 1
207198
if (this.noPeerPeriods >= 3) {
208-
const promises = this.servers.map(async (server: any) => {
199+
const promises = this.config.servers.map(async (server: any) => {
209200
if (server.bootstrap) {
210201
this.config.logger.info('Retriggering bootstrap.')
211202
await server.bootstrap()

lib/node.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { Config } from './config'
1010
export default class Node extends events.EventEmitter {
1111
public config: Config
1212

13-
public servers: any
1413
public services: any
1514

1615
public opened: boolean
@@ -21,10 +20,6 @@ export default class Node extends events.EventEmitter {
2120
* @param {Object} options constructor parameters
2221
* @param {Config} [options.config] Client configuration
2322
* @param {LevelDB} [options.db=null] blockchain database
24-
<<<<<<< HEAD
25-
=======
26-
* @param {Server[]} [options.servers=[]] list of servers to use
27-
>>>>>>> Added default members to Config, use defaults for CLI, lightserv -> horizontal integration
2823
* @param {Object[]} [options.bootnodes] list of bootnodes to use for discovery
2924
* @param {string[]} [options.clientFilter] list of supported clients
3025
* @param {number} [options.refreshInterval] how often to discover new peers
@@ -57,7 +52,7 @@ export default class Node extends events.EventEmitter {
5752
if (this.opened) {
5853
return false
5954
}
60-
this.servers.map((s: any) => {
55+
this.config.servers.map((s) => {
6156
s.on('error', (error: Error) => {
6257
this.emit('error', error)
6358
})
@@ -85,7 +80,7 @@ export default class Node extends events.EventEmitter {
8580
if (this.started) {
8681
return false
8782
}
88-
await Promise.all(this.servers.map((s: any) => s.start()))
83+
await Promise.all(this.config.servers.map((s) => s.start()))
8984
await Promise.all(this.services.map((s: any) => s.start()))
9085
this.started = true
9186
}
@@ -99,7 +94,7 @@ export default class Node extends events.EventEmitter {
9994
return false
10095
}
10196
await Promise.all(this.services.map((s: any) => s.stop()))
102-
await Promise.all(this.servers.map((s: any) => s.stop()))
97+
await Promise.all(this.config.servers.map((s) => s.stop()))
10398
this.started = false
10499
}
105100

@@ -118,6 +113,6 @@ export default class Node extends events.EventEmitter {
118113
* @return {Server}
119114
*/
120115
server(name: string) {
121-
return this.servers.find((s: any) => s.name === name)
116+
return this.config.servers.find((s) => s.name === name)
122117
}
123-
}
118+
}

lib/service/ethereumservice.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ export class EthereumService extends Service {
3434
* Create new ETH service
3535
* @param {Object} options constructor parameters
3636
* @param {Config} [options.config] Client configuration
37-
* @param {Server[]} options.servers servers to run service on
3837
* @param {Chain} [options.chain] blockchain
3938
* @param {LevelDB} [options.db=null] blockchain database
4039
* @param {number} [options.timeout] protocol timeout

lib/service/fastethereumservice.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@ import { BoundProtocol } from '../net/protocol'
1010
* @memberof module:service
1111
*/
1212
export class FastEthereumService extends EthereumService {
13-
1413
/**
1514
* Create new ETH service
1615
* @param {Object} options constructor parameters
1716
* @param {Config} [options.config] Client configuration
18-
* @param {Server[]} options.servers servers to run service on
1917
* @param {Chain} [options.chain] blockchain
2018
* @param {number} [options.interval] sync retry interval
2119
*/

lib/service/lightethereumservice.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ export class LightEthereumService extends EthereumService {
1212
* Create new ETH service
1313
* @param {Object} options constructor parameters
1414
* @param {Config} [options.config] Client configuration
15-
* @param {Server[]} options.servers servers to run service on
1615
* @param {Chain} [options.chain] blockchain
1716
* @param {number} [options.interval] sync retry interval
1817
*/

lib/service/service.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@ import { PeerPool } from '../net/peerpool'
33
import { Peer } from '../net/peer/peer'
44
import { Config } from '../config'
55

6-
const defaultOptions = {
7-
servers: [],
8-
}
9-
106
/**
117
* Base class for all services
128
* @memberof module:service
@@ -16,27 +12,22 @@ export class Service extends events.EventEmitter {
1612

1713
public opened: boolean
1814
public running: boolean
19-
public servers: any
2015
public pool: any
2116

2217
/**
2318
* Create new service and associated peer pool
2419
* @param {Object} options constructor parameters
2520
* @param {Config} [options.config] Client configuration
26-
* @param {Server[]} [options.servers=[]] servers to run service on
2721
*/
2822
constructor(options?: any) {
2923
super()
3024

3125
this.config = options.config
3226

33-
options = { ...defaultOptions, ...options }
3427
this.opened = false
3528
this.running = false
36-
this.servers = options.servers
3729
this.pool = new PeerPool({
3830
config: this.config,
39-
servers: this.servers,
4031
})
4132
this.pool.on('message', async (message: any, protocol: string, peer: Peer) => {
4233
if (this.running) {
@@ -78,7 +69,7 @@ export class Service extends events.EventEmitter {
7869
return false
7970
}
8071
const protocols = this.protocols
81-
this.servers.map((s: any) => s.addProtocols(protocols))
72+
this.config.servers.map((s) => s.addProtocols(protocols))
8273
if (this.pool) {
8374
this.pool.on('banned', (peer: Peer) => this.config.logger.debug(`Peer banned: ${peer}`))
8475
this.pool.on('error', (error: Error) => this.emit('error', error))
@@ -109,7 +100,7 @@ export class Service extends events.EventEmitter {
109100
if (this.running) {
110101
return false
111102
}
112-
await Promise.all(this.servers.map((s: any) => s.start()))
103+
await Promise.all(this.config.servers.map((s) => s.start()))
113104
this.running = true
114105
this.config.logger.info(`Started ${this.name} service.`)
115106
}

test/integration/fastethereumservice.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ tape('[Integration:FastEthereumService]', async (t) => {
1212
const server = new MockServer()
1313
const chain = new MockChain()
1414
const service = new FastEthereumService({
15-
config: new Config({ lightserv: true }),
16-
servers: [server],
15+
//@ts-ignore
16+
config: new Config({ servers: [server], lightserv: true }),
1717
chain,
1818
})
1919
await service.open()

test/integration/fastsync.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ tape('[Integration:FastSync]', async (t) => {
1515
const server = new MockServer({ location: options.location })
1616
const chain = new MockChain({ height: options.height })
1717
const service = new FastEthereumService({
18-
config: new Config({ minPeers: 1 }),
19-
servers: [server],
18+
//@ts-ignore allow Config instantiation with MockServer
19+
config: new Config({ servers: [server], minPeers: 1 }),
2020
interval: options.interval || 10,
2121
timeout: 500,
2222
chain,

0 commit comments

Comments
 (0)