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

Commit 835dad0

Browse files
holgerd77ryanio
authored andcommitted
Config -> rpc, rpcport, rpcaddr integration, some CLI cleanup, fixed RPCManager instantiation
1 parent c689480 commit 835dad0

File tree

3 files changed

+66
-30
lines changed

3 files changed

+66
-30
lines changed

bin/cli.ts

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Node from '../lib/node'
77
import { Server as RPCServer } from 'jayson'
88
import { Config } from '../lib/config'
99
import Common from '@ethereumjs/common'
10-
const RPCManager = require('../lib/rpc')
10+
import { RPCManager } from '../lib/rpc'
1111
const level = require('level')
1212
const path = require('path')
1313
const fs = require('fs-extra')
@@ -18,7 +18,7 @@ const args = require('yargs')
1818
network: {
1919
describe: `Network`,
2020
choices: networks.map((n) => n[1]),
21-
default: networks[0][1],
21+
default: 'mainnet',
2222
},
2323
'network-id': {
2424
describe: `Network ID`,
@@ -47,12 +47,12 @@ const args = require('yargs')
4747
rpc: {
4848
describe: 'Enable the JSON-RPC server',
4949
boolean: true,
50-
default: false,
50+
default: Config.RPC_DEFAULT,
5151
},
5252
rpcport: {
5353
describe: 'HTTP-RPC server listening port',
5454
number: true,
55-
default: 8545,
55+
default: Config.RPCPORT_DEFAULT,
5656
},
5757
rpcaddr: {
5858
describe: 'HTTP-RPC server listening interface',
@@ -81,53 +81,72 @@ const args = require('yargs')
8181
.locale('en_EN').argv
8282
const logger = getLogger({ loglevel: args.loglevel })
8383

84-
async function runNode(options: any) {
84+
/**
85+
* Initializes and starts a Node and reacts on the
86+
* main node lifecycle events
87+
*
88+
* @param config
89+
*/
90+
async function runNode(config: Config) {
91+
const syncDataDir = config.getSyncDataDirectory()
92+
fs.ensureDirSync(syncDataDir)
93+
logger.info(`Sync data directory: ${syncDataDir}`)
94+
8595
logger.info('Initializing Ethereumjs client...')
86-
if (options.config.lightserv) {
96+
if (config.lightserv) {
8797
logger.info(`Serving light peer requests`)
8898
}
89-
const node = new Node(options)
99+
const node = new Node({
100+
config,
101+
db: level(syncDataDir),
102+
})
90103
node.on('error', (err: any) => logger.error(err))
91104
node.on('listening', (details: any) => {
92105
logger.info(`Listener up transport=${details.transport} url=${details.url}`)
93106
})
94107
node.on('synchronized', () => {
95108
logger.info('Synchronized')
96109
})
97-
logger.info(`Connecting to network: ${options.config.common.chainName()}`)
110+
logger.info(`Connecting to network: ${config.common.chainName()}`)
98111
await node.open()
99112
logger.info('Synchronizing blockchain...')
100113
await node.start()
101114

102115
return node
103116
}
104117

105-
function runRpcServer(node: any, options: any) {
106-
const { rpcport, rpcaddr } = options
107-
const manager = new RPCManager(node, options)
118+
function runRpcServer(node: Node, config: Config) {
119+
const { rpcport, rpcaddr } = config
120+
const manager = new RPCManager(node, config)
108121
const server = new RPCServer(manager.getMethods())
109122
logger.info(`RPC HTTP endpoint opened: http://${rpcaddr}:${rpcport}`)
110123
server.http().listen(rpcport)
111124

112125
return server
113126
}
114127

128+
/**
129+
* Main entry point to start a client
130+
*/
115131
async function run() {
116132
// give network id precedence over network name
133+
let chain: string | number
117134
if (args.networkId) {
118-
const network = networks.find((n) => n[0] === `${args.networkId}`)
119-
if (network) {
120-
args.network = network[1]
121-
}
135+
chain = args.networkId
136+
} else {
137+
chain = args.network
122138
}
123139

124-
const common = new Common({ chain: args.network, hardfork: 'chainstart' })
140+
const common = new Common({ chain, hardfork: 'chainstart' })
125141
const config = new Config({
126142
common,
127143
logger,
128144
syncmode: args.syncmode,
129145
lightserv: args.lightserv,
130146
transports: args.transports,
147+
rpc: args.rpc,
148+
rpcport: args.rpcport,
149+
rpcaddr: args.rpcaddr,
131150
minPeers: args.minPeers,
132151
maxPeers: args.maxPeers,
133152
})
@@ -136,18 +155,8 @@ async function run() {
136155
// eslint-disable-next-line @typescript-eslint/no-unused-vars
137156
const chainParams = args.params ? await parseParams(args.params) : args.network
138157

139-
const syncDataDir = config.getSyncDataDirectory()
140-
fs.ensureDirSync(syncDataDir)
141-
logger.info(`Sync data directory: ${syncDataDir}`)
142-
143-
const options = {
144-
config,
145-
db: level(syncDataDir),
146-
rpcport: args.rpcport,
147-
rpcaddr: args.rpcaddr,
148-
}
149-
const node = await runNode(options)
150-
const server = args.rpc ? runRpcServer(node, options) : null
158+
const node = await runNode(config)
159+
const server = config.rpc ? runRpcServer(node, config) : null
151160

152161
process.on('SIGINT', async () => {
153162
logger.info('Caught interrupt signal. Shutting down...')

lib/config.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,22 @@ export interface Options {
4747
* Default: servers created from `transports` option
4848
*/
4949
servers?: (RlpxServer | Libp2pServer)[]
50+
/**
51+
* Enable the JSON-RPC server
52+
*
53+
* Default: false
54+
*/
55+
rpc?: boolean
56+
/**
57+
* HTTP-RPC server listening port
58+
*
59+
* Default: 8545
60+
*/
61+
rpcport?: number
62+
/**
63+
* HTTP-RPC server listening interface
64+
*/
65+
rpcaddr?: string
5066
/**
5167
* Number of peers needed before syncing
5268
*
@@ -71,6 +87,9 @@ export class Config {
7187
public static readonly LIGHTSERV_DEFAULT = false
7288
public static readonly DATADIR_DEFAULT = `${os.homedir()}/Library/Ethereum`
7389
public static readonly TRANSPORTS_DEFAULT = ['rlpx:port=30303', 'libp2p']
90+
public static readonly RPC_DEFAULT = false
91+
public static readonly RPCPORT_DEFAULT = 8545
92+
public static readonly RPCADDR_DEFAULT = 'localhost'
7493
public static readonly MINPEERS_DEFAULT = 2
7594
public static readonly MAXPEERS_DEFAULT = 25
7695

@@ -80,6 +99,9 @@ export class Config {
8099
public readonly lightserv: boolean
81100
public readonly datadir: string
82101
public readonly transports: string[]
102+
public readonly rpc: boolean
103+
public readonly rpcport: number
104+
public readonly rpcaddr: string
83105
public readonly minPeers: number
84106
public readonly maxPeers: number
85107

@@ -93,6 +115,9 @@ export class Config {
93115
this.lightserv = options.lightserv ?? Config.LIGHTSERV_DEFAULT
94116
this.transports = options.transports ?? Config.TRANSPORTS_DEFAULT
95117
this.datadir = options.datadir ?? Config.DATADIR_DEFAULT
118+
this.rpc = options.rpc ?? Config.RPC_DEFAULT
119+
this.rpcport = options.rpcport ?? Config.RPCPORT_DEFAULT
120+
this.rpcaddr = options.rpcaddr ?? Config.RPCADDR_DEFAULT
96121
this.minPeers = options.minPeers ?? Config.MINPEERS_DEFAULT
97122
this.maxPeers = options.maxPeers ?? Config.MAXPEERS_DEFAULT
98123

lib/rpc/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { Config } from '../config'
2+
import Node from '../node'
13
import * as modules from './modules'
24

35
/**
@@ -19,11 +21,11 @@ function getMethodNames(mod: any): string[] {
1921
* @memberof module:rpc
2022
*/
2123
export class RPCManager {
22-
private _config: any
24+
private _config: Config
2325
private _node: any
2426
private _logger: any
2527

26-
constructor(node: any, config: any) {
28+
constructor(node: Node, config: Config) {
2729
this._config = config
2830
this._node = node
2931
this._logger = config.logger

0 commit comments

Comments
 (0)