diff --git a/packages/codegen/src/templates/config-template.handlebars b/packages/codegen/src/templates/config-template.handlebars index 37ca714e..22973d33 100644 --- a/packages/codegen/src/templates/config-template.handlebars +++ b/packages/codegen/src/templates/config-template.handlebars @@ -25,13 +25,7 @@ # Flag to specify whether RPC endpoint supports block hash as block tag parameter rpcSupportsBlockHashParam = true - # Enable ETH JSON RPC server at /rpc - enableEthRPCServer = true - - # Max number of logs that can be returned in a single getLogs request (default: 10000) - ethGetLogsResultLimit = 10000 - - # Server GQL config + # GQL server config [server.gql] path = "/graphql" @@ -55,6 +49,14 @@ timeTravelMaxAge = 86400 # 1 day {{/if}} + # ETH RPC server config + [server.ethRPC] + enabled = true + path = "/rpc" + + # Max number of logs that can be returned in a single getLogs request (default: 10000) + getLogsResultLimit = 10000 + [metrics] host = "127.0.0.1" port = 9000 diff --git a/packages/util/src/config.ts b/packages/util/src/config.ts index 62b3b096..a7daedd8 100644 --- a/packages/util/src/config.ts +++ b/packages/util/src/config.ts @@ -227,6 +227,18 @@ export interface GQLConfig { logDir?: string; } +// ETH RPC server config +export interface EthRPCConfig { + // Enable ETH JSON RPC server + enabled: boolean; + + // Path to expose the RPC server at + path?: string; + + // Max number of logs that can be returned in a single getLogs request + getLogsResultLimit?: number; +} + export interface ServerConfig { host: string; port: number; @@ -253,11 +265,8 @@ export interface ServerConfig { // https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block rpcSupportsBlockHashParam: boolean; - // Enable ETH JSON RPC server at /rpc - enableEthRPCServer: boolean; - - // Max number of logs that can be returned in a single getLogs request - ethGetLogsResultLimit?: number; + // ETH JSON RPC server config + ethRPC: EthRPCConfig; } export interface FundingAmountsConfig { diff --git a/packages/util/src/eth-rpc-handlers.ts b/packages/util/src/eth-rpc-handlers.ts index df72a518..dc78ab05 100644 --- a/packages/util/src/eth-rpc-handlers.ts +++ b/packages/util/src/eth-rpc-handlers.ts @@ -153,7 +153,7 @@ export const createEthRPCHandlers = async ( // Fetch events from the db // Load block relation - const resultLimit = indexer.serverConfig.ethGetLogsResultLimit || DEFAULT_ETH_GET_LOGS_RESULT_LIMIT; + const resultLimit = indexer.serverConfig.ethRPC.getLogsResultLimit || DEFAULT_ETH_GET_LOGS_RESULT_LIMIT; const events = await indexer.getEvents({ where, relations: ['block'], take: resultLimit + 1 }); // Limit number of results can be returned by a single query diff --git a/packages/util/src/server.ts b/packages/util/src/server.ts index 491fd24d..df97f75d 100644 --- a/packages/util/src/server.ts +++ b/packages/util/src/server.ts @@ -24,7 +24,7 @@ import { PaymentsManager, paymentsPlugin } from './payments'; const log = debug('vulcanize:server'); const DEFAULT_GQL_PATH = '/graphql'; -const ETH_RPC_PATH = '/rpc'; +const DEFAULT_ETH_RPC_PATH = '/rpc'; export const createAndStartServer = async ( app: Application, @@ -102,13 +102,14 @@ export const createAndStartServer = async ( path: gqlPath }); - if (serverConfig.enableEthRPCServer) { + const rpcPath = serverConfig.ethRPC?.path ?? DEFAULT_ETH_RPC_PATH; + if (serverConfig.ethRPC?.enabled) { // Create a JSON-RPC server to handle ETH RPC calls const rpcServer = jayson.Server(ethRPCHandlers); // Mount the JSON-RPC server to ETH_RPC_PATH app.use( - ETH_RPC_PATH, + rpcPath, jsonParser(), (req: any, res: any, next: () => void) => { // Convert all GET requests to POST to avoid getting rejected from jayson server middleware @@ -124,8 +125,8 @@ export const createAndStartServer = async ( httpServer.listen(port, host, () => { log(`GQL server is listening on http://${host}:${port}${server.graphqlPath}`); - if (serverConfig.enableEthRPCServer) { - log(`ETH JSON RPC server is listening on http://${host}:${port}${ETH_RPC_PATH}`); + if (serverConfig.ethRPC?.enabled) { + log(`ETH JSON RPC server is listening on http://${host}:${port}${rpcPath}`); } });