Skip to content

Commit 310495c

Browse files
committed
feat: added devent configs
1 parent 683be55 commit 310495c

File tree

7 files changed

+89
-3
lines changed

7 files changed

+89
-3
lines changed

src/common/config/config.service.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
import { ConfigService as ConfigServiceSource } from '@nestjs/config';
22
import { EnvironmentVariables } from './env.validation';
3+
import {
4+
AccountingOracleHashConsensusModule,
5+
LidoContractModule,
6+
LidoLocatorContractModule,
7+
OracleReportSanityCheckerModule,
8+
ValidatorsExitBusOracleHashConsensusModule,
9+
WithdrawalQueueContractModule,
10+
} from '@lido-nestjs/contracts';
11+
import { devnetConfigs } from './devnets/configs';
12+
import { DevnetName } from './devnets/devnet-config.interface';
313

414
export class ConfigService extends ConfigServiceSource<EnvironmentVariables> {
515
/**
@@ -18,4 +28,29 @@ export class ConfigService extends ConfigServiceSource<EnvironmentVariables> {
1828
public get<T extends keyof EnvironmentVariables>(key: T): EnvironmentVariables[T] {
1929
return super.get(key, { infer: true }) as EnvironmentVariables[T];
2030
}
31+
32+
public getCustomConfigContractsAddressMap() {
33+
if (!this.get('DEVNET_NAME')) {
34+
return null;
35+
}
36+
37+
return new Map<symbol, string>([
38+
[WithdrawalQueueContractModule.contractToken, devnetConfigs[DevnetName.Devnet8].contracts['WithdrawalQueue']],
39+
40+
[LidoContractModule.contractToken, devnetConfigs[DevnetName.Devnet8].contracts['Lido']],
41+
[
42+
OracleReportSanityCheckerModule.contractToken,
43+
devnetConfigs[DevnetName.Devnet8].contracts['OracleReportSanityChecker'],
44+
],
45+
[
46+
AccountingOracleHashConsensusModule.contractToken,
47+
devnetConfigs[DevnetName.Devnet8].contracts['AccountingOracleHashConsensus'],
48+
],
49+
[
50+
ValidatorsExitBusOracleHashConsensusModule.contractToken,
51+
devnetConfigs[DevnetName.Devnet8].contracts['ValidatorsExitBusOracleHashConsensus'],
52+
],
53+
[LidoLocatorContractModule.contractToken, devnetConfigs[DevnetName.Devnet8].contracts['LidoLocator']],
54+
]);
55+
}
2156
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { DevnetConfig, DevnetName } from '../devnet-config.interface';
2+
3+
export const Devnet8Config: DevnetConfig = {
4+
name: DevnetName.Devnet8,
5+
contracts: {
6+
WithdrawalQueue: '0x00...',
7+
Lido: '0x00...',
8+
OracleReportSanityChecker: '0x00...',
9+
AccountingOracleHashConsensus: '0x00...',
10+
ValidatorsExitBusOracleHashConsensus: '0x00...',
11+
LidoLocator: '0x00...',
12+
},
13+
keysApiBasePath: '',
14+
};
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { DevnetName } from '../devnet-config.interface';
2+
import { Devnet8Config } from './devent-8';
3+
4+
export const devnetConfigs = {
5+
[DevnetName.Devnet8]: Devnet8Config,
6+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
export enum DevnetName {
2+
Devnet8 = 'Devnet8',
3+
}
4+
5+
export const requiredContracts = [
6+
'WithdrawalQueue',
7+
'Lido',
8+
'OracleReportSanityChecker',
9+
'AccountingOracleHashConsensus',
10+
'ValidatorsExitBusOracleHashConsensus',
11+
'LidoLocator',
12+
] as const;
13+
14+
export interface DevnetConfig {
15+
name: DevnetName;
16+
contracts: Record<(typeof requiredContracts)[number], string>;
17+
keysApiBasePath: string;
18+
}

src/common/config/devnets/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './devnet-config.interface';

src/common/config/env.validation.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import {
1212
IsBoolean,
1313
} from 'class-validator';
1414
import { Environment, LogLevel, LogFormat } from './interfaces';
15+
import { DevnetName } from './devnets/devnet-config.interface';
16+
import { devnetConfigs } from './devnets/configs';
1517

1618
const toNumber =
1719
({ defaultValue }) =>
@@ -94,6 +96,7 @@ export class EnvironmentVariables {
9496

9597
@IsOptional()
9698
@IsString()
99+
@Transform(({ value }) => (devnetConfigs[value] ? devnetConfigs[value].keysApiBasePath : ''))
97100
KEYS_API_BASE_PATH = '';
98101

99102
@IsOptional()
@@ -102,12 +105,18 @@ export class EnvironmentVariables {
102105
IS_SERVICE_UNAVAILABLE = false;
103106

104107
@IsOptional()
108+
@Transform(({ value }) => Number(value))
105109
@IsNumber()
106110
EL_RETRY_COUNT = 2;
107111

108112
@IsOptional()
113+
@Transform(({ value }) => Number(value))
109114
@IsNumber()
110115
EL_BLOCK_STEP = 500;
116+
117+
@IsOptional()
118+
@IsString()
119+
DEVNET_NAME: DevnetName = null;
111120
}
112121
export const ENV_KEYS = Object.keys(new EnvironmentVariables());
113122

src/common/contracts/contracts.module.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from '@lido-nestjs/contracts';
99
import { Global, Module } from '@nestjs/common';
1010
import { ExecutionProvider } from 'common/execution-provider';
11+
import { ConfigService } from '../config';
1112

1213
@Global()
1314
@Module({
@@ -20,10 +21,12 @@ import { ExecutionProvider } from 'common/execution-provider';
2021
LidoLocatorContractModule,
2122
].map((module) =>
2223
module.forRootAsync({
23-
async useFactory(provider: ExecutionProvider) {
24-
return { provider };
24+
async useFactory(provider: ExecutionProvider, config: ConfigService) {
25+
const addressMap = config.getCustomConfigContractsAddressMap();
26+
const address = addressMap ? addressMap.get(module.contractToken) : undefined;
27+
return { provider, address };
2528
},
26-
inject: [ExecutionProvider],
29+
inject: [ExecutionProvider, ConfigService],
2730
}),
2831
),
2932
})

0 commit comments

Comments
 (0)