@@ -9,13 +9,18 @@ import {
99import { AMENDMENTS_ID } from 'xrpl/dist/npm/models/ledger'
1010import { LedgerResponseExpanded } from 'xrpl/dist/npm/models/methods/ledger'
1111
12- import { saveAmendmentStatus , saveAmendmentsStatus } from '../shared/database'
12+ import {
13+ query ,
14+ saveAmendmentStatus ,
15+ saveAmendmentsStatus ,
16+ } from '../shared/database'
1317import {
1418 NETWORKS_HOSTS ,
1519 deleteAmendmentStatus ,
1620} from '../shared/database/amendments'
1721import {
1822 AmendmentStatus ,
23+ DatabaseValidator ,
1924 FeeVote ,
2025 StreamLedger ,
2126 StreamManifest ,
@@ -93,6 +98,37 @@ function isFlagLedgerPlusOne(ledger_index: number): boolean {
9398 return false
9499}
95100
101+ /**
102+ * Returns network from the validation.
103+ *
104+ * @param validationData - Validation data received.
105+ * @param validatorsCache - In memory validators cache.
106+ * @returns String | undefined.
107+ */
108+ async function getNetworkFromValidation (
109+ validationData : ValidationRaw ,
110+ validatorsCache : Map < string , string > ,
111+ ) : Promise < string | undefined > {
112+ if ( validatorsCache . has ( validationData . validation_public_key ) ) {
113+ return validatorsCache . get ( validationData . validation_public_key )
114+ }
115+
116+ try {
117+ const validatorsFromDb : DatabaseValidator | undefined = await query (
118+ 'validators' ,
119+ )
120+ . select ( '*' )
121+ . where ( 'signing_key' , validationData . validation_public_key )
122+ . first ( )
123+
124+ return validatorsFromDb ?. networks ?? validationData . networks
125+ } catch ( err ) {
126+ log . error ( 'Error fetching validators data' , err )
127+ }
128+
129+ return undefined
130+ }
131+
96132/**
97133 * Handles a WebSocket message received from a subscribe request.
98134 *
@@ -101,7 +137,7 @@ function isFlagLedgerPlusOne(ledger_index: number): boolean {
101137 * @param networks - The networks of subscribed node.
102138 * @param network_fee - The map of default fee for the network to be used in case the validator does not vote for a new fee.
103139 * @param ws - The WebSocket message received from.
104- * @param validationNetworkDb -- The validation network map to fetch fee data .
140+ * @param validationNetworkDb -- A map of validator signing_keys to their corresponding networks .
105141 * @returns Void.
106142 */
107143// eslint-disable-next-line max-params -- Disabled for this function.
@@ -119,9 +155,10 @@ export async function handleWsMessageSubscribeTypes(
119155 validationData . networks = networks
120156 }
121157
122- const validationNetwork =
123- validationNetworkDb . get ( validationData . validation_public_key ) ??
124- validationData . networks
158+ const validationNetwork = await getNetworkFromValidation (
159+ validationData ,
160+ validationNetworkDb ,
161+ )
125162
126163 // Get the fee for the network to be used in case the validator does not vote for a new fee.
127164 if ( validationNetwork ) {
0 commit comments