Skip to content

Commit ffb916c

Browse files
authored
fix: added newFilter to paramRearrangementMap for WS server (#3117) (#3119)
1 parent daaccaa commit ffb916c

File tree

3 files changed

+73
-13
lines changed

3 files changed

+73
-13
lines changed

packages/ws-server/src/controllers/index.ts

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import { handleEthSubscribe, handleEthUnsubscribe } from './eth_subscribe';
2626
import { JsonRpcError, predefined, Relay } from '@hashgraph/json-rpc-relay';
2727
import { MirrorNodeClient } from '@hashgraph/json-rpc-relay/dist/lib/clients';
2828
import jsonResp from '@hashgraph/json-rpc-server/dist/koaJsonRpc/lib/RpcResponse';
29-
import { resolveParams, validateJsonRpcRequest, verifySupportedMethod } from '../utils/utils';
29+
import { paramRearrangementMap, resolveParams, validateJsonRpcRequest, verifySupportedMethod } from '../utils/utils';
3030
import {
3131
InvalidRequest,
3232
IPRateLimitExceeded,
@@ -76,16 +76,8 @@ const handleSendingRequestsToRelay = async ({
7676
const resolvedParams = resolveParams(method, params);
7777
const [service, methodName] = method.split('_');
7878

79-
// Rearrange the parameters for certain methods, since not everywhere requestDetails is last aparameter
80-
const paramRearrangementMap: { [key: string]: (params: any[], requestDetails: RequestDetails) => any[] } = {
81-
chainId: (_, requestDetails) => [requestDetails],
82-
estimateGas: (params, requestDetails) => [...params, null, requestDetails],
83-
getStorageAt: (params, requestDetails) => [params[0], params[1], requestDetails, params[2]],
84-
default: (params, requestDetails) => [...params, requestDetails],
85-
};
86-
87-
const rearrangeParams = paramRearrangementMap[methodName] || paramRearrangementMap['default'];
88-
const rearrangedParams = rearrangeParams(resolvedParams, requestDetails);
79+
const rearrangeParamsFn = paramRearrangementMap[methodName] || paramRearrangementMap['default'];
80+
const rearrangedParamsArray = rearrangeParamsFn(resolvedParams, requestDetails);
8981

9082
// Call the relay method with the resolved parameters.
9183
// Method will be validated by "verifySupportedMethod" before reaching this point.
@@ -94,9 +86,9 @@ const handleSendingRequestsToRelay = async ({
9486
txRes = await relay
9587
.eth()
9688
.filterService()
97-
[methodName](...rearrangedParams);
89+
[methodName](...rearrangedParamsArray);
9890
} else {
99-
txRes = await relay[service]()[methodName](...rearrangedParams);
91+
txRes = await relay[service]()[methodName](...rearrangedParamsArray);
10092
}
10193

10294
if (!txRes) {

packages/ws-server/src/utils/utils.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,3 +202,18 @@ export const constructValidLogSubscriptionFilter = (filters: any): object => {
202202
Object.entries(filters).filter(([key, value]) => value !== undefined && ['address', 'topics'].includes(key)),
203203
);
204204
};
205+
206+
/**
207+
* A mapping of parameter rearrangement functions for various methods.
208+
* Each function adjusts the order of parameters to ensure that the
209+
* `requestDetails` object is placed correctly based on the method's requirements.
210+
*/
211+
export const paramRearrangementMap: {
212+
[key: string]: (params: any[], requestDetails: RequestDetails) => any[];
213+
} = {
214+
chainId: (_: any[], requestDetails: RequestDetails) => [requestDetails],
215+
estimateGas: (params, requestDetails) => [params[0], params[1], requestDetails],
216+
getStorageAt: (params, requestDetails) => [params[0], params[1], requestDetails, params[2]],
217+
newFilter: (params, requestDetails) => [params[0], params[1], requestDetails, params[2], params[3]],
218+
default: (params, requestDetails) => [...params, requestDetails],
219+
};

packages/ws-server/tests/unit/utils.spec.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
getMultipleAddressesEnabled,
2727
getWsBatchRequestsEnabled,
2828
handleConnectionClose,
29+
paramRearrangementMap,
2930
resolveParams,
3031
sendToClient,
3132
} from '../../src/utils/utils';
@@ -313,4 +314,56 @@ describe('Utilities unit tests', async function () {
313314
});
314315
});
315316
});
317+
318+
describe('paramRearrangementMap', () => {
319+
const requestDetails = new RequestDetails({ ipAddress: '0.0.0.0', requestId: 'test-id' });
320+
const specialMethodNames = [`chainId`, `estimateGas`, `getStorageAt`, `newFilter`, `default`];
321+
322+
const mockResolvedParams = {
323+
chainId: [],
324+
estimateGas: [
325+
{
326+
to: '0xD7d454ea421FA3E98c988c2A33b5292C70A43b1E',
327+
data: '0x18160ddd',
328+
},
329+
'latest',
330+
],
331+
getStorageAt: ['0xd7d454ea421fa3e98c988c2a33b5292c70a43b1e', '0x0', 'latest'],
332+
newFilter: [
333+
'0x0',
334+
'latest',
335+
['0xf72ea4E404618E9DCcA79748236910887be9e2bd'],
336+
['0x25d719d88a4512dd76c7442b910a83360845505894eb444ef299409e180f8fb9'],
337+
],
338+
default: ['0x7cb9357e', '0x7cb9357e', '0x00abv'],
339+
};
340+
341+
const expectedRearrangedParams = {
342+
chainId: [requestDetails],
343+
estimateGas: [...mockResolvedParams.estimateGas, requestDetails],
344+
getStorageAt: [
345+
mockResolvedParams.getStorageAt[0],
346+
mockResolvedParams.getStorageAt[1],
347+
requestDetails,
348+
mockResolvedParams.getStorageAt[2],
349+
],
350+
newFilter: [
351+
mockResolvedParams.newFilter[0],
352+
mockResolvedParams.newFilter[1],
353+
requestDetails,
354+
mockResolvedParams.newFilter[2],
355+
mockResolvedParams.newFilter[3],
356+
],
357+
default: [...mockResolvedParams.default, requestDetails],
358+
};
359+
360+
specialMethodNames.forEach((methodName) => {
361+
it(`Should correctly rearrange parameters for ${methodName}`, () => {
362+
const rearrangeParamsFn = paramRearrangementMap[methodName];
363+
const rearrangedParamsArray = rearrangeParamsFn(mockResolvedParams[methodName], requestDetails);
364+
const expectedResult = expectedRearrangedParams[methodName];
365+
expect(rearrangedParamsArray).to.deep.eq(expectedResult);
366+
});
367+
});
368+
});
316369
});

0 commit comments

Comments
 (0)