@@ -9,13 +9,18 @@ import {
9
9
import { AMENDMENTS_ID } from 'xrpl/dist/npm/models/ledger'
10
10
import { LedgerResponseExpanded } from 'xrpl/dist/npm/models/methods/ledger'
11
11
12
- import { saveAmendmentStatus , saveAmendmentsStatus } from '../shared/database'
12
+ import {
13
+ query ,
14
+ saveAmendmentStatus ,
15
+ saveAmendmentsStatus ,
16
+ } from '../shared/database'
13
17
import {
14
18
NETWORKS_HOSTS ,
15
19
deleteAmendmentStatus ,
16
20
} from '../shared/database/amendments'
17
21
import {
18
22
AmendmentStatus ,
23
+ DatabaseValidator ,
19
24
FeeVote ,
20
25
StreamLedger ,
21
26
StreamManifest ,
@@ -93,6 +98,37 @@ function isFlagLedgerPlusOne(ledger_index: number): boolean {
93
98
return false
94
99
}
95
100
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
+
96
132
/**
97
133
* Handles a WebSocket message received from a subscribe request.
98
134
*
@@ -101,7 +137,7 @@ function isFlagLedgerPlusOne(ledger_index: number): boolean {
101
137
* @param networks - The networks of subscribed node.
102
138
* @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.
103
139
* @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 .
105
141
* @returns Void.
106
142
*/
107
143
// eslint-disable-next-line max-params -- Disabled for this function.
@@ -119,9 +155,10 @@ export async function handleWsMessageSubscribeTypes(
119
155
validationData . networks = networks
120
156
}
121
157
122
- const validationNetwork =
123
- validationNetworkDb . get ( validationData . validation_public_key ) ??
124
- validationData . networks
158
+ const validationNetwork = await getNetworkFromValidation (
159
+ validationData ,
160
+ validationNetworkDb ,
161
+ )
125
162
126
163
// Get the fee for the network to be used in case the validator does not vote for a new fee.
127
164
if ( validationNetwork ) {
0 commit comments