prool 0.0.25 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{LICENSE → LICENSE.md} +1 -1
- package/README.md +46 -163
- package/{_lib/instance.d.ts → dist/Instance.d.ts} +28 -25
- package/dist/Instance.d.ts.map +1 -0
- package/{_lib/instance.js → dist/Instance.js} +9 -4
- package/dist/Instance.js.map +1 -0
- package/{_lib/pool.d.ts → dist/Pool.d.ts} +15 -13
- package/dist/Pool.d.ts.map +1 -0
- package/{_lib/pool.js → dist/Pool.js} +3 -3
- package/dist/Pool.js.map +1 -0
- package/{_lib/server.d.ts → dist/Server.d.ts} +7 -10
- package/dist/Server.d.ts.map +1 -0
- package/{_lib/server.js → dist/Server.js} +8 -9
- package/dist/Server.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/instances/alto.d.ts +452 -0
- package/dist/instances/alto.d.ts.map +1 -0
- package/{_lib → dist}/instances/alto.js +4 -4
- package/dist/instances/alto.js.map +1 -0
- package/dist/instances/anvil.d.ts +458 -0
- package/dist/instances/anvil.d.ts.map +1 -0
- package/{_lib → dist}/instances/anvil.js +4 -4
- package/dist/instances/anvil.js.map +1 -0
- package/dist/instances/tempo.d.ts +189 -0
- package/dist/instances/tempo.d.ts.map +1 -0
- package/dist/instances/tempo.js +200 -0
- package/dist/instances/tempo.js.map +1 -0
- package/{_lib → dist/internal}/utils.d.ts +5 -5
- package/dist/internal/utils.d.ts.map +1 -0
- package/{_lib → dist/internal}/utils.js +37 -7
- package/dist/internal/utils.js.map +1 -0
- package/{_lib → dist}/processes/execa.d.ts +11 -10
- package/dist/processes/execa.d.ts.map +1 -0
- package/{_lib → dist}/processes/execa.js +1 -1
- package/dist/processes/execa.js.map +1 -0
- package/package.json +17 -16
- package/{instance.test.ts → src/Instance.test.ts} +12 -12
- package/{instance.ts → src/Instance.ts} +51 -42
- package/{pool.test.ts → src/Pool.test.ts} +41 -55
- package/{pool.ts → src/Pool.ts} +21 -19
- package/{server.test.ts → src/Server.test.ts} +26 -149
- package/{server.ts → src/Server.ts} +9 -11
- package/src/index.ts +3 -0
- package/{instances → src/instances}/alto.test.ts +8 -11
- package/src/instances/alto.ts +289 -0
- package/{instances → src/instances}/anvil.test.ts +5 -6
- package/src/instances/anvil.ts +306 -0
- package/{instances/silius.test.ts → src/instances/tempo.test.ts} +20 -44
- package/src/instances/tempo.ts +322 -0
- package/{utils.test.ts → src/internal/utils.test.ts} +20 -6
- package/{utils.ts → src/internal/utils.ts} +47 -17
- package/{processes → src/processes}/execa.test.ts +6 -11
- package/{processes → src/processes}/execa.ts +19 -15
- package/src/processes/index.ts +1 -0
- package/CHANGELOG.md +0 -154
- package/_lib/exports/index.d.ts +0 -5
- package/_lib/exports/index.d.ts.map +0 -1
- package/_lib/exports/index.js +0 -5
- package/_lib/exports/index.js.map +0 -1
- package/_lib/exports/instances.d.ts +0 -7
- package/_lib/exports/instances.d.ts.map +0 -1
- package/_lib/exports/instances.js +0 -7
- package/_lib/exports/instances.js.map +0 -1
- package/_lib/exports/processes.d.ts +0 -2
- package/_lib/exports/processes.d.ts.map +0 -1
- package/_lib/exports/processes.js +0 -2
- package/_lib/exports/processes.js.map +0 -1
- package/_lib/instance.d.ts.map +0 -1
- package/_lib/instance.js.map +0 -1
- package/_lib/instances/alto.d.ts +0 -449
- package/_lib/instances/alto.d.ts.map +0 -1
- package/_lib/instances/alto.js.map +0 -1
- package/_lib/instances/anvil.d.ts +0 -455
- package/_lib/instances/anvil.d.ts.map +0 -1
- package/_lib/instances/anvil.js.map +0 -1
- package/_lib/instances/rundler.d.ts +0 -604
- package/_lib/instances/rundler.d.ts.map +0 -1
- package/_lib/instances/rundler.js +0 -86
- package/_lib/instances/rundler.js.map +0 -1
- package/_lib/instances/silius.d.ts +0 -224
- package/_lib/instances/silius.d.ts.map +0 -1
- package/_lib/instances/silius.js +0 -117
- package/_lib/instances/silius.js.map +0 -1
- package/_lib/instances/stackup.d.ts +0 -86
- package/_lib/instances/stackup.d.ts.map +0 -1
- package/_lib/instances/stackup.js +0 -89
- package/_lib/instances/stackup.js.map +0 -1
- package/_lib/pool.d.ts.map +0 -1
- package/_lib/pool.js.map +0 -1
- package/_lib/processes/execa.d.ts.map +0 -1
- package/_lib/processes/execa.js.map +0 -1
- package/_lib/server.d.ts.map +0 -1
- package/_lib/server.js.map +0 -1
- package/_lib/utils.d.ts.map +0 -1
- package/_lib/utils.js.map +0 -1
- package/exports/index.test.ts +0 -16
- package/exports/index.ts +0 -29
- package/exports/instances.test.ts +0 -15
- package/exports/instances.ts +0 -13
- package/exports/processes.test.ts +0 -10
- package/exports/processes.ts +0 -8
- package/instances/alto.ts +0 -280
- package/instances/anvil.ts +0 -304
- package/instances/package.json +0 -5
- package/instances/rundler.test.ts +0 -111
- package/instances/rundler.ts +0 -451
- package/instances/silius.ts +0 -347
- package/instances/stackup.test.ts +0 -106
- package/instances/stackup.ts +0 -162
- package/processes/package.json +0 -5
- package/tsconfig.build.tsbuildinfo +0 -1
|
@@ -1,604 +0,0 @@
|
|
|
1
|
-
export type RundlerParameters = {
|
|
2
|
-
/**
|
|
3
|
-
* The path to the rundler binary
|
|
4
|
-
*
|
|
5
|
-
* @default rundler
|
|
6
|
-
*/
|
|
7
|
-
binary?: string;
|
|
8
|
-
/**
|
|
9
|
-
* The version of the entrypoint to use
|
|
10
|
-
*
|
|
11
|
-
* @default 0.6.0
|
|
12
|
-
*/
|
|
13
|
-
entryPointVersion?: '0.6.0' | '0.7.0';
|
|
14
|
-
/**
|
|
15
|
-
* Network to look up a hardcoded chain spec.
|
|
16
|
-
* @default dev
|
|
17
|
-
*/
|
|
18
|
-
network?: string;
|
|
19
|
-
/**
|
|
20
|
-
* Path to a chain spec TOML file.
|
|
21
|
-
*/
|
|
22
|
-
chainSpec?: string;
|
|
23
|
-
/**
|
|
24
|
-
* EVM Node HTTP URL to use.
|
|
25
|
-
*
|
|
26
|
-
* @default http://localhost:8545
|
|
27
|
-
*/
|
|
28
|
-
nodeHttp?: string;
|
|
29
|
-
/**
|
|
30
|
-
* Maximum verification gas.
|
|
31
|
-
* @default 5000000
|
|
32
|
-
*/
|
|
33
|
-
maxVerificationGas?: number;
|
|
34
|
-
/**
|
|
35
|
-
* Maximum bundle gas.
|
|
36
|
-
* @default 25000000
|
|
37
|
-
*/
|
|
38
|
-
maxBundleGas?: number;
|
|
39
|
-
/**
|
|
40
|
-
* Minimum stake value.
|
|
41
|
-
* @default 1000000000000000000
|
|
42
|
-
*/
|
|
43
|
-
minStakeValue?: number;
|
|
44
|
-
/**
|
|
45
|
-
* Minimum unstake delay.
|
|
46
|
-
* @default 84600
|
|
47
|
-
*/
|
|
48
|
-
minUnstakeDelay?: number;
|
|
49
|
-
/**
|
|
50
|
-
* Number of blocks to search when calling eth_getUserOperationByHash.
|
|
51
|
-
* @default 100
|
|
52
|
-
*/
|
|
53
|
-
userOperationEventBlockDistance?: number;
|
|
54
|
-
/**
|
|
55
|
-
* Maximum gas for simulating handle operations.
|
|
56
|
-
* @default 20000000
|
|
57
|
-
*/
|
|
58
|
-
maxSimulateHandleOpsGas?: number;
|
|
59
|
-
/**
|
|
60
|
-
* The gas fee to use during verification estimation.
|
|
61
|
-
* @default 1000000000000 10K gwei
|
|
62
|
-
*/
|
|
63
|
-
verificationEstimationGasFee?: number;
|
|
64
|
-
/**
|
|
65
|
-
* Bundle transaction priority fee overhead over network value.
|
|
66
|
-
* @default 0
|
|
67
|
-
*/
|
|
68
|
-
bundlePriorityFeeOverheadPercent?: number;
|
|
69
|
-
/**
|
|
70
|
-
* Priority fee mode kind.
|
|
71
|
-
* Possible values are base_fee_percent and priority_fee_increase_percent.
|
|
72
|
-
* @default priority_fee_increase_percent
|
|
73
|
-
*/
|
|
74
|
-
priorityFeeModeKind?: 'base_fee_percent' | 'priority_fee_increase_percent';
|
|
75
|
-
/**
|
|
76
|
-
* Priority fee mode value.
|
|
77
|
-
* @default 0
|
|
78
|
-
*/
|
|
79
|
-
priorityFeeModeValue?: number;
|
|
80
|
-
/**
|
|
81
|
-
* Percentage of the current network fees a user operation must have in order to be accepted into the mempool.
|
|
82
|
-
* @default 100
|
|
83
|
-
*/
|
|
84
|
-
baseFeeAcceptPercent?: number;
|
|
85
|
-
/**
|
|
86
|
-
* AWS region.
|
|
87
|
-
* @default us-east-1
|
|
88
|
-
*/
|
|
89
|
-
awsRegion?: string;
|
|
90
|
-
/**
|
|
91
|
-
* Interval at which the builder polls an RPC node for new blocks and mined transactions.
|
|
92
|
-
* @default 100
|
|
93
|
-
*/
|
|
94
|
-
ethPollIntervalMillis?: number;
|
|
95
|
-
/**
|
|
96
|
-
* Flag for unsafe bundling mode. When set Rundler will skip checking simulation rules (and any debug_traceCall).
|
|
97
|
-
*
|
|
98
|
-
* @default true
|
|
99
|
-
*/
|
|
100
|
-
unsafe?: boolean;
|
|
101
|
-
/**
|
|
102
|
-
* Path to the mempool configuration file.
|
|
103
|
-
* This path can either be a local file path or an S3 url.
|
|
104
|
-
*/
|
|
105
|
-
mempoolConfigPath?: string;
|
|
106
|
-
metrics?: {
|
|
107
|
-
/**
|
|
108
|
-
* Port to listen on for metrics requests.
|
|
109
|
-
* @default 8080
|
|
110
|
-
*/
|
|
111
|
-
port?: number;
|
|
112
|
-
/**
|
|
113
|
-
* Host to listen on for metrics requests.
|
|
114
|
-
* @default 0.0.0.0
|
|
115
|
-
*/
|
|
116
|
-
host?: string;
|
|
117
|
-
/**
|
|
118
|
-
* Tags for metrics in the format key1=value1,key2=value2,...
|
|
119
|
-
*/
|
|
120
|
-
tags?: string;
|
|
121
|
-
/**
|
|
122
|
-
* Sample interval to use for sampling metrics.
|
|
123
|
-
* @default 1000
|
|
124
|
-
*/
|
|
125
|
-
sampleIntervalMillis?: number;
|
|
126
|
-
};
|
|
127
|
-
logging?: {
|
|
128
|
-
/**
|
|
129
|
-
* Log file. If not provided, logs will be written to stdout.
|
|
130
|
-
*/
|
|
131
|
-
file?: string;
|
|
132
|
-
/**
|
|
133
|
-
* If set, logs will be written in JSON format.
|
|
134
|
-
*/
|
|
135
|
-
json?: boolean;
|
|
136
|
-
};
|
|
137
|
-
rpc?: {
|
|
138
|
-
/**
|
|
139
|
-
* Port to listen on for JSON-RPC requests.
|
|
140
|
-
* @default 3000
|
|
141
|
-
*/
|
|
142
|
-
port?: number;
|
|
143
|
-
/**
|
|
144
|
-
* Host to listen on for JSON-RPC requests.
|
|
145
|
-
* @default 127.0.0.1
|
|
146
|
-
*/
|
|
147
|
-
host?: string;
|
|
148
|
-
/**
|
|
149
|
-
* Which APIs to expose over the RPC interface.
|
|
150
|
-
* @default eth,rundler
|
|
151
|
-
*/
|
|
152
|
-
api?: string;
|
|
153
|
-
/**
|
|
154
|
-
* Timeout for RPC requests.
|
|
155
|
-
* @default 20
|
|
156
|
-
*/
|
|
157
|
-
timeoutSeconds?: number;
|
|
158
|
-
/**
|
|
159
|
-
* Maximum number of concurrent connections.
|
|
160
|
-
* @default 100
|
|
161
|
-
*/
|
|
162
|
-
maxConnections?: number;
|
|
163
|
-
};
|
|
164
|
-
pool?: {
|
|
165
|
-
/**
|
|
166
|
-
* Maximum size in bytes for the pool.
|
|
167
|
-
* @default 500000000, 0.5 GB
|
|
168
|
-
*/
|
|
169
|
-
maxSizeInBytes?: number;
|
|
170
|
-
/**
|
|
171
|
-
* Maximum number of user operations for an unstaked sender.
|
|
172
|
-
* @default 4
|
|
173
|
-
*/
|
|
174
|
-
sameSenderMempoolCount?: number;
|
|
175
|
-
/**
|
|
176
|
-
* Minimum replacement fee increase percentage.
|
|
177
|
-
* @default 10
|
|
178
|
-
*/
|
|
179
|
-
minReplacementFeeIncreasePercentage?: number;
|
|
180
|
-
/**
|
|
181
|
-
* Path to a blocklist file.
|
|
182
|
-
* This path can either be a local file path or an S3 url.
|
|
183
|
-
*/
|
|
184
|
-
blocklistPath?: string;
|
|
185
|
-
/**
|
|
186
|
-
* Path to an allowlist file.
|
|
187
|
-
* This path can either be a local file path or an S3 url.
|
|
188
|
-
*/
|
|
189
|
-
allowlistPath?: string;
|
|
190
|
-
/**
|
|
191
|
-
* Size of the chain history.
|
|
192
|
-
*/
|
|
193
|
-
chainHistorySize?: number;
|
|
194
|
-
/**
|
|
195
|
-
* Boolean field that sets whether the pool server starts with paymaster tracking enabled.
|
|
196
|
-
* @default true
|
|
197
|
-
*/
|
|
198
|
-
paymasterTrackingEnabled?: boolean;
|
|
199
|
-
/**
|
|
200
|
-
* Length of the paymaster cache.
|
|
201
|
-
* @default 10_000
|
|
202
|
-
*/
|
|
203
|
-
paymasterCacheLength?: number;
|
|
204
|
-
/**
|
|
205
|
-
* Boolean field that sets whether the pool server starts with reputation tracking enabled.
|
|
206
|
-
* @default true
|
|
207
|
-
*/
|
|
208
|
-
reputationTrackingEnabled?: boolean;
|
|
209
|
-
/**
|
|
210
|
-
* The minimum number of blocks that a UO must stay in the mempool before it can be requested to be dropped by the user.
|
|
211
|
-
* @default 10
|
|
212
|
-
*/
|
|
213
|
-
dropMinNumBlocks?: number;
|
|
214
|
-
};
|
|
215
|
-
builder?: {
|
|
216
|
-
/**
|
|
217
|
-
* Private key to use for signing transactions.
|
|
218
|
-
* If used with awsKmsKeyIds, then explicitly pass in `null` here.
|
|
219
|
-
*
|
|
220
|
-
* @default 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
|
|
221
|
-
*/
|
|
222
|
-
privateKey?: string;
|
|
223
|
-
/**
|
|
224
|
-
* AWS KMS key IDs to use for signing transactions (comma-separated).
|
|
225
|
-
* Only required if privateKey is not provided.
|
|
226
|
-
*/
|
|
227
|
-
awsKmsKeyIds?: string;
|
|
228
|
-
/**
|
|
229
|
-
* Redis URI to use for KMS leasing.
|
|
230
|
-
* Only required when awsKmsKeyIds are provided.
|
|
231
|
-
*
|
|
232
|
-
* @default ""
|
|
233
|
-
*/
|
|
234
|
-
redisUri?: string;
|
|
235
|
-
/**
|
|
236
|
-
* Redis lock TTL in milliseconds.
|
|
237
|
-
* Only required when awsKmsKeyIds are provided.
|
|
238
|
-
* @default 60000
|
|
239
|
-
*/
|
|
240
|
-
redisLockTtlMillis?: number;
|
|
241
|
-
/**
|
|
242
|
-
* Maximum number of ops to include in one bundle.
|
|
243
|
-
* @default 128
|
|
244
|
-
*/
|
|
245
|
-
maxBundleSize?: number;
|
|
246
|
-
/**
|
|
247
|
-
* If present, the URL of the ETH provider that will be used to send transactions.
|
|
248
|
-
* Defaults to the value of nodeHttp.
|
|
249
|
-
*/
|
|
250
|
-
submitUrl?: string;
|
|
251
|
-
/**
|
|
252
|
-
* Choice of what sender type to use for transaction submission.
|
|
253
|
-
* @default raw
|
|
254
|
-
* options: raw, conditional, flashbots, polygon_bloxroute
|
|
255
|
-
*/
|
|
256
|
-
sender?: 'raw' | 'conditional' | 'flashbots' | 'polygonBloxroute';
|
|
257
|
-
/**
|
|
258
|
-
* After submitting a bundle transaction, the maximum number of blocks to wait for that transaction to mine before trying to resend with higher gas fees.
|
|
259
|
-
* @default 2
|
|
260
|
-
*/
|
|
261
|
-
maxBlocksToWaitForMine?: number;
|
|
262
|
-
/**
|
|
263
|
-
* Percentage amount to increase gas fees when retrying a transaction after it failed to mine.
|
|
264
|
-
* @default 10
|
|
265
|
-
*/
|
|
266
|
-
replacementFeePercentIncrease?: number;
|
|
267
|
-
/**
|
|
268
|
-
* Maximum number of fee increases to attempt.
|
|
269
|
-
* Seven increases of 10% is roughly 2x the initial fees.
|
|
270
|
-
* @default 7
|
|
271
|
-
*/
|
|
272
|
-
maxFeeIncreases?: number;
|
|
273
|
-
/**
|
|
274
|
-
* Additional builders to send bundles to through the Flashbots relay RPC (comma-separated).
|
|
275
|
-
* List of builders that the Flashbots RPC supports can be found here.
|
|
276
|
-
* @default flashbots
|
|
277
|
-
*/
|
|
278
|
-
flashbotsRelayBuilders?: string;
|
|
279
|
-
/**
|
|
280
|
-
* Authorization key to use with the Flashbots relay.
|
|
281
|
-
* See here for more info.
|
|
282
|
-
* @default None
|
|
283
|
-
*/
|
|
284
|
-
flashbotsRelayAuthKey?: string;
|
|
285
|
-
/**
|
|
286
|
-
* If using the bloxroute transaction sender on Polygon, this is the auth header to supply with the requests.
|
|
287
|
-
* @default None
|
|
288
|
-
*/
|
|
289
|
-
bloxrouteAuthHeader?: string;
|
|
290
|
-
/**
|
|
291
|
-
* If running multiple builder processes, this is the index offset to assign unique indexes to each bundle sender.
|
|
292
|
-
* @default 0
|
|
293
|
-
*/
|
|
294
|
-
indexOffset?: number;
|
|
295
|
-
};
|
|
296
|
-
};
|
|
297
|
-
/**
|
|
298
|
-
* Defines a Rundler instance.
|
|
299
|
-
*
|
|
300
|
-
* @example
|
|
301
|
-
* ```ts
|
|
302
|
-
* const instance = rundler({
|
|
303
|
-
* nodeHttp: 'http://localhost:8545',
|
|
304
|
-
* });
|
|
305
|
-
*
|
|
306
|
-
* await instance.start()
|
|
307
|
-
* // ...
|
|
308
|
-
* await instance.stop()
|
|
309
|
-
* ```
|
|
310
|
-
*/
|
|
311
|
-
export declare const rundler: import("../instance.js").DefineInstanceReturnType<{
|
|
312
|
-
args: {
|
|
313
|
-
/**
|
|
314
|
-
* The version of the entrypoint to use
|
|
315
|
-
*
|
|
316
|
-
* @default 0.6.0
|
|
317
|
-
*/
|
|
318
|
-
entryPointVersion?: "0.6.0" | "0.7.0" | undefined;
|
|
319
|
-
/**
|
|
320
|
-
* Network to look up a hardcoded chain spec.
|
|
321
|
-
* @default dev
|
|
322
|
-
*/
|
|
323
|
-
network?: string | undefined;
|
|
324
|
-
/**
|
|
325
|
-
* Path to a chain spec TOML file.
|
|
326
|
-
*/
|
|
327
|
-
chainSpec?: string | undefined;
|
|
328
|
-
/**
|
|
329
|
-
* EVM Node HTTP URL to use.
|
|
330
|
-
*
|
|
331
|
-
* @default http://localhost:8545
|
|
332
|
-
*/
|
|
333
|
-
nodeHttp?: string | undefined;
|
|
334
|
-
/**
|
|
335
|
-
* Maximum verification gas.
|
|
336
|
-
* @default 5000000
|
|
337
|
-
*/
|
|
338
|
-
maxVerificationGas?: number | undefined;
|
|
339
|
-
/**
|
|
340
|
-
* Maximum bundle gas.
|
|
341
|
-
* @default 25000000
|
|
342
|
-
*/
|
|
343
|
-
maxBundleGas?: number | undefined;
|
|
344
|
-
/**
|
|
345
|
-
* Minimum stake value.
|
|
346
|
-
* @default 1000000000000000000
|
|
347
|
-
*/
|
|
348
|
-
minStakeValue?: number | undefined;
|
|
349
|
-
/**
|
|
350
|
-
* Minimum unstake delay.
|
|
351
|
-
* @default 84600
|
|
352
|
-
*/
|
|
353
|
-
minUnstakeDelay?: number | undefined;
|
|
354
|
-
/**
|
|
355
|
-
* Number of blocks to search when calling eth_getUserOperationByHash.
|
|
356
|
-
* @default 100
|
|
357
|
-
*/
|
|
358
|
-
userOperationEventBlockDistance?: number | undefined;
|
|
359
|
-
/**
|
|
360
|
-
* Maximum gas for simulating handle operations.
|
|
361
|
-
* @default 20000000
|
|
362
|
-
*/
|
|
363
|
-
maxSimulateHandleOpsGas?: number | undefined;
|
|
364
|
-
/**
|
|
365
|
-
* The gas fee to use during verification estimation.
|
|
366
|
-
* @default 1000000000000 10K gwei
|
|
367
|
-
*/
|
|
368
|
-
verificationEstimationGasFee?: number | undefined;
|
|
369
|
-
/**
|
|
370
|
-
* Bundle transaction priority fee overhead over network value.
|
|
371
|
-
* @default 0
|
|
372
|
-
*/
|
|
373
|
-
bundlePriorityFeeOverheadPercent?: number | undefined;
|
|
374
|
-
/**
|
|
375
|
-
* Priority fee mode kind.
|
|
376
|
-
* Possible values are base_fee_percent and priority_fee_increase_percent.
|
|
377
|
-
* @default priority_fee_increase_percent
|
|
378
|
-
*/
|
|
379
|
-
priorityFeeModeKind?: "base_fee_percent" | "priority_fee_increase_percent" | undefined;
|
|
380
|
-
/**
|
|
381
|
-
* Priority fee mode value.
|
|
382
|
-
* @default 0
|
|
383
|
-
*/
|
|
384
|
-
priorityFeeModeValue?: number | undefined;
|
|
385
|
-
/**
|
|
386
|
-
* Percentage of the current network fees a user operation must have in order to be accepted into the mempool.
|
|
387
|
-
* @default 100
|
|
388
|
-
*/
|
|
389
|
-
baseFeeAcceptPercent?: number | undefined;
|
|
390
|
-
/**
|
|
391
|
-
* AWS region.
|
|
392
|
-
* @default us-east-1
|
|
393
|
-
*/
|
|
394
|
-
awsRegion?: string | undefined;
|
|
395
|
-
/**
|
|
396
|
-
* Interval at which the builder polls an RPC node for new blocks and mined transactions.
|
|
397
|
-
* @default 100
|
|
398
|
-
*/
|
|
399
|
-
ethPollIntervalMillis?: number | undefined;
|
|
400
|
-
/**
|
|
401
|
-
* Flag for unsafe bundling mode. When set Rundler will skip checking simulation rules (and any debug_traceCall).
|
|
402
|
-
*
|
|
403
|
-
* @default true
|
|
404
|
-
*/
|
|
405
|
-
unsafe?: boolean | undefined;
|
|
406
|
-
/**
|
|
407
|
-
* Path to the mempool configuration file.
|
|
408
|
-
* This path can either be a local file path or an S3 url.
|
|
409
|
-
*/
|
|
410
|
-
mempoolConfigPath?: string | undefined;
|
|
411
|
-
metrics?: {
|
|
412
|
-
/**
|
|
413
|
-
* Port to listen on for metrics requests.
|
|
414
|
-
* @default 8080
|
|
415
|
-
*/
|
|
416
|
-
port?: number | undefined;
|
|
417
|
-
/**
|
|
418
|
-
* Host to listen on for metrics requests.
|
|
419
|
-
* @default 0.0.0.0
|
|
420
|
-
*/
|
|
421
|
-
host?: string | undefined;
|
|
422
|
-
/**
|
|
423
|
-
* Tags for metrics in the format key1=value1,key2=value2,...
|
|
424
|
-
*/
|
|
425
|
-
tags?: string | undefined;
|
|
426
|
-
/**
|
|
427
|
-
* Sample interval to use for sampling metrics.
|
|
428
|
-
* @default 1000
|
|
429
|
-
*/
|
|
430
|
-
sampleIntervalMillis?: number | undefined;
|
|
431
|
-
} | undefined;
|
|
432
|
-
logging?: {
|
|
433
|
-
/**
|
|
434
|
-
* Log file. If not provided, logs will be written to stdout.
|
|
435
|
-
*/
|
|
436
|
-
file?: string | undefined;
|
|
437
|
-
/**
|
|
438
|
-
* If set, logs will be written in JSON format.
|
|
439
|
-
*/
|
|
440
|
-
json?: boolean | undefined;
|
|
441
|
-
} | undefined;
|
|
442
|
-
rpc?: {
|
|
443
|
-
/**
|
|
444
|
-
* Port to listen on for JSON-RPC requests.
|
|
445
|
-
* @default 3000
|
|
446
|
-
*/
|
|
447
|
-
port?: number | undefined;
|
|
448
|
-
/**
|
|
449
|
-
* Host to listen on for JSON-RPC requests.
|
|
450
|
-
* @default 127.0.0.1
|
|
451
|
-
*/
|
|
452
|
-
host?: string | undefined;
|
|
453
|
-
/**
|
|
454
|
-
* Which APIs to expose over the RPC interface.
|
|
455
|
-
* @default eth,rundler
|
|
456
|
-
*/
|
|
457
|
-
api?: string | undefined;
|
|
458
|
-
/**
|
|
459
|
-
* Timeout for RPC requests.
|
|
460
|
-
* @default 20
|
|
461
|
-
*/
|
|
462
|
-
timeoutSeconds?: number | undefined;
|
|
463
|
-
/**
|
|
464
|
-
* Maximum number of concurrent connections.
|
|
465
|
-
* @default 100
|
|
466
|
-
*/
|
|
467
|
-
maxConnections?: number | undefined;
|
|
468
|
-
} | undefined;
|
|
469
|
-
pool?: {
|
|
470
|
-
/**
|
|
471
|
-
* Maximum size in bytes for the pool.
|
|
472
|
-
* @default 500000000, 0.5 GB
|
|
473
|
-
*/
|
|
474
|
-
maxSizeInBytes?: number | undefined;
|
|
475
|
-
/**
|
|
476
|
-
* Maximum number of user operations for an unstaked sender.
|
|
477
|
-
* @default 4
|
|
478
|
-
*/
|
|
479
|
-
sameSenderMempoolCount?: number | undefined;
|
|
480
|
-
/**
|
|
481
|
-
* Minimum replacement fee increase percentage.
|
|
482
|
-
* @default 10
|
|
483
|
-
*/
|
|
484
|
-
minReplacementFeeIncreasePercentage?: number | undefined;
|
|
485
|
-
/**
|
|
486
|
-
* Path to a blocklist file.
|
|
487
|
-
* This path can either be a local file path or an S3 url.
|
|
488
|
-
*/
|
|
489
|
-
blocklistPath?: string | undefined;
|
|
490
|
-
/**
|
|
491
|
-
* Path to an allowlist file.
|
|
492
|
-
* This path can either be a local file path or an S3 url.
|
|
493
|
-
*/
|
|
494
|
-
allowlistPath?: string | undefined;
|
|
495
|
-
/**
|
|
496
|
-
* Size of the chain history.
|
|
497
|
-
*/
|
|
498
|
-
chainHistorySize?: number | undefined;
|
|
499
|
-
/**
|
|
500
|
-
* Boolean field that sets whether the pool server starts with paymaster tracking enabled.
|
|
501
|
-
* @default true
|
|
502
|
-
*/
|
|
503
|
-
paymasterTrackingEnabled?: boolean | undefined;
|
|
504
|
-
/**
|
|
505
|
-
* Length of the paymaster cache.
|
|
506
|
-
* @default 10_000
|
|
507
|
-
*/
|
|
508
|
-
paymasterCacheLength?: number | undefined;
|
|
509
|
-
/**
|
|
510
|
-
* Boolean field that sets whether the pool server starts with reputation tracking enabled.
|
|
511
|
-
* @default true
|
|
512
|
-
*/
|
|
513
|
-
reputationTrackingEnabled?: boolean | undefined;
|
|
514
|
-
/**
|
|
515
|
-
* The minimum number of blocks that a UO must stay in the mempool before it can be requested to be dropped by the user.
|
|
516
|
-
* @default 10
|
|
517
|
-
*/
|
|
518
|
-
dropMinNumBlocks?: number | undefined;
|
|
519
|
-
} | undefined;
|
|
520
|
-
builder?: {
|
|
521
|
-
/**
|
|
522
|
-
* Private key to use for signing transactions.
|
|
523
|
-
* If used with awsKmsKeyIds, then explicitly pass in `null` here.
|
|
524
|
-
*
|
|
525
|
-
* @default 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
|
|
526
|
-
*/
|
|
527
|
-
privateKey?: string | undefined;
|
|
528
|
-
/**
|
|
529
|
-
* AWS KMS key IDs to use for signing transactions (comma-separated).
|
|
530
|
-
* Only required if privateKey is not provided.
|
|
531
|
-
*/
|
|
532
|
-
awsKmsKeyIds?: string | undefined;
|
|
533
|
-
/**
|
|
534
|
-
* Redis URI to use for KMS leasing.
|
|
535
|
-
* Only required when awsKmsKeyIds are provided.
|
|
536
|
-
*
|
|
537
|
-
* @default ""
|
|
538
|
-
*/
|
|
539
|
-
redisUri?: string | undefined;
|
|
540
|
-
/**
|
|
541
|
-
* Redis lock TTL in milliseconds.
|
|
542
|
-
* Only required when awsKmsKeyIds are provided.
|
|
543
|
-
* @default 60000
|
|
544
|
-
*/
|
|
545
|
-
redisLockTtlMillis?: number | undefined;
|
|
546
|
-
/**
|
|
547
|
-
* Maximum number of ops to include in one bundle.
|
|
548
|
-
* @default 128
|
|
549
|
-
*/
|
|
550
|
-
maxBundleSize?: number | undefined;
|
|
551
|
-
/**
|
|
552
|
-
* If present, the URL of the ETH provider that will be used to send transactions.
|
|
553
|
-
* Defaults to the value of nodeHttp.
|
|
554
|
-
*/
|
|
555
|
-
submitUrl?: string | undefined;
|
|
556
|
-
/**
|
|
557
|
-
* Choice of what sender type to use for transaction submission.
|
|
558
|
-
* @default raw
|
|
559
|
-
* options: raw, conditional, flashbots, polygon_bloxroute
|
|
560
|
-
*/
|
|
561
|
-
sender?: "raw" | "conditional" | "flashbots" | "polygonBloxroute" | undefined;
|
|
562
|
-
/**
|
|
563
|
-
* After submitting a bundle transaction, the maximum number of blocks to wait for that transaction to mine before trying to resend with higher gas fees.
|
|
564
|
-
* @default 2
|
|
565
|
-
*/
|
|
566
|
-
maxBlocksToWaitForMine?: number | undefined;
|
|
567
|
-
/**
|
|
568
|
-
* Percentage amount to increase gas fees when retrying a transaction after it failed to mine.
|
|
569
|
-
* @default 10
|
|
570
|
-
*/
|
|
571
|
-
replacementFeePercentIncrease?: number | undefined;
|
|
572
|
-
/**
|
|
573
|
-
* Maximum number of fee increases to attempt.
|
|
574
|
-
* Seven increases of 10% is roughly 2x the initial fees.
|
|
575
|
-
* @default 7
|
|
576
|
-
*/
|
|
577
|
-
maxFeeIncreases?: number | undefined;
|
|
578
|
-
/**
|
|
579
|
-
* Additional builders to send bundles to through the Flashbots relay RPC (comma-separated).
|
|
580
|
-
* List of builders that the Flashbots RPC supports can be found here.
|
|
581
|
-
* @default flashbots
|
|
582
|
-
*/
|
|
583
|
-
flashbotsRelayBuilders?: string | undefined;
|
|
584
|
-
/**
|
|
585
|
-
* Authorization key to use with the Flashbots relay.
|
|
586
|
-
* See here for more info.
|
|
587
|
-
* @default None
|
|
588
|
-
*/
|
|
589
|
-
flashbotsRelayAuthKey?: string | undefined;
|
|
590
|
-
/**
|
|
591
|
-
* If using the bloxroute transaction sender on Polygon, this is the auth header to supply with the requests.
|
|
592
|
-
* @default None
|
|
593
|
-
*/
|
|
594
|
-
bloxrouteAuthHeader?: string | undefined;
|
|
595
|
-
/**
|
|
596
|
-
* If running multiple builder processes, this is the index offset to assign unique indexes to each bundle sender.
|
|
597
|
-
* @default 0
|
|
598
|
-
*/
|
|
599
|
-
indexOffset?: number | undefined;
|
|
600
|
-
} | undefined;
|
|
601
|
-
};
|
|
602
|
-
readonly process: import("../processes/execa.js").Process_internal;
|
|
603
|
-
}, RundlerParameters | undefined>;
|
|
604
|
-
//# sourceMappingURL=rundler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rundler.d.ts","sourceRoot":"","sources":["../../instances/rundler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import getPort from 'get-port';
|
|
2
|
-
import { defineInstance } from '../instance.js';
|
|
3
|
-
import { execa } from '../processes/execa.js';
|
|
4
|
-
import { toArgs } from '../utils.js';
|
|
5
|
-
/**
|
|
6
|
-
* Defines a Rundler instance.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```ts
|
|
10
|
-
* const instance = rundler({
|
|
11
|
-
* nodeHttp: 'http://localhost:8545',
|
|
12
|
-
* });
|
|
13
|
-
*
|
|
14
|
-
* await instance.start()
|
|
15
|
-
* // ...
|
|
16
|
-
* await instance.stop()
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
export const rundler = defineInstance((parameters) => {
|
|
20
|
-
const { binary = 'rundler', ...args } = (parameters ??
|
|
21
|
-
{});
|
|
22
|
-
const host = '127.0.0.1';
|
|
23
|
-
const name = 'rundler';
|
|
24
|
-
const process = execa({ name });
|
|
25
|
-
return {
|
|
26
|
-
_internal: {
|
|
27
|
-
args,
|
|
28
|
-
get process() {
|
|
29
|
-
return process._internal.process;
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
host,
|
|
33
|
-
port: args.rpc?.port ?? 3000,
|
|
34
|
-
name,
|
|
35
|
-
async start({ port = args.rpc?.port ?? 3000 }, options) {
|
|
36
|
-
const args_ = {
|
|
37
|
-
...args,
|
|
38
|
-
builder: {
|
|
39
|
-
...args.builder,
|
|
40
|
-
privateKey: args.builder?.privateKey ??
|
|
41
|
-
'0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
|
|
42
|
-
},
|
|
43
|
-
entryPointVersion: undefined,
|
|
44
|
-
maxVerificationGas: args.maxVerificationGas ?? 10000000,
|
|
45
|
-
network: args.network ?? 'dev',
|
|
46
|
-
nodeHttp: args.nodeHttp ?? 'http://localhost:8545',
|
|
47
|
-
metrics: {
|
|
48
|
-
...args.metrics,
|
|
49
|
-
port: await getPort(),
|
|
50
|
-
},
|
|
51
|
-
rpc: {
|
|
52
|
-
...args.rpc,
|
|
53
|
-
port,
|
|
54
|
-
},
|
|
55
|
-
unsafe: args.unsafe ?? true,
|
|
56
|
-
userOperationEventBlockDistance: args.userOperationEventBlockDistance ?? 100,
|
|
57
|
-
};
|
|
58
|
-
const entrypointArgs = (() => {
|
|
59
|
-
if (args.entryPointVersion === '0.6.0')
|
|
60
|
-
return ['--disable_entry_point_v0_7'];
|
|
61
|
-
return ['--disable_entry_point_v0_6'];
|
|
62
|
-
})();
|
|
63
|
-
return await process.start(($) => $(binary, ['node', ...toArgs(args_, { casing: 'snake' }), ...entrypointArgs], {
|
|
64
|
-
env: {
|
|
65
|
-
RUST_LOG: 'debug',
|
|
66
|
-
},
|
|
67
|
-
}), {
|
|
68
|
-
...options,
|
|
69
|
-
resolver({ process, reject, resolve }) {
|
|
70
|
-
process.stdout.on('data', (data) => {
|
|
71
|
-
const message = data.toString();
|
|
72
|
-
if (message.includes('Started RPC server'))
|
|
73
|
-
resolve();
|
|
74
|
-
});
|
|
75
|
-
process.stderr.on('data', (data) => {
|
|
76
|
-
reject(data.toString());
|
|
77
|
-
});
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
},
|
|
81
|
-
async stop() {
|
|
82
|
-
await process.stop();
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
});
|
|
86
|
-
//# sourceMappingURL=rundler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rundler.js","sourceRoot":"","sources":["../../instances/rundler.ts"],"names":[],"mappings":"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"}
|