Skip to content

Commit 42e57dc

Browse files
committed
feat: added JSON network config
1 parent 2138387 commit 42e57dc

File tree

10 files changed

+76
-65
lines changed

10 files changed

+76
-65
lines changed

devnet-configs/devnet.example.json

Lines changed: 0 additions & 10 deletions
This file was deleted.

network-configs/network.example.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"contracts": {
3+
"withdrawalQueue": "0x0..",
4+
"lido": "0x0..",
5+
"oracleReportSanityChecker": "0x0..",
6+
"accountingOracleHashConsensus": "0x0..",
7+
"validatorsExitBusOracleHashConsensus": "0x0..",
8+
"lidoLocator": "0x0.."
9+
},
10+
"apis": {
11+
"keysApiBasePath": ""
12+
}
13+
}

src/common/config/config.service.ts

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,22 @@ import {
88
WithdrawalQueueContractModule,
99
} from '@lido-nestjs/contracts';
1010
import { EnvironmentVariables } from './env.validation';
11-
import { findDevnetConfig } from './utils/find-devnet-config';
11+
import { findNetworkConfig } from './networks/utils/find-network-config';
1212
import { KEYS_API_PATHS } from '../../jobs/validators/lido-keys/lido-keys.constants';
13+
import { Injectable } from '@nestjs/common';
14+
import { NetworkConfig } from './networks';
1315

16+
@Injectable()
1417
export class ConfigService extends ConfigServiceSource<EnvironmentVariables> {
18+
networkConfig: NetworkConfig;
19+
constructor(internalConfig?: Partial<EnvironmentVariables>) {
20+
super(internalConfig);
21+
22+
const name = this.get('CUSTOM_NETWORK_FILE_NAME');
23+
if (name) {
24+
this.networkConfig = findNetworkConfig(name);
25+
}
26+
}
1527
/**
1628
* List of env variables that should be hidden
1729
*/
@@ -30,31 +42,33 @@ export class ConfigService extends ConfigServiceSource<EnvironmentVariables> {
3042
}
3143

3244
public async getCustomConfigContractsAddressMap() {
33-
const name = this.get('DEVNET_NAME');
45+
const name = this.get('CUSTOM_NETWORK_FILE_NAME');
3446

3547
if (!name) {
3648
return null;
3749
}
3850

39-
const devnetConfig = await findDevnetConfig(name);
51+
if (!this.networkConfig) {
52+
return null;
53+
}
4054

41-
return new Map<symbol, string>([
42-
[WithdrawalQueueContractModule.contractToken, devnetConfig['WithdrawalQueue']],
55+
const contracts = this.networkConfig.contracts;
4356

44-
[LidoContractModule.contractToken, devnetConfig['Lido']],
45-
[OracleReportSanityCheckerModule.contractToken, devnetConfig['OracleReportSanityChecker']],
46-
[AccountingOracleHashConsensusModule.contractToken, devnetConfig['AccountingOracleHashConsensus']],
47-
[ValidatorsExitBusOracleHashConsensusModule.contractToken, devnetConfig['ValidatorsExitBusOracleHashConsensus']],
48-
[LidoLocatorContractModule.contractToken, devnetConfig['LidoLocator']],
57+
return new Map<symbol, string>([
58+
[WithdrawalQueueContractModule.contractToken, contracts.withdrawalQueue],
59+
[LidoContractModule.contractToken, contracts.lido],
60+
[OracleReportSanityCheckerModule.contractToken, contracts.oracleReportSanityChecker],
61+
[AccountingOracleHashConsensusModule.contractToken, contracts.accountingOracleHashConsensus],
62+
[ValidatorsExitBusOracleHashConsensusModule.contractToken, contracts.validatorsExitBusOracleHashConsensus],
63+
[LidoLocatorContractModule.contractToken, contracts.lidoLocator],
4964
]);
5065
}
5166

5267
public async getKeysApiBasePath(): Promise<string> {
53-
const name = this.get('DEVNET_NAME');
68+
const name = this.get('CUSTOM_NETWORK_FILE_NAME');
5469

5570
if (name) {
56-
const devnetConfig = await findDevnetConfig(name);
57-
const keysApiBasePath = devnetConfig['KeysApiBasePath'];
71+
const keysApiBasePath = this.networkConfig.apis.keysApiBasePath;
5872

5973
if (keysApiBasePath) {
6074
return keysApiBasePath;

src/common/config/devnets/devnet-config.interface.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/common/config/devnets/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/common/config/env.validation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ export class EnvironmentVariables {
113113

114114
@IsOptional()
115115
@IsString()
116-
DEVNET_NAME: string = null;
116+
CUSTOM_NETWORK_FILE_NAME: string;
117117
}
118118
export const ENV_KEYS = Object.keys(new EnvironmentVariables());
119119

src/common/config/networks/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './network-config.interface';
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export interface NetworkConfig {
2+
contracts: {
3+
withdrawalQueue: string;
4+
lido: string;
5+
oracleReportSanityChecker: string;
6+
accountingOracleHashConsensus: string;
7+
validatorsExitBusOracleHashConsensus: string;
8+
lidoLocator: string;
9+
};
10+
apis: {
11+
keysApiBasePath: string;
12+
};
13+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import * as fs from 'node:fs';
2+
import * as path from 'node:path';
3+
import { NetworkConfig } from '../index';
4+
5+
export function findNetworkConfig(name: string, directory = './network-configs'): NetworkConfig {
6+
const fileName = `${name}.json`;
7+
const filePath = path.join(directory, fileName);
8+
9+
if (!fs.existsSync(filePath)) {
10+
console.error(`Error: Custom network config "${fileName}" doesn't exists `);
11+
process.exit(1);
12+
}
13+
14+
try {
15+
const content = fs.readFileSync(filePath, 'utf8');
16+
return JSON.parse(content);
17+
} catch (err) {
18+
console.error(`Error reading file ${fileName}: ${err.message}`);
19+
process.exit(1);
20+
}
21+
}

src/common/config/utils/find-devnet-config.ts

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)