Skip to content

Commit c154540

Browse files
committed
✨ Multi run support for free rpc benchmarking
1 parent 8759835 commit c154540

File tree

5 files changed

+163
-93
lines changed

5 files changed

+163
-93
lines changed

.changeset/twelve-wombats-wave.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@konfeature/erpc-config-generator": patch
3+
---
4+
5+
Add multi run support for free rpc benchmarking

example/simple.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ export default buildErpcConfig({
100100
retryCount: 1,
101101
retryDelayInMs: 1000,
102102
rpcTimeoutInMs: 5000,
103-
runs: 1,
104-
runsIntervalInMs: 200,
103+
runs: 3,
104+
runsIntervalInMs: 500,
105105
request: {
106106
method: "eth_getLogs",
107107
params: [{ fromBlock: toHex(latestBlock.number) }],

example/simple.yaml

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ projects:
3838
ignoreMethods: &var2 []
3939
allowMethods: &var3 []
4040
autoIgnoreUnsupportedMethods: true
41-
id: free-polygon-pokt.nodies.app-137-0x657d48d8
42-
endpoint: https://polygon-pokt.nodies.app
41+
id: free-polygon.rpc.blxrbdn.com-137-0x30cd11e7
42+
endpoint: https://polygon.rpc.blxrbdn.com
4343
type: evm
4444
- rateLimitBudget: ""
4545
vendorName: Free RPC
@@ -54,64 +54,64 @@ projects:
5454
ignoreMethods: *var2
5555
allowMethods: *var3
5656
autoIgnoreUnsupportedMethods: true
57-
id: free-polygon.rpc.blxrbdn.com-137-0x30cd11e7
58-
endpoint: https://polygon.rpc.blxrbdn.com
57+
id: free-polygon-mainnet.rpcfast.com-137-0x49c7335a
58+
endpoint: https://polygon-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf
5959
type: evm
6060
- rateLimitBudget: ""
6161
vendorName: Free RPC
6262
ignoreMethods: *var2
6363
allowMethods: *var3
6464
autoIgnoreUnsupportedMethods: true
65-
id: free-polygon-mainnet.rpcfast.com-137-0x49c7335a
66-
endpoint: https://polygon-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf
65+
id: free-polygon.gateway.tenderly.co-137-0xd539d4a0
66+
endpoint: https://polygon.gateway.tenderly.co
6767
type: evm
6868
- rateLimitBudget: ""
6969
vendorName: Free RPC
7070
ignoreMethods: *var2
7171
allowMethods: *var3
7272
autoIgnoreUnsupportedMethods: true
73-
id: free-polygon.drpc.org-137-0x3156f382
74-
endpoint: https://polygon.drpc.org
73+
id: free-polygon-rpc.com-137-0x7e82633b
74+
endpoint: https://polygon-rpc.com
7575
type: evm
7676
- rateLimitBudget: ""
7777
vendorName: Free RPC
7878
ignoreMethods: *var2
7979
allowMethods: *var3
8080
autoIgnoreUnsupportedMethods: true
81-
id: free-polygon.gateway.tenderly.co-137-0xd539d4a0
82-
endpoint: https://polygon.gateway.tenderly.co
81+
id: free-rpc.ankr.com-137-0x4ffa1946
82+
endpoint: https://rpc.ankr.com/polygon
8383
type: evm
8484
- rateLimitBudget: ""
8585
vendorName: Free RPC
8686
ignoreMethods: *var2
8787
allowMethods: *var3
8888
autoIgnoreUnsupportedMethods: true
89-
id: free-gateway.tenderly.co-137-0x6961563b
90-
endpoint: https://gateway.tenderly.co/public/polygon
89+
id: free-rpc-mainnet.matic.quiknode.pro-137-0x842d867a
90+
endpoint: https://rpc-mainnet.matic.quiknode.pro
9191
type: evm
9292
- rateLimitBudget: ""
9393
vendorName: Free RPC
9494
ignoreMethods: *var2
9595
allowMethods: *var3
9696
autoIgnoreUnsupportedMethods: true
97-
id: free-polygon.meowrpc.com-137-0xd918e198
98-
endpoint: https://polygon.meowrpc.com
97+
id: free-polygon.llamarpc.com-137-0x686624c0
98+
endpoint: https://polygon.llamarpc.com
9999
type: evm
100100
- rateLimitBudget: ""
101101
vendorName: Free RPC
102102
ignoreMethods: *var2
103103
allowMethods: *var3
104104
autoIgnoreUnsupportedMethods: true
105-
id: free-rpc.ankr.com-137-0x4ffa1946
106-
endpoint: https://rpc.ankr.com/polygon
105+
id: free-polygon.meowrpc.com-137-0xd918e198
106+
endpoint: https://polygon.meowrpc.com
107107
type: evm
108108
- rateLimitBudget: ""
109109
vendorName: Free RPC
110110
ignoreMethods: *var2
111111
allowMethods: *var3
112112
autoIgnoreUnsupportedMethods: true
113-
id: free-polygon-rpc.com-137-0x7e82633b
114-
endpoint: https://polygon-rpc.com
113+
id: free-polygon-pokt.nodies.app-137-0x657d48d8
114+
endpoint: https://polygon-pokt.nodies.app
115115
type: evm
116116
- rateLimitBudget: ""
117117
vendorName: Free RPC
@@ -142,16 +142,16 @@ projects:
142142
ignoreMethods: *var4
143143
allowMethods: *var5
144144
autoIgnoreUnsupportedMethods: true
145-
id: free-arbitrum.blockpi.network-42161-0xa4acaaa2
146-
endpoint: https://arbitrum.blockpi.network/v1/rpc/public
145+
id: free-arbitrum.drpc.org-42161-0x25ce3cf7
146+
endpoint: https://arbitrum.drpc.org
147147
type: evm
148148
- rateLimitBudget: ""
149149
vendorName: Free RPC
150150
ignoreMethods: *var4
151151
allowMethods: *var5
152152
autoIgnoreUnsupportedMethods: true
153-
id: free-rpc.tornadoeth.cash-42161-0x1c739970
154-
endpoint: https://rpc.tornadoeth.cash/arbitrum
153+
id: free-arbitrum.blockpi.network-42161-0xa4acaaa2
154+
endpoint: https://arbitrum.blockpi.network/v1/rpc/public
155155
type: evm
156156
- rateLimitBudget: ""
157157
vendorName: Free RPC
@@ -166,16 +166,16 @@ projects:
166166
ignoreMethods: *var4
167167
allowMethods: *var5
168168
autoIgnoreUnsupportedMethods: true
169-
id: free-arb1.arbitrum.io-42161-0x8fc12b98
170-
endpoint: https://arb1.arbitrum.io/rpc
169+
id: free-arbitrum.llamarpc.com-42161-0x06988168
170+
endpoint: https://arbitrum.llamarpc.com
171171
type: evm
172172
- rateLimitBudget: ""
173173
vendorName: Free RPC
174174
ignoreMethods: *var4
175175
allowMethods: *var5
176176
autoIgnoreUnsupportedMethods: true
177-
id: free-arbitrum.drpc.org-42161-0x25ce3cf7
178-
endpoint: https://arbitrum.drpc.org
177+
id: free-arb1.arbitrum.io-42161-0x8fc12b98
178+
endpoint: https://arb1.arbitrum.io/rpc
179179
type: evm
180180
- rateLimitBudget: ""
181181
vendorName: Free RPC
@@ -190,8 +190,8 @@ projects:
190190
ignoreMethods: *var4
191191
allowMethods: *var5
192192
autoIgnoreUnsupportedMethods: true
193-
id: free-arbitrum.llamarpc.com-42161-0x06988168
194-
endpoint: https://arbitrum.llamarpc.com
193+
id: free-rpc.tornadoeth.cash-42161-0x1c739970
194+
endpoint: https://rpc.tornadoeth.cash/arbitrum
195195
type: evm
196196
- rateLimitBudget: ""
197197
vendorName: Free RPC
@@ -206,32 +206,32 @@ projects:
206206
ignoreMethods: *var6
207207
allowMethods: *var7
208208
autoIgnoreUnsupportedMethods: true
209-
id: free-gateway.tenderly.co-10-0xcaf97347
210-
endpoint: https://gateway.tenderly.co/public/optimism
209+
id: free-op-pokt.nodies.app-10-0x4bfacfc4
210+
endpoint: https://op-pokt.nodies.app
211211
type: evm
212212
- rateLimitBudget: ""
213213
vendorName: Free RPC
214214
ignoreMethods: *var6
215215
allowMethods: *var7
216216
autoIgnoreUnsupportedMethods: true
217-
id: free-op-pokt.nodies.app-10-0x4bfacfc4
218-
endpoint: https://op-pokt.nodies.app
217+
id: free-mainnet.optimism.io-10-0xb4ebd524
218+
endpoint: https://mainnet.optimism.io
219219
type: evm
220220
- rateLimitBudget: ""
221221
vendorName: Free RPC
222222
ignoreMethods: *var6
223223
allowMethods: *var7
224224
autoIgnoreUnsupportedMethods: true
225-
id: free-optimism.blockpi.network-10-0x3b0301fd
226-
endpoint: https://optimism.blockpi.network/v1/rpc/public
225+
id: free-optimism.api.onfinality.io-10-0x7c6f6606
226+
endpoint: https://optimism.api.onfinality.io/public
227227
type: evm
228228
- rateLimitBudget: ""
229229
vendorName: Free RPC
230230
ignoreMethods: *var6
231231
allowMethods: *var7
232232
autoIgnoreUnsupportedMethods: true
233-
id: free-mainnet.optimism.io-10-0xb4ebd524
234-
endpoint: https://mainnet.optimism.io
233+
id: free-optimism.blockpi.network-10-0x3b0301fd
234+
endpoint: https://optimism.blockpi.network/v1/rpc/public
235235
type: evm
236236
- rateLimitBudget: ""
237237
vendorName: Free RPC
@@ -246,30 +246,30 @@ projects:
246246
ignoreMethods: *var6
247247
allowMethods: *var7
248248
autoIgnoreUnsupportedMethods: true
249-
id: free-optimism.meowrpc.com-10-0xe0570cf1
250-
endpoint: https://optimism.meowrpc.com
249+
id: free-gateway.tenderly.co-10-0xcaf97347
250+
endpoint: https://gateway.tenderly.co/public/optimism
251251
type: evm
252252
- rateLimitBudget: ""
253253
vendorName: Free RPC
254254
ignoreMethods: *var6
255255
allowMethods: *var7
256256
autoIgnoreUnsupportedMethods: true
257-
id: free-optimism.api.onfinality.io-10-0x7c6f6606
258-
endpoint: https://optimism.api.onfinality.io/public
257+
id: free-optimism.meowrpc.com-10-0xe0570cf1
258+
endpoint: https://optimism.meowrpc.com
259259
type: evm
260260
- rateLimitBudget: ""
261261
vendorName: Free RPC
262262
ignoreMethods: *var6
263263
allowMethods: *var7
264264
autoIgnoreUnsupportedMethods: true
265-
id: free-api.stateless.solutions-10-0x70ede9a8
266-
endpoint: https://api.stateless.solutions/optimism/v1/f373feb1-c8e4-41c9-bb74-2c691988dd34
265+
id: free-optimism.gateway.tenderly.co-10-0xd0f68f72
266+
endpoint: https://optimism.gateway.tenderly.co
267267
type: evm
268268
- rateLimitBudget: ""
269269
vendorName: Free RPC
270270
ignoreMethods: *var6
271271
allowMethods: *var7
272272
autoIgnoreUnsupportedMethods: true
273-
id: free-1rpc.io-10-0x8760b2c8
274-
endpoint: https://1rpc.io/op
273+
id: free-endpoints.omniatech.io-10-0x3c5c0dd9
274+
endpoint: https://endpoints.omniatech.io/v1/op/mainnet/public
275275
type: evm

src/cli/utils/upstream/freeRpc.ts

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,14 @@ export async function getFreeRpcUrlsForChain({
6969
spinner.succeed(`Performance test done for ${rpcs.length} rpcs`);
7070

7171
// Sort the success results by latency
72-
let finalResults = results.success.sort((a, b) => a.latency - b.latency);
72+
let finalResults = results.success.sort(
73+
(a, b) => a.avgLatency - b.avgLatency
74+
);
7375

7476
// If we got a naxRpcLatencyInMs, filter the results
7577
const maxLatency = config?.maxRpcLatencyInMs;
7678
if (maxLatency) {
77-
finalResults = finalResults.filter((r) => r.latency < maxLatency);
79+
finalResults = finalResults.filter((r) => r.avgLatency < maxLatency);
7880
}
7981

8082
// If we got a maxRpcCount, filter the results
@@ -100,6 +102,9 @@ export async function getFreeRpcUrlsForChain({
100102
return finalResults.map((r) => r.rpcUrl);
101103
}
102104

105+
/**
106+
* Print some debug data
107+
*/
103108
function printDebugData({
104109
chainId,
105110
chain,
@@ -112,7 +117,7 @@ function printDebugData({
112117
rpcUrls: string[];
113118
results: {
114119
success: RpcBenchmarkResult[];
115-
failed: (RpcBenchmarkResult | undefined)[];
120+
failed: RpcBenchmarkResult[];
116121
};
117122
finalResults: RpcBenchmarkResult[];
118123
}) {
@@ -125,9 +130,19 @@ function printDebugData({
125130
// Create the table for the success rpcs
126131
const successTable = results.success.map((r) => [
127132
r.rpcUrl,
128-
`${r.latency.toFixed(4)}ms`,
133+
`${r.avgLatency.toFixed(4)}ms`,
134+
...r.runs.map((run) =>
135+
run.success ? `${run.latency.toFixed(4)}ms` : run.error.message
136+
),
137+
]);
138+
successTable.unshift([
139+
"RPC URL",
140+
"Avg Latency",
141+
...Array.from(
142+
{ length: results.success[0].runs.length },
143+
(_, i) => `Run ${i + 1}`
144+
),
129145
]);
130-
successTable.unshift(["RPC URL", "Latency"]);
131146
print.divider();
132147
print.info("Success RPCs:");
133148
print.table(successTable, {
@@ -137,9 +152,17 @@ function printDebugData({
137152
// Create the one for the failed rpcs
138153
const failedTable = results.failed.map((r) => [
139154
r?.rpcUrl ?? "Unknown",
140-
r?.error?.message ?? "Unknown",
155+
...r.runs.map((run) =>
156+
run.success ? `${run.latency.toFixed(4)}ms` : run.error.message
157+
),
158+
]);
159+
failedTable.unshift([
160+
"RPC URL",
161+
...Array.from(
162+
{ length: results.success[0].runs.length },
163+
(_, i) => `Run ${i + 1}`
164+
),
141165
]);
142-
failedTable.unshift(["RPC URL", "Error"]);
143166
print.divider();
144167
print.info("Failed RPCs:");
145168
print.table(failedTable, {
@@ -149,9 +172,9 @@ function printDebugData({
149172
// Create the one for the final rpcs
150173
const finalTable = finalResults.map((r) => [
151174
r.rpcUrl,
152-
`${r.latency.toFixed(4)}ms`,
175+
`${r.avgLatency.toFixed(4)}ms`,
153176
]);
154-
finalTable.unshift(["RPC URL", "Latency"]);
177+
finalTable.unshift(["RPC URL", "Avg Latency"]);
155178
print.divider();
156179
print.info("Final RPCs:");
157180
print.table(finalTable, {

0 commit comments

Comments
 (0)