@lidofinance/lido-csm-sdk 2.0.0-alpha.72 → 2.0.0-alpha.74

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.
Files changed (29) hide show
  1. package/dist/core-sdk/core-sdk.d.cts +27 -27
  2. package/dist/core-sdk/core-sdk.d.mts +27 -27
  3. package/dist/deposit-data-sdk/deposit-data-sdk.cjs +2 -1
  4. package/dist/deposit-data-sdk/deposit-data-sdk.cjs.map +1 -1
  5. package/dist/deposit-data-sdk/deposit-data-sdk.d.cts +1 -0
  6. package/dist/deposit-data-sdk/deposit-data-sdk.d.cts.map +1 -1
  7. package/dist/deposit-data-sdk/deposit-data-sdk.d.mts +1 -0
  8. package/dist/deposit-data-sdk/deposit-data-sdk.d.mts.map +1 -1
  9. package/dist/deposit-data-sdk/deposit-data-sdk.mjs +2 -1
  10. package/dist/deposit-data-sdk/deposit-data-sdk.mjs.map +1 -1
  11. package/dist/deposit-data-sdk/types.cjs.map +1 -1
  12. package/dist/deposit-data-sdk/types.d.cts +1 -0
  13. package/dist/deposit-data-sdk/types.d.cts.map +1 -1
  14. package/dist/deposit-data-sdk/types.d.mts +1 -0
  15. package/dist/deposit-data-sdk/types.d.mts.map +1 -1
  16. package/dist/deposit-data-sdk/types.mjs.map +1 -1
  17. package/dist/deposit-data-sdk/validator.cjs +1 -0
  18. package/dist/deposit-data-sdk/validator.cjs.map +1 -1
  19. package/dist/deposit-data-sdk/validator.mjs +1 -0
  20. package/dist/deposit-data-sdk/validator.mjs.map +1 -1
  21. package/dist/discovery-sdk/discovery-sdk.cjs +27 -7
  22. package/dist/discovery-sdk/discovery-sdk.cjs.map +1 -1
  23. package/dist/discovery-sdk/discovery-sdk.d.cts +3 -0
  24. package/dist/discovery-sdk/discovery-sdk.d.cts.map +1 -1
  25. package/dist/discovery-sdk/discovery-sdk.d.mts +3 -0
  26. package/dist/discovery-sdk/discovery-sdk.d.mts.map +1 -1
  27. package/dist/discovery-sdk/discovery-sdk.mjs +27 -7
  28. package/dist/discovery-sdk/discovery-sdk.mjs.map +1 -1
  29. package/package.json +1 -1
@@ -99,10 +99,10 @@ declare class CoreSDK extends CsmSDKCacheable {
99
99
  v: bigint;
100
100
  yParity?: undefined | undefined;
101
101
  value: bigint;
102
- from: Address;
103
- nonce: number;
104
102
  to: Address | null;
103
+ from: Address;
105
104
  gas: bigint;
105
+ nonce: number;
106
106
  blobVersionedHashes?: undefined | undefined;
107
107
  gasPrice: bigint;
108
108
  maxFeePerBlobGas?: undefined | undefined;
@@ -124,10 +124,10 @@ declare class CoreSDK extends CsmSDKCacheable {
124
124
  v: bigint;
125
125
  yParity: number;
126
126
  value: bigint;
127
- from: Address;
128
- nonce: number;
129
127
  to: Address | null;
128
+ from: Address;
130
129
  gas: bigint;
130
+ nonce: number;
131
131
  blobVersionedHashes?: undefined | undefined;
132
132
  gasPrice: bigint;
133
133
  maxFeePerBlobGas?: undefined | undefined;
@@ -149,10 +149,10 @@ declare class CoreSDK extends CsmSDKCacheable {
149
149
  v: bigint;
150
150
  yParity: number;
151
151
  value: bigint;
152
- from: Address;
153
- nonce: number;
154
152
  to: Address | null;
153
+ from: Address;
155
154
  gas: bigint;
155
+ nonce: number;
156
156
  blobVersionedHashes?: undefined | undefined;
157
157
  gasPrice?: undefined | undefined;
158
158
  maxFeePerBlobGas?: undefined | undefined;
@@ -174,10 +174,10 @@ declare class CoreSDK extends CsmSDKCacheable {
174
174
  v: bigint;
175
175
  yParity: number;
176
176
  value: bigint;
177
- from: Address;
178
- nonce: number;
179
177
  to: Address | null;
178
+ from: Address;
180
179
  gas: bigint;
180
+ nonce: number;
181
181
  blobVersionedHashes: readonly _$viem.Hex[];
182
182
  gasPrice?: undefined | undefined;
183
183
  maxFeePerBlobGas: bigint;
@@ -199,10 +199,10 @@ declare class CoreSDK extends CsmSDKCacheable {
199
199
  v: bigint;
200
200
  yParity: number;
201
201
  value: bigint;
202
- from: Address;
203
- nonce: number;
204
202
  to: Address | null;
203
+ from: Address;
205
204
  gas: bigint;
205
+ nonce: number;
206
206
  blobVersionedHashes?: undefined | undefined;
207
207
  gasPrice?: undefined | undefined;
208
208
  maxFeePerBlobGas?: undefined | undefined;
@@ -250,10 +250,10 @@ declare class CoreSDK extends CsmSDKCacheable {
250
250
  v: bigint;
251
251
  yParity?: undefined | undefined;
252
252
  value: bigint;
253
- from: Address;
254
- nonce: number;
255
253
  to: Address | null;
254
+ from: Address;
256
255
  gas: bigint;
256
+ nonce: number;
257
257
  blobVersionedHashes?: undefined | undefined;
258
258
  gasPrice: bigint;
259
259
  maxFeePerBlobGas?: undefined | undefined;
@@ -275,10 +275,10 @@ declare class CoreSDK extends CsmSDKCacheable {
275
275
  v: bigint;
276
276
  yParity: number;
277
277
  value: bigint;
278
- from: Address;
279
- nonce: number;
280
278
  to: Address | null;
279
+ from: Address;
281
280
  gas: bigint;
281
+ nonce: number;
282
282
  blobVersionedHashes?: undefined | undefined;
283
283
  gasPrice: bigint;
284
284
  maxFeePerBlobGas?: undefined | undefined;
@@ -300,10 +300,10 @@ declare class CoreSDK extends CsmSDKCacheable {
300
300
  v: bigint;
301
301
  yParity: number;
302
302
  value: bigint;
303
- from: Address;
304
- nonce: number;
305
303
  to: Address | null;
304
+ from: Address;
306
305
  gas: bigint;
306
+ nonce: number;
307
307
  blobVersionedHashes?: undefined | undefined;
308
308
  gasPrice?: undefined | undefined;
309
309
  maxFeePerBlobGas?: undefined | undefined;
@@ -325,10 +325,10 @@ declare class CoreSDK extends CsmSDKCacheable {
325
325
  v: bigint;
326
326
  yParity: number;
327
327
  value: bigint;
328
- from: Address;
329
- nonce: number;
330
328
  to: Address | null;
329
+ from: Address;
331
330
  gas: bigint;
331
+ nonce: number;
332
332
  blobVersionedHashes: readonly _$viem.Hex[];
333
333
  gasPrice?: undefined | undefined;
334
334
  maxFeePerBlobGas: bigint;
@@ -350,10 +350,10 @@ declare class CoreSDK extends CsmSDKCacheable {
350
350
  v: bigint;
351
351
  yParity: number;
352
352
  value: bigint;
353
- from: Address;
354
- nonce: number;
355
353
  to: Address | null;
354
+ from: Address;
356
355
  gas: bigint;
356
+ nonce: number;
357
357
  blobVersionedHashes?: undefined | undefined;
358
358
  gasPrice?: undefined | undefined;
359
359
  maxFeePerBlobGas?: undefined | undefined;
@@ -3624,7 +3624,7 @@ declare class CoreSDK extends CsmSDKCacheable {
3624
3624
  authorizationList: _$viem.TransactionSerializableEIP7702["authorizationList"];
3625
3625
  } ? "eip7702" : never) | (request["type"] extends string | undefined ? Extract<request["type"], string> : never)>) ? T_12 extends "eip7702" ? _$viem.TransactionRequestEIP7702 : never : never : never)>> & {
3626
3626
  chainId?: number | undefined;
3627
- }, (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "nonce" | "gas" | "blobVersionedHashes" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "nonce" | "gas" | "blobVersionedHashes" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxFeePerGas" | "maxPriorityFeePerGas" : T_13 : never : never> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) & {
3627
+ }, (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "gas" | "nonce" | "blobVersionedHashes" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "gas" | "nonce" | "blobVersionedHashes" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxFeePerGas" | "maxPriorityFeePerGas" : T_13 : never : never> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) & {
3628
3628
  _capabilities?: {
3629
3629
  [x: string]: any;
3630
3630
  } | undefined;
@@ -3635,7 +3635,7 @@ declare class CoreSDK extends CsmSDKCacheable {
3635
3635
  simulate: <const calls extends readonly unknown[]>(args: _$viem.SimulateBlocksParameters<calls>) => Promise<_$viem.SimulateBlocksReturnType<calls>>;
3636
3636
  simulateBlocks: <const calls extends readonly unknown[]>(args: _$viem.SimulateBlocksParameters<calls>) => Promise<_$viem.SimulateBlocksReturnType<calls>>;
3637
3637
  simulateCalls: <const calls extends readonly unknown[]>(args: _$viem.SimulateCallsParameters<calls>) => Promise<_$viem.SimulateCallsReturnType<calls>>;
3638
- simulateContract: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "payable" | "nonpayable">, const args_1 extends _$viem.ContractFunctionArgs<abi, "payable" | "nonpayable", functionName>, chainOverride extends Chain | undefined, accountOverride extends _$viem.Account | Address | undefined = undefined>(args: _$viem.SimulateContractParameters<abi, functionName, args_1, Chain | undefined, chainOverride, accountOverride>) => Promise<_$viem.SimulateContractReturnType<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride, accountOverride>>;
3638
+ simulateContract: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "nonpayable" | "payable">, const args_1 extends _$viem.ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends Chain | undefined, accountOverride extends _$viem.Account | Address | undefined = undefined>(args: _$viem.SimulateContractParameters<abi, functionName, args_1, Chain | undefined, chainOverride, accountOverride>) => Promise<_$viem.SimulateContractReturnType<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride, accountOverride>>;
3639
3639
  verifyHash: (args: _$viem.VerifyHashActionParameters) => Promise<_$viem.VerifyHashActionReturnType>;
3640
3640
  verifyMessage: (args: _$viem.VerifyMessageActionParameters) => Promise<_$viem.VerifyMessageActionReturnType>;
3641
3641
  verifySiweMessage: (args: {
@@ -6955,7 +6955,7 @@ declare class CoreSDK extends CsmSDKCacheable {
6955
6955
  authorizationList: _$viem.TransactionSerializableEIP7702["authorizationList"];
6956
6956
  } ? "eip7702" : never) | (request["type"] extends string | undefined ? Extract<request["type"], string> : never)>) ? T_12 extends "eip7702" ? _$viem.TransactionRequestEIP7702 : never : never : never)>> & {
6957
6957
  chainId?: number | undefined;
6958
- }, (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "nonce" | "gas" | "blobVersionedHashes" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "nonce" | "gas" | "blobVersionedHashes" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxFeePerGas" | "maxPriorityFeePerGas" : T_13 : never : never> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) & {
6958
+ }, (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "gas" | "nonce" | "blobVersionedHashes" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "gas" | "nonce" | "blobVersionedHashes" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxFeePerGas" | "maxPriorityFeePerGas" : T_13 : never : never> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) & {
6959
6959
  _capabilities?: {
6960
6960
  [x: string]: any;
6961
6961
  } | undefined;
@@ -7888,7 +7888,6 @@ declare class CoreSDK extends CsmSDKCacheable {
7888
7888
  [x: `address[${string}]`]: undefined;
7889
7889
  [x: `bool[${string}]`]: undefined;
7890
7890
  [x: `bytes[${string}]`]: undefined;
7891
- [x: `bytes10[${string}]`]: undefined;
7892
7891
  [x: `bytes1[${string}]`]: undefined;
7893
7892
  [x: `bytes2[${string}]`]: undefined;
7894
7893
  [x: `bytes3[${string}]`]: undefined;
@@ -7898,6 +7897,7 @@ declare class CoreSDK extends CsmSDKCacheable {
7898
7897
  [x: `bytes7[${string}]`]: undefined;
7899
7898
  [x: `bytes8[${string}]`]: undefined;
7900
7899
  [x: `bytes9[${string}]`]: undefined;
7900
+ [x: `bytes10[${string}]`]: undefined;
7901
7901
  [x: `bytes11[${string}]`]: undefined;
7902
7902
  [x: `bytes12[${string}]`]: undefined;
7903
7903
  [x: `bytes13[${string}]`]: undefined;
@@ -7990,7 +7990,6 @@ declare class CoreSDK extends CsmSDKCacheable {
7990
7990
  address?: undefined;
7991
7991
  bool?: undefined;
7992
7992
  bytes?: undefined;
7993
- bytes10?: undefined;
7994
7993
  bytes1?: undefined;
7995
7994
  bytes2?: undefined;
7996
7995
  bytes3?: undefined;
@@ -8000,6 +7999,7 @@ declare class CoreSDK extends CsmSDKCacheable {
8000
7999
  bytes7?: undefined;
8001
8000
  bytes8?: undefined;
8002
8001
  bytes9?: undefined;
8002
+ bytes10?: undefined;
8003
8003
  bytes11?: undefined;
8004
8004
  bytes12?: undefined;
8005
8005
  bytes13?: undefined;
@@ -8092,8 +8092,8 @@ declare class CoreSDK extends CsmSDKCacheable {
8092
8092
  switchChain: (args: _$viem.SwitchChainParameters) => Promise<void>;
8093
8093
  waitForCallsStatus: (parameters: _$viem.WaitForCallsStatusParameters) => Promise<_$viem.WaitForCallsStatusReturnType>;
8094
8094
  watchAsset: (args: _$viem.WatchAssetParameters) => Promise<_$viem.WatchAssetReturnType>;
8095
- writeContract: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "payable" | "nonpayable">, args_1 extends _$viem.ContractFunctionArgs<abi, "payable" | "nonpayable", functionName>, chainOverride extends Chain | undefined = undefined>(args: _$viem.WriteContractParameters<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride>) => Promise<_$viem.WriteContractReturnType>;
8096
- writeContractSync: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "payable" | "nonpayable">, args_1 extends _$viem.ContractFunctionArgs<abi, "payable" | "nonpayable", functionName>, chainOverride extends Chain | undefined = undefined>(args: _$viem.WriteContractSyncParameters<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride>) => Promise<_$viem.WriteContractSyncReturnType>;
8095
+ writeContract: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "nonpayable" | "payable">, args_1 extends _$viem.ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends Chain | undefined = undefined>(args: _$viem.WriteContractParameters<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride>) => Promise<_$viem.WriteContractReturnType>;
8096
+ writeContractSync: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "nonpayable" | "payable">, args_1 extends _$viem.ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends Chain | undefined = undefined>(args: _$viem.WriteContractSyncParameters<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride>) => Promise<_$viem.WriteContractSyncReturnType>;
8097
8097
  extend: <const client extends {
8098
8098
  [x: string]: unknown;
8099
8099
  account?: undefined;
@@ -99,10 +99,10 @@ declare class CoreSDK extends CsmSDKCacheable {
99
99
  v: bigint;
100
100
  yParity?: undefined | undefined;
101
101
  value: bigint;
102
- from: Address;
103
- nonce: number;
104
102
  to: Address | null;
103
+ from: Address;
105
104
  gas: bigint;
105
+ nonce: number;
106
106
  blobVersionedHashes?: undefined | undefined;
107
107
  gasPrice: bigint;
108
108
  maxFeePerBlobGas?: undefined | undefined;
@@ -124,10 +124,10 @@ declare class CoreSDK extends CsmSDKCacheable {
124
124
  v: bigint;
125
125
  yParity: number;
126
126
  value: bigint;
127
- from: Address;
128
- nonce: number;
129
127
  to: Address | null;
128
+ from: Address;
130
129
  gas: bigint;
130
+ nonce: number;
131
131
  blobVersionedHashes?: undefined | undefined;
132
132
  gasPrice: bigint;
133
133
  maxFeePerBlobGas?: undefined | undefined;
@@ -149,10 +149,10 @@ declare class CoreSDK extends CsmSDKCacheable {
149
149
  v: bigint;
150
150
  yParity: number;
151
151
  value: bigint;
152
- from: Address;
153
- nonce: number;
154
152
  to: Address | null;
153
+ from: Address;
155
154
  gas: bigint;
155
+ nonce: number;
156
156
  blobVersionedHashes?: undefined | undefined;
157
157
  gasPrice?: undefined | undefined;
158
158
  maxFeePerBlobGas?: undefined | undefined;
@@ -174,10 +174,10 @@ declare class CoreSDK extends CsmSDKCacheable {
174
174
  v: bigint;
175
175
  yParity: number;
176
176
  value: bigint;
177
- from: Address;
178
- nonce: number;
179
177
  to: Address | null;
178
+ from: Address;
180
179
  gas: bigint;
180
+ nonce: number;
181
181
  blobVersionedHashes: readonly _$viem.Hex[];
182
182
  gasPrice?: undefined | undefined;
183
183
  maxFeePerBlobGas: bigint;
@@ -199,10 +199,10 @@ declare class CoreSDK extends CsmSDKCacheable {
199
199
  v: bigint;
200
200
  yParity: number;
201
201
  value: bigint;
202
- from: Address;
203
- nonce: number;
204
202
  to: Address | null;
203
+ from: Address;
205
204
  gas: bigint;
205
+ nonce: number;
206
206
  blobVersionedHashes?: undefined | undefined;
207
207
  gasPrice?: undefined | undefined;
208
208
  maxFeePerBlobGas?: undefined | undefined;
@@ -250,10 +250,10 @@ declare class CoreSDK extends CsmSDKCacheable {
250
250
  v: bigint;
251
251
  yParity?: undefined | undefined;
252
252
  value: bigint;
253
- from: Address;
254
- nonce: number;
255
253
  to: Address | null;
254
+ from: Address;
256
255
  gas: bigint;
256
+ nonce: number;
257
257
  blobVersionedHashes?: undefined | undefined;
258
258
  gasPrice: bigint;
259
259
  maxFeePerBlobGas?: undefined | undefined;
@@ -275,10 +275,10 @@ declare class CoreSDK extends CsmSDKCacheable {
275
275
  v: bigint;
276
276
  yParity: number;
277
277
  value: bigint;
278
- from: Address;
279
- nonce: number;
280
278
  to: Address | null;
279
+ from: Address;
281
280
  gas: bigint;
281
+ nonce: number;
282
282
  blobVersionedHashes?: undefined | undefined;
283
283
  gasPrice: bigint;
284
284
  maxFeePerBlobGas?: undefined | undefined;
@@ -300,10 +300,10 @@ declare class CoreSDK extends CsmSDKCacheable {
300
300
  v: bigint;
301
301
  yParity: number;
302
302
  value: bigint;
303
- from: Address;
304
- nonce: number;
305
303
  to: Address | null;
304
+ from: Address;
306
305
  gas: bigint;
306
+ nonce: number;
307
307
  blobVersionedHashes?: undefined | undefined;
308
308
  gasPrice?: undefined | undefined;
309
309
  maxFeePerBlobGas?: undefined | undefined;
@@ -325,10 +325,10 @@ declare class CoreSDK extends CsmSDKCacheable {
325
325
  v: bigint;
326
326
  yParity: number;
327
327
  value: bigint;
328
- from: Address;
329
- nonce: number;
330
328
  to: Address | null;
329
+ from: Address;
331
330
  gas: bigint;
331
+ nonce: number;
332
332
  blobVersionedHashes: readonly _$viem.Hex[];
333
333
  gasPrice?: undefined | undefined;
334
334
  maxFeePerBlobGas: bigint;
@@ -350,10 +350,10 @@ declare class CoreSDK extends CsmSDKCacheable {
350
350
  v: bigint;
351
351
  yParity: number;
352
352
  value: bigint;
353
- from: Address;
354
- nonce: number;
355
353
  to: Address | null;
354
+ from: Address;
356
355
  gas: bigint;
356
+ nonce: number;
357
357
  blobVersionedHashes?: undefined | undefined;
358
358
  gasPrice?: undefined | undefined;
359
359
  maxFeePerBlobGas?: undefined | undefined;
@@ -3624,7 +3624,7 @@ declare class CoreSDK extends CsmSDKCacheable {
3624
3624
  authorizationList: _$viem.TransactionSerializableEIP7702["authorizationList"];
3625
3625
  } ? "eip7702" : never) | (request["type"] extends string | undefined ? Extract<request["type"], string> : never)>) ? T_12 extends "eip7702" ? _$viem.TransactionRequestEIP7702 : never : never : never)>> & {
3626
3626
  chainId?: number | undefined;
3627
- }, (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "nonce" | "gas" | "blobVersionedHashes" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "nonce" | "gas" | "blobVersionedHashes" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxFeePerGas" | "maxPriorityFeePerGas" : T_13 : never : never> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) & {
3627
+ }, (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "gas" | "nonce" | "blobVersionedHashes" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "gas" | "nonce" | "blobVersionedHashes" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxFeePerGas" | "maxPriorityFeePerGas" : T_13 : never : never> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) & {
3628
3628
  _capabilities?: {
3629
3629
  [x: string]: any;
3630
3630
  } | undefined;
@@ -3635,7 +3635,7 @@ declare class CoreSDK extends CsmSDKCacheable {
3635
3635
  simulate: <const calls extends readonly unknown[]>(args: _$viem.SimulateBlocksParameters<calls>) => Promise<_$viem.SimulateBlocksReturnType<calls>>;
3636
3636
  simulateBlocks: <const calls extends readonly unknown[]>(args: _$viem.SimulateBlocksParameters<calls>) => Promise<_$viem.SimulateBlocksReturnType<calls>>;
3637
3637
  simulateCalls: <const calls extends readonly unknown[]>(args: _$viem.SimulateCallsParameters<calls>) => Promise<_$viem.SimulateCallsReturnType<calls>>;
3638
- simulateContract: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "payable" | "nonpayable">, const args_1 extends _$viem.ContractFunctionArgs<abi, "payable" | "nonpayable", functionName>, chainOverride extends Chain | undefined, accountOverride extends _$viem.Account | Address | undefined = undefined>(args: _$viem.SimulateContractParameters<abi, functionName, args_1, Chain | undefined, chainOverride, accountOverride>) => Promise<_$viem.SimulateContractReturnType<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride, accountOverride>>;
3638
+ simulateContract: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "nonpayable" | "payable">, const args_1 extends _$viem.ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends Chain | undefined, accountOverride extends _$viem.Account | Address | undefined = undefined>(args: _$viem.SimulateContractParameters<abi, functionName, args_1, Chain | undefined, chainOverride, accountOverride>) => Promise<_$viem.SimulateContractReturnType<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride, accountOverride>>;
3639
3639
  verifyHash: (args: _$viem.VerifyHashActionParameters) => Promise<_$viem.VerifyHashActionReturnType>;
3640
3640
  verifyMessage: (args: _$viem.VerifyMessageActionParameters) => Promise<_$viem.VerifyMessageActionReturnType>;
3641
3641
  verifySiweMessage: (args: {
@@ -6955,7 +6955,7 @@ declare class CoreSDK extends CsmSDKCacheable {
6955
6955
  authorizationList: _$viem.TransactionSerializableEIP7702["authorizationList"];
6956
6956
  } ? "eip7702" : never) | (request["type"] extends string | undefined ? Extract<request["type"], string> : never)>) ? T_12 extends "eip7702" ? _$viem.TransactionRequestEIP7702 : never : never : never)>> & {
6957
6957
  chainId?: number | undefined;
6958
- }, (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "nonce" | "gas" | "blobVersionedHashes" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "nonce" | "gas" | "blobVersionedHashes" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxFeePerGas" | "maxPriorityFeePerGas" : T_13 : never : never> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) & {
6958
+ }, (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "gas" | "nonce" | "blobVersionedHashes" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly _$viem.PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "chainId" | "gas" | "nonce" | "blobVersionedHashes" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxFeePerGas" | "maxPriorityFeePerGas" : T_13 : never : never> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) & {
6959
6959
  _capabilities?: {
6960
6960
  [x: string]: any;
6961
6961
  } | undefined;
@@ -7888,7 +7888,6 @@ declare class CoreSDK extends CsmSDKCacheable {
7888
7888
  [x: `address[${string}]`]: undefined;
7889
7889
  [x: `bool[${string}]`]: undefined;
7890
7890
  [x: `bytes[${string}]`]: undefined;
7891
- [x: `bytes10[${string}]`]: undefined;
7892
7891
  [x: `bytes1[${string}]`]: undefined;
7893
7892
  [x: `bytes2[${string}]`]: undefined;
7894
7893
  [x: `bytes3[${string}]`]: undefined;
@@ -7898,6 +7897,7 @@ declare class CoreSDK extends CsmSDKCacheable {
7898
7897
  [x: `bytes7[${string}]`]: undefined;
7899
7898
  [x: `bytes8[${string}]`]: undefined;
7900
7899
  [x: `bytes9[${string}]`]: undefined;
7900
+ [x: `bytes10[${string}]`]: undefined;
7901
7901
  [x: `bytes11[${string}]`]: undefined;
7902
7902
  [x: `bytes12[${string}]`]: undefined;
7903
7903
  [x: `bytes13[${string}]`]: undefined;
@@ -7990,7 +7990,6 @@ declare class CoreSDK extends CsmSDKCacheable {
7990
7990
  address?: undefined;
7991
7991
  bool?: undefined;
7992
7992
  bytes?: undefined;
7993
- bytes10?: undefined;
7994
7993
  bytes1?: undefined;
7995
7994
  bytes2?: undefined;
7996
7995
  bytes3?: undefined;
@@ -8000,6 +7999,7 @@ declare class CoreSDK extends CsmSDKCacheable {
8000
7999
  bytes7?: undefined;
8001
8000
  bytes8?: undefined;
8002
8001
  bytes9?: undefined;
8002
+ bytes10?: undefined;
8003
8003
  bytes11?: undefined;
8004
8004
  bytes12?: undefined;
8005
8005
  bytes13?: undefined;
@@ -8092,8 +8092,8 @@ declare class CoreSDK extends CsmSDKCacheable {
8092
8092
  switchChain: (args: _$viem.SwitchChainParameters) => Promise<void>;
8093
8093
  waitForCallsStatus: (parameters: _$viem.WaitForCallsStatusParameters) => Promise<_$viem.WaitForCallsStatusReturnType>;
8094
8094
  watchAsset: (args: _$viem.WatchAssetParameters) => Promise<_$viem.WatchAssetReturnType>;
8095
- writeContract: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "payable" | "nonpayable">, args_1 extends _$viem.ContractFunctionArgs<abi, "payable" | "nonpayable", functionName>, chainOverride extends Chain | undefined = undefined>(args: _$viem.WriteContractParameters<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride>) => Promise<_$viem.WriteContractReturnType>;
8096
- writeContractSync: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "payable" | "nonpayable">, args_1 extends _$viem.ContractFunctionArgs<abi, "payable" | "nonpayable", functionName>, chainOverride extends Chain | undefined = undefined>(args: _$viem.WriteContractSyncParameters<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride>) => Promise<_$viem.WriteContractSyncReturnType>;
8095
+ writeContract: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "nonpayable" | "payable">, args_1 extends _$viem.ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends Chain | undefined = undefined>(args: _$viem.WriteContractParameters<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride>) => Promise<_$viem.WriteContractReturnType>;
8096
+ writeContractSync: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "nonpayable" | "payable">, args_1 extends _$viem.ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends Chain | undefined = undefined>(args: _$viem.WriteContractSyncParameters<abi, functionName, args_1, Chain | undefined, _$viem.Account | undefined, chainOverride>) => Promise<_$viem.WriteContractSyncReturnType>;
8097
8097
  extend: <const client extends {
8098
8098
  [x: string]: unknown;
8099
8099
  account?: undefined;
@@ -119,7 +119,8 @@ var DepositDataSDK = class extends (_a = require_csm_sdk_module.CsmSDKModule, _p
119
119
  chainId,
120
120
  withdrawalCredentials: wc,
121
121
  wcPrefix,
122
- currentBlockNumber: Number(blockNumber)
122
+ currentBlockNumber: Number(blockNumber),
123
+ skipSignature: options?.skipSignature
123
124
  });
124
125
  if (errors.length) return [...errors];
125
126
  const pubkeys = depositData.map((data) => data.pubkey);
@@ -1 +1 @@
1
- {"version":3,"file":"deposit-data-sdk.cjs","names":[],"sources":["../../src/deposit-data-sdk/deposit-data-sdk.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { CsmSDKModule } from '../common/class-primitives/csm-sdk-module';\nimport { Cache, ErrorHandler, Logger } from '../common/decorators/index';\nimport { CACHE_MID, CONTRACT_NAMES } from '../common/index';\nimport {\n compareLowercase,\n isHexadecimalString,\n toHexString,\n} from '../common/utils/index';\nimport { KeysCacheSDK } from '../keys-cache-sdk/keys-cache-sdk';\nimport { KeyCacheStatus } from '../keys-cache-sdk/types';\nimport { KeysWithStatusSDK } from '../keys-with-status-sdk/keys-with-status-sdk';\nimport { ModuleSDK } from '../module-sdk/module-sdk';\nimport { PUBKEY_LENGTH } from './constants';\nimport { parseDepositData, removeKey } from './parser';\nimport {\n DepositData,\n ParseResult,\n RemoveKeyResult,\n ValidationError,\n ValidationErrorCode,\n} from './types';\nimport { validateDepositData } from './validator';\n\nexport class DepositDataSDK extends CsmSDKModule<{\n module: ModuleSDK;\n keysWithStatus?: KeysWithStatusSDK;\n keysCache?: KeysCacheSDK;\n}> {\n @Logger('Utils:')\n public parseDepositData(json: string): ParseResult {\n return parseDepositData(json);\n }\n\n @Logger('Utils:')\n public removeKey(json: string, index: number): RemoveKeyResult {\n return removeKey(json, index);\n }\n\n @Logger('Utils:')\n private async getWcPrefix(): Promise<string> {\n const wcType = await this.bus.module.getWithdrawalCredentialsType();\n return wcType.toString(16).padStart(2, '0').padEnd(24, '0');\n }\n\n @Logger('Utils:')\n public async validateDepositData(\n depositData: DepositData[],\n options?: { skipPending?: boolean },\n ): Promise<ValidationError[]> {\n const chainId = this.core.chainId;\n const wc = this.core.getContractAddress(CONTRACT_NAMES.withdrawalVault);\n const [blockNumber, wcPrefix] = await Promise.all([\n this.core.publicClient.getBlockNumber(),\n this.getWcPrefix(),\n ]);\n\n const errors = await validateDepositData(depositData, {\n chainId,\n withdrawalCredentials: wc,\n wcPrefix,\n currentBlockNumber: Number(blockNumber),\n });\n\n if (errors.length) {\n return [...errors];\n }\n\n const pubkeys = depositData.map((data) => data.pubkey);\n\n const duplicateErrors = this.checkCachedKeys(pubkeys, options);\n const uploadedDuplicateErrors = await this.checkUploadedKeys(pubkeys);\n const clErrors = await this.checkClKeys(pubkeys.map(toHexString));\n\n return [\n ...errors,\n ...duplicateErrors,\n ...uploadedDuplicateErrors,\n ...clErrors,\n ];\n }\n\n @Logger('API:')\n @ErrorHandler()\n @Cache(CACHE_MID)\n public async checkUploadedKeys(pubkeys: Hex[]): Promise<ValidationError[]> {\n const keys = await this.bus.keysWithStatus?.getApiKeys(pubkeys);\n const errors: ValidationError[] = [];\n\n if (!keys) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const isUploaded = keys.find((key) => compareLowercase(key.key, pubkey));\n\n if (isUploaded) {\n errors.push({\n index,\n message: `pubkey was previously submitted`,\n field: 'pubkey',\n code: ValidationErrorCode.PREVIOUSLY_SUBMITTED,\n });\n }\n });\n\n return errors;\n }\n\n @Logger('Utils:')\n @ErrorHandler()\n public checkCachedKeys(\n pubkeys: Hex[],\n options?: { skipPending?: boolean },\n ): ValidationError[] {\n const keysCache = this.bus.keysCache;\n const errors: ValidationError[] = [];\n\n if (!keysCache) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const status = keysCache.getCacheStatus(pubkey);\n if (!status) return;\n if (status === KeyCacheStatus.PENDING && options?.skipPending) return;\n\n errors.push({\n index,\n field: 'pubkey',\n message: `pubkey already submitted`,\n code:\n status === KeyCacheStatus.CONFIRMED\n ? ValidationErrorCode.CACHED_PUBKEY_CONFIRMED\n : ValidationErrorCode.CACHED_PUBKEY_PENDING,\n });\n });\n\n return errors;\n }\n\n @Logger('API:')\n @ErrorHandler()\n public async checkClKeys(pubkeys: Hex[]): Promise<ValidationError[]> {\n const validPubkeys = pubkeys.filter((p) =>\n isHexadecimalString(p, PUBKEY_LENGTH),\n );\n const clKeys = await this.bus.keysWithStatus?.getClKeys(validPubkeys);\n const errors: ValidationError[] = [];\n\n if (!clKeys) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const exists = clKeys.find((k) => compareLowercase(k.pubkey, pubkey));\n if (exists) {\n errors.push({\n index,\n message: `pubkey already exists as a validator on CL`,\n field: 'pubkey',\n code: ValidationErrorCode.VALIDATOR_EXISTS,\n });\n }\n });\n\n return errors;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"deposit-data-sdk.cjs","names":[],"sources":["../../src/deposit-data-sdk/deposit-data-sdk.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { CsmSDKModule } from '../common/class-primitives/csm-sdk-module';\nimport { Cache, ErrorHandler, Logger } from '../common/decorators/index';\nimport { CACHE_MID, CONTRACT_NAMES } from '../common/index';\nimport {\n compareLowercase,\n isHexadecimalString,\n toHexString,\n} from '../common/utils/index';\nimport { KeysCacheSDK } from '../keys-cache-sdk/keys-cache-sdk';\nimport { KeyCacheStatus } from '../keys-cache-sdk/types';\nimport { KeysWithStatusSDK } from '../keys-with-status-sdk/keys-with-status-sdk';\nimport { ModuleSDK } from '../module-sdk/module-sdk';\nimport { PUBKEY_LENGTH } from './constants';\nimport { parseDepositData, removeKey } from './parser';\nimport {\n DepositData,\n ParseResult,\n RemoveKeyResult,\n ValidationError,\n ValidationErrorCode,\n} from './types';\nimport { validateDepositData } from './validator';\n\nexport class DepositDataSDK extends CsmSDKModule<{\n module: ModuleSDK;\n keysWithStatus?: KeysWithStatusSDK;\n keysCache?: KeysCacheSDK;\n}> {\n @Logger('Utils:')\n public parseDepositData(json: string): ParseResult {\n return parseDepositData(json);\n }\n\n @Logger('Utils:')\n public removeKey(json: string, index: number): RemoveKeyResult {\n return removeKey(json, index);\n }\n\n @Logger('Utils:')\n private async getWcPrefix(): Promise<string> {\n const wcType = await this.bus.module.getWithdrawalCredentialsType();\n return wcType.toString(16).padStart(2, '0').padEnd(24, '0');\n }\n\n @Logger('Utils:')\n public async validateDepositData(\n depositData: DepositData[],\n options?: { skipPending?: boolean; skipSignature?: boolean },\n ): Promise<ValidationError[]> {\n const chainId = this.core.chainId;\n const wc = this.core.getContractAddress(CONTRACT_NAMES.withdrawalVault);\n const [blockNumber, wcPrefix] = await Promise.all([\n this.core.publicClient.getBlockNumber(),\n this.getWcPrefix(),\n ]);\n\n const errors = await validateDepositData(depositData, {\n chainId,\n withdrawalCredentials: wc,\n wcPrefix,\n currentBlockNumber: Number(blockNumber),\n skipSignature: options?.skipSignature,\n });\n\n if (errors.length) {\n return [...errors];\n }\n\n const pubkeys = depositData.map((data) => data.pubkey);\n\n const duplicateErrors = this.checkCachedKeys(pubkeys, options);\n const uploadedDuplicateErrors = await this.checkUploadedKeys(pubkeys);\n const clErrors = await this.checkClKeys(pubkeys.map(toHexString));\n\n return [\n ...errors,\n ...duplicateErrors,\n ...uploadedDuplicateErrors,\n ...clErrors,\n ];\n }\n\n @Logger('API:')\n @ErrorHandler()\n @Cache(CACHE_MID)\n public async checkUploadedKeys(pubkeys: Hex[]): Promise<ValidationError[]> {\n const keys = await this.bus.keysWithStatus?.getApiKeys(pubkeys);\n const errors: ValidationError[] = [];\n\n if (!keys) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const isUploaded = keys.find((key) => compareLowercase(key.key, pubkey));\n\n if (isUploaded) {\n errors.push({\n index,\n message: `pubkey was previously submitted`,\n field: 'pubkey',\n code: ValidationErrorCode.PREVIOUSLY_SUBMITTED,\n });\n }\n });\n\n return errors;\n }\n\n @Logger('Utils:')\n @ErrorHandler()\n public checkCachedKeys(\n pubkeys: Hex[],\n options?: { skipPending?: boolean },\n ): ValidationError[] {\n const keysCache = this.bus.keysCache;\n const errors: ValidationError[] = [];\n\n if (!keysCache) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const status = keysCache.getCacheStatus(pubkey);\n if (!status) return;\n if (status === KeyCacheStatus.PENDING && options?.skipPending) return;\n\n errors.push({\n index,\n field: 'pubkey',\n message: `pubkey already submitted`,\n code:\n status === KeyCacheStatus.CONFIRMED\n ? ValidationErrorCode.CACHED_PUBKEY_CONFIRMED\n : ValidationErrorCode.CACHED_PUBKEY_PENDING,\n });\n });\n\n return errors;\n }\n\n @Logger('API:')\n @ErrorHandler()\n public async checkClKeys(pubkeys: Hex[]): Promise<ValidationError[]> {\n const validPubkeys = pubkeys.filter((p) =>\n isHexadecimalString(p, PUBKEY_LENGTH),\n );\n const clKeys = await this.bus.keysWithStatus?.getClKeys(validPubkeys);\n const errors: ValidationError[] = [];\n\n if (!clKeys) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const exists = clKeys.find((k) => compareLowercase(k.pubkey, pubkey));\n if (exists) {\n errors.push({\n index,\n message: `pubkey already exists as a validator on CL`,\n field: 'pubkey',\n code: ValidationErrorCode.VALIDATOR_EXISTS,\n });\n }\n });\n\n return errors;\n }\n}\n"],"mappings":"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"}
@@ -16,6 +16,7 @@ declare class DepositDataSDK extends CsmSDKModule<{
16
16
  private getWcPrefix;
17
17
  validateDepositData(depositData: DepositData[], options?: {
18
18
  skipPending?: boolean;
19
+ skipSignature?: boolean;
19
20
  }): Promise<ValidationError[]>;
20
21
  checkUploadedKeys(pubkeys: Hex[]): Promise<ValidationError[]>;
21
22
  checkCachedKeys(pubkeys: Hex[], options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"deposit-data-sdk.d.cts","names":[],"sources":["../../src/deposit-data-sdk/deposit-data-sdk.ts"],"mappings":";;;;;;;;cAwBa,cAAA,SAAuB,YAAA;EAClC,MAAA,EAAQ,SAAA;EACR,cAAA,GAAiB,iBAAA;EACjB,SAAA,GAAY,YAAA;AAAA;EAGL,gBAAA,CAAiB,IAAA,WAAe,WAAA;EAKhC,SAAA,CAAU,IAAA,UAAc,KAAA,WAAgB,eAAA;EAAA,QAKjC,WAAA;EAMD,mBAAA,CACX,WAAA,EAAa,WAAA,IACb,OAAA;IAAY,WAAA;EAAA,IACX,OAAA,CAAQ,eAAA;EAoCE,iBAAA,CAAkB,OAAA,EAAS,GAAA,KAAQ,OAAA,CAAQ,eAAA;EAwBjD,eAAA,CACL,OAAA,EAAS,GAAA,IACT,OAAA;IAAY,WAAA;EAAA,IACX,eAAA;EA2BU,WAAA,CAAY,OAAA,EAAS,GAAA,KAAQ,OAAA,CAAQ,eAAA;AAAA"}
1
+ {"version":3,"file":"deposit-data-sdk.d.cts","names":[],"sources":["../../src/deposit-data-sdk/deposit-data-sdk.ts"],"mappings":";;;;;;;;cAwBa,cAAA,SAAuB,YAAA;EAClC,MAAA,EAAQ,SAAA;EACR,cAAA,GAAiB,iBAAA;EACjB,SAAA,GAAY,YAAA;AAAA;EAGL,gBAAA,CAAiB,IAAA,WAAe,WAAA;EAKhC,SAAA,CAAU,IAAA,UAAc,KAAA,WAAgB,eAAA;EAAA,QAKjC,WAAA;EAMD,mBAAA,CACX,WAAA,EAAa,WAAA,IACb,OAAA;IAAY,WAAA;IAAuB,aAAA;EAAA,IAClC,OAAA,CAAQ,eAAA;EAqCE,iBAAA,CAAkB,OAAA,EAAS,GAAA,KAAQ,OAAA,CAAQ,eAAA;EAwBjD,eAAA,CACL,OAAA,EAAS,GAAA,IACT,OAAA;IAAY,WAAA;EAAA,IACX,eAAA;EA2BU,WAAA,CAAY,OAAA,EAAS,GAAA,KAAQ,OAAA,CAAQ,eAAA;AAAA"}
@@ -16,6 +16,7 @@ declare class DepositDataSDK extends CsmSDKModule<{
16
16
  private getWcPrefix;
17
17
  validateDepositData(depositData: DepositData[], options?: {
18
18
  skipPending?: boolean;
19
+ skipSignature?: boolean;
19
20
  }): Promise<ValidationError[]>;
20
21
  checkUploadedKeys(pubkeys: Hex[]): Promise<ValidationError[]>;
21
22
  checkCachedKeys(pubkeys: Hex[], options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"deposit-data-sdk.d.mts","names":[],"sources":["../../src/deposit-data-sdk/deposit-data-sdk.ts"],"mappings":";;;;;;;;cAwBa,cAAA,SAAuB,YAAA;EAClC,MAAA,EAAQ,SAAA;EACR,cAAA,GAAiB,iBAAA;EACjB,SAAA,GAAY,YAAA;AAAA;EAGL,gBAAA,CAAiB,IAAA,WAAe,WAAA;EAKhC,SAAA,CAAU,IAAA,UAAc,KAAA,WAAgB,eAAA;EAAA,QAKjC,WAAA;EAMD,mBAAA,CACX,WAAA,EAAa,WAAA,IACb,OAAA;IAAY,WAAA;EAAA,IACX,OAAA,CAAQ,eAAA;EAoCE,iBAAA,CAAkB,OAAA,EAAS,GAAA,KAAQ,OAAA,CAAQ,eAAA;EAwBjD,eAAA,CACL,OAAA,EAAS,GAAA,IACT,OAAA;IAAY,WAAA;EAAA,IACX,eAAA;EA2BU,WAAA,CAAY,OAAA,EAAS,GAAA,KAAQ,OAAA,CAAQ,eAAA;AAAA"}
1
+ {"version":3,"file":"deposit-data-sdk.d.mts","names":[],"sources":["../../src/deposit-data-sdk/deposit-data-sdk.ts"],"mappings":";;;;;;;;cAwBa,cAAA,SAAuB,YAAA;EAClC,MAAA,EAAQ,SAAA;EACR,cAAA,GAAiB,iBAAA;EACjB,SAAA,GAAY,YAAA;AAAA;EAGL,gBAAA,CAAiB,IAAA,WAAe,WAAA;EAKhC,SAAA,CAAU,IAAA,UAAc,KAAA,WAAgB,eAAA;EAAA,QAKjC,WAAA;EAMD,mBAAA,CACX,WAAA,EAAa,WAAA,IACb,OAAA;IAAY,WAAA;IAAuB,aAAA;EAAA,IAClC,OAAA,CAAQ,eAAA;EAqCE,iBAAA,CAAkB,OAAA,EAAS,GAAA,KAAQ,OAAA,CAAQ,eAAA;EAwBjD,eAAA,CACL,OAAA,EAAS,GAAA,IACT,OAAA;IAAY,WAAA;EAAA,IACX,eAAA;EA2BU,WAAA,CAAY,OAAA,EAAS,GAAA,KAAQ,OAAA,CAAQ,eAAA;AAAA"}
@@ -119,7 +119,8 @@ var DepositDataSDK = class extends (_a = CsmSDKModule, _parseDepositData_dec = [
119
119
  chainId,
120
120
  withdrawalCredentials: wc,
121
121
  wcPrefix,
122
- currentBlockNumber: Number(blockNumber)
122
+ currentBlockNumber: Number(blockNumber),
123
+ skipSignature: options?.skipSignature
123
124
  });
124
125
  if (errors.length) return [...errors];
125
126
  const pubkeys = depositData.map((data) => data.pubkey);
@@ -1 +1 @@
1
- {"version":3,"file":"deposit-data-sdk.mjs","names":[],"sources":["../../src/deposit-data-sdk/deposit-data-sdk.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { CsmSDKModule } from '../common/class-primitives/csm-sdk-module';\nimport { Cache, ErrorHandler, Logger } from '../common/decorators/index';\nimport { CACHE_MID, CONTRACT_NAMES } from '../common/index';\nimport {\n compareLowercase,\n isHexadecimalString,\n toHexString,\n} from '../common/utils/index';\nimport { KeysCacheSDK } from '../keys-cache-sdk/keys-cache-sdk';\nimport { KeyCacheStatus } from '../keys-cache-sdk/types';\nimport { KeysWithStatusSDK } from '../keys-with-status-sdk/keys-with-status-sdk';\nimport { ModuleSDK } from '../module-sdk/module-sdk';\nimport { PUBKEY_LENGTH } from './constants';\nimport { parseDepositData, removeKey } from './parser';\nimport {\n DepositData,\n ParseResult,\n RemoveKeyResult,\n ValidationError,\n ValidationErrorCode,\n} from './types';\nimport { validateDepositData } from './validator';\n\nexport class DepositDataSDK extends CsmSDKModule<{\n module: ModuleSDK;\n keysWithStatus?: KeysWithStatusSDK;\n keysCache?: KeysCacheSDK;\n}> {\n @Logger('Utils:')\n public parseDepositData(json: string): ParseResult {\n return parseDepositData(json);\n }\n\n @Logger('Utils:')\n public removeKey(json: string, index: number): RemoveKeyResult {\n return removeKey(json, index);\n }\n\n @Logger('Utils:')\n private async getWcPrefix(): Promise<string> {\n const wcType = await this.bus.module.getWithdrawalCredentialsType();\n return wcType.toString(16).padStart(2, '0').padEnd(24, '0');\n }\n\n @Logger('Utils:')\n public async validateDepositData(\n depositData: DepositData[],\n options?: { skipPending?: boolean },\n ): Promise<ValidationError[]> {\n const chainId = this.core.chainId;\n const wc = this.core.getContractAddress(CONTRACT_NAMES.withdrawalVault);\n const [blockNumber, wcPrefix] = await Promise.all([\n this.core.publicClient.getBlockNumber(),\n this.getWcPrefix(),\n ]);\n\n const errors = await validateDepositData(depositData, {\n chainId,\n withdrawalCredentials: wc,\n wcPrefix,\n currentBlockNumber: Number(blockNumber),\n });\n\n if (errors.length) {\n return [...errors];\n }\n\n const pubkeys = depositData.map((data) => data.pubkey);\n\n const duplicateErrors = this.checkCachedKeys(pubkeys, options);\n const uploadedDuplicateErrors = await this.checkUploadedKeys(pubkeys);\n const clErrors = await this.checkClKeys(pubkeys.map(toHexString));\n\n return [\n ...errors,\n ...duplicateErrors,\n ...uploadedDuplicateErrors,\n ...clErrors,\n ];\n }\n\n @Logger('API:')\n @ErrorHandler()\n @Cache(CACHE_MID)\n public async checkUploadedKeys(pubkeys: Hex[]): Promise<ValidationError[]> {\n const keys = await this.bus.keysWithStatus?.getApiKeys(pubkeys);\n const errors: ValidationError[] = [];\n\n if (!keys) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const isUploaded = keys.find((key) => compareLowercase(key.key, pubkey));\n\n if (isUploaded) {\n errors.push({\n index,\n message: `pubkey was previously submitted`,\n field: 'pubkey',\n code: ValidationErrorCode.PREVIOUSLY_SUBMITTED,\n });\n }\n });\n\n return errors;\n }\n\n @Logger('Utils:')\n @ErrorHandler()\n public checkCachedKeys(\n pubkeys: Hex[],\n options?: { skipPending?: boolean },\n ): ValidationError[] {\n const keysCache = this.bus.keysCache;\n const errors: ValidationError[] = [];\n\n if (!keysCache) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const status = keysCache.getCacheStatus(pubkey);\n if (!status) return;\n if (status === KeyCacheStatus.PENDING && options?.skipPending) return;\n\n errors.push({\n index,\n field: 'pubkey',\n message: `pubkey already submitted`,\n code:\n status === KeyCacheStatus.CONFIRMED\n ? ValidationErrorCode.CACHED_PUBKEY_CONFIRMED\n : ValidationErrorCode.CACHED_PUBKEY_PENDING,\n });\n });\n\n return errors;\n }\n\n @Logger('API:')\n @ErrorHandler()\n public async checkClKeys(pubkeys: Hex[]): Promise<ValidationError[]> {\n const validPubkeys = pubkeys.filter((p) =>\n isHexadecimalString(p, PUBKEY_LENGTH),\n );\n const clKeys = await this.bus.keysWithStatus?.getClKeys(validPubkeys);\n const errors: ValidationError[] = [];\n\n if (!clKeys) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const exists = clKeys.find((k) => compareLowercase(k.pubkey, pubkey));\n if (exists) {\n errors.push({\n index,\n message: `pubkey already exists as a validator on CL`,\n field: 'pubkey',\n code: ValidationErrorCode.VALIDATOR_EXISTS,\n });\n }\n });\n\n return errors;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"deposit-data-sdk.mjs","names":[],"sources":["../../src/deposit-data-sdk/deposit-data-sdk.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { CsmSDKModule } from '../common/class-primitives/csm-sdk-module';\nimport { Cache, ErrorHandler, Logger } from '../common/decorators/index';\nimport { CACHE_MID, CONTRACT_NAMES } from '../common/index';\nimport {\n compareLowercase,\n isHexadecimalString,\n toHexString,\n} from '../common/utils/index';\nimport { KeysCacheSDK } from '../keys-cache-sdk/keys-cache-sdk';\nimport { KeyCacheStatus } from '../keys-cache-sdk/types';\nimport { KeysWithStatusSDK } from '../keys-with-status-sdk/keys-with-status-sdk';\nimport { ModuleSDK } from '../module-sdk/module-sdk';\nimport { PUBKEY_LENGTH } from './constants';\nimport { parseDepositData, removeKey } from './parser';\nimport {\n DepositData,\n ParseResult,\n RemoveKeyResult,\n ValidationError,\n ValidationErrorCode,\n} from './types';\nimport { validateDepositData } from './validator';\n\nexport class DepositDataSDK extends CsmSDKModule<{\n module: ModuleSDK;\n keysWithStatus?: KeysWithStatusSDK;\n keysCache?: KeysCacheSDK;\n}> {\n @Logger('Utils:')\n public parseDepositData(json: string): ParseResult {\n return parseDepositData(json);\n }\n\n @Logger('Utils:')\n public removeKey(json: string, index: number): RemoveKeyResult {\n return removeKey(json, index);\n }\n\n @Logger('Utils:')\n private async getWcPrefix(): Promise<string> {\n const wcType = await this.bus.module.getWithdrawalCredentialsType();\n return wcType.toString(16).padStart(2, '0').padEnd(24, '0');\n }\n\n @Logger('Utils:')\n public async validateDepositData(\n depositData: DepositData[],\n options?: { skipPending?: boolean; skipSignature?: boolean },\n ): Promise<ValidationError[]> {\n const chainId = this.core.chainId;\n const wc = this.core.getContractAddress(CONTRACT_NAMES.withdrawalVault);\n const [blockNumber, wcPrefix] = await Promise.all([\n this.core.publicClient.getBlockNumber(),\n this.getWcPrefix(),\n ]);\n\n const errors = await validateDepositData(depositData, {\n chainId,\n withdrawalCredentials: wc,\n wcPrefix,\n currentBlockNumber: Number(blockNumber),\n skipSignature: options?.skipSignature,\n });\n\n if (errors.length) {\n return [...errors];\n }\n\n const pubkeys = depositData.map((data) => data.pubkey);\n\n const duplicateErrors = this.checkCachedKeys(pubkeys, options);\n const uploadedDuplicateErrors = await this.checkUploadedKeys(pubkeys);\n const clErrors = await this.checkClKeys(pubkeys.map(toHexString));\n\n return [\n ...errors,\n ...duplicateErrors,\n ...uploadedDuplicateErrors,\n ...clErrors,\n ];\n }\n\n @Logger('API:')\n @ErrorHandler()\n @Cache(CACHE_MID)\n public async checkUploadedKeys(pubkeys: Hex[]): Promise<ValidationError[]> {\n const keys = await this.bus.keysWithStatus?.getApiKeys(pubkeys);\n const errors: ValidationError[] = [];\n\n if (!keys) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const isUploaded = keys.find((key) => compareLowercase(key.key, pubkey));\n\n if (isUploaded) {\n errors.push({\n index,\n message: `pubkey was previously submitted`,\n field: 'pubkey',\n code: ValidationErrorCode.PREVIOUSLY_SUBMITTED,\n });\n }\n });\n\n return errors;\n }\n\n @Logger('Utils:')\n @ErrorHandler()\n public checkCachedKeys(\n pubkeys: Hex[],\n options?: { skipPending?: boolean },\n ): ValidationError[] {\n const keysCache = this.bus.keysCache;\n const errors: ValidationError[] = [];\n\n if (!keysCache) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const status = keysCache.getCacheStatus(pubkey);\n if (!status) return;\n if (status === KeyCacheStatus.PENDING && options?.skipPending) return;\n\n errors.push({\n index,\n field: 'pubkey',\n message: `pubkey already submitted`,\n code:\n status === KeyCacheStatus.CONFIRMED\n ? ValidationErrorCode.CACHED_PUBKEY_CONFIRMED\n : ValidationErrorCode.CACHED_PUBKEY_PENDING,\n });\n });\n\n return errors;\n }\n\n @Logger('API:')\n @ErrorHandler()\n public async checkClKeys(pubkeys: Hex[]): Promise<ValidationError[]> {\n const validPubkeys = pubkeys.filter((p) =>\n isHexadecimalString(p, PUBKEY_LENGTH),\n );\n const clKeys = await this.bus.keysWithStatus?.getClKeys(validPubkeys);\n const errors: ValidationError[] = [];\n\n if (!clKeys) return errors;\n\n pubkeys.forEach((pubkey, index) => {\n const exists = clKeys.find((k) => compareLowercase(k.pubkey, pubkey));\n if (exists) {\n errors.push({\n index,\n message: `pubkey already exists as a validator on CL`,\n field: 'pubkey',\n code: ValidationErrorCode.VALIDATOR_EXISTS,\n });\n }\n });\n\n return errors;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,kBAAA,sBAAA,wBAAA,0BAAA,kBAAA,gBAAA,uBAAA,IAAA;AAwBO,IAAM,iBAAN,eAA6B,KAAA,cAKlC,wBAAA,CAAC,OAAO,SAAQ,CAAA,EAKhB,iBAAA,CAAC,OAAO,SAAQ,CAAA,EAKhB,mBAAA,CAAC,OAAO,SAAQ,CAAA,EAMhB,2BAAA,CAAC,OAAO,SAAQ,CAAA,EAsChB,yBAAA;CAAC,OAAO,OAAM;CACb,cAAa;CACb,MAAM,UAAS;CAAA,EAuBhB,uBAAA,CAAC,OAAO,SAAQ,EACf,cAAa,CAAA,EA6Bd,mBAAA,CAAC,OAAO,OAAM,EACb,cAAa,CAAA,EAnHoB,IAIjC;CAJI,cAAA;AAAA,QAAA,GAAA,UAAA;AAAA,oBAAA,OAAA,GAAA,KAAA;;CAME,iBAAiB,MAA2B;AACjD,SAAO,iBAAiB,KAAI;;CAIvB,UAAU,MAAc,OAAgC;AAC7D,SAAO,UAAU,MAAM,MAAK;;CAI9B,MAAc,cAA+B;AAE3C,UADe,MAAM,KAAK,IAAI,OAAO,8BAA6B,EACpD,SAAS,GAAE,CAAE,SAAS,GAAG,IAAG,CAAE,OAAO,IAAI,IAAG;;CAI5D,MAAa,oBACX,aACA,SAC4B;EAC5B,MAAM,UAAU,KAAK,KAAK;EAC1B,MAAM,KAAK,KAAK,KAAK,mBAAmB,eAAe,gBAAe;EACtE,MAAM,CAAC,aAAa,YAAY,MAAM,QAAQ,IAAI,CAChD,KAAK,KAAK,aAAa,gBAAe,EACtC,KAAK,aAAY,CAClB,CAAA;EAED,MAAM,SAAS,MAAM,oBAAoB,aAAa;GACpD;GACA,uBAAuB;GACvB;GACA,oBAAoB,OAAO,YAAW;GACtC,eAAe,SAAS;GACzB,CAAA;AAED,MAAI,OAAO,OACT,QAAO,CAAC,GAAG,OAAM;EAGnB,MAAM,UAAU,YAAY,KAAK,SAAS,KAAK,OAAM;EAErD,MAAM,kBAAkB,KAAK,gBAAgB,SAAS,QAAO;EAC7D,MAAM,0BAA0B,MAAM,KAAK,kBAAkB,QAAO;EACpE,MAAM,WAAW,MAAM,KAAK,YAAY,QAAQ,IAAI,YAAY,CAAA;AAEhE,SAAO;GACL,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACL;;CAMF,MAAa,kBAAkB,SAA4C;EACzE,MAAM,OAAO,MAAM,KAAK,IAAI,gBAAgB,WAAW,QAAO;EAC9D,MAAM,SAA4B,EAAC;AAEnC,MAAI,CAAC,KAAM,QAAO;AAElB,UAAQ,SAAS,QAAQ,UAAU;AAGjC,OAFmB,KAAK,MAAM,QAAQ,iBAAiB,IAAI,KAAK,OAAO,CAAA,CAGrE,QAAO,KAAK;IACV;IACA,SAAS;IACT,OAAO;IACP,MAAM,oBAAoB;IAC3B,CAAA;IAEJ;AAED,SAAO;;CAKF,gBACL,SACA,SACmB;EACnB,MAAM,YAAY,KAAK,IAAI;EAC3B,MAAM,SAA4B,EAAC;AAEnC,MAAI,CAAC,UAAW,QAAO;AAEvB,UAAQ,SAAS,QAAQ,UAAU;GACjC,MAAM,SAAS,UAAU,eAAe,OAAM;AAC9C,OAAI,CAAC,OAAQ;AACb,OAAI,WAAW,eAAe,WAAW,SAAS,YAAa;AAE/D,UAAO,KAAK;IACV;IACA,OAAO;IACP,SAAS;IACT,MACE,WAAW,eAAe,YACtB,oBAAoB,0BACpB,oBAAoB;IAC3B,CAAA;IACF;AAED,SAAO;;CAKT,MAAa,YAAY,SAA4C;EACnE,MAAM,eAAe,QAAQ,QAAQ,MACnC,oBAAoB,GAAA,GAAgB,CACtC;EACA,MAAM,SAAS,MAAM,KAAK,IAAI,gBAAgB,UAAU,aAAY;EACpE,MAAM,SAA4B,EAAC;AAEnC,MAAI,CAAC,OAAQ,QAAO;AAEpB,UAAQ,SAAS,QAAQ,UAAU;AAEjC,OADe,OAAO,MAAM,MAAM,iBAAiB,EAAE,QAAQ,OAAO,CAAA,CAElE,QAAO,KAAK;IACV;IACA,SAAS;IACT,OAAO;IACP,MAAM,oBAAoB;IAC3B,CAAA;IAEJ;AAED,SAAO;;;AAzIJ,QAAA,iBAAA,GAAA;AAML,kBAAA,OAAA,GAAO,oBADP,uBALW,eAAA;AAWX,kBAAA,OAAA,GAAO,aADP,gBAVW,eAAA;AAgBX,kBAAA,OAAA,GAAc,eADd,kBAfW,eAAA;AAsBX,kBAAA,OAAA,GAAa,uBADb,0BArBW,eAAA;AA8DX,kBAAA,OAAA,GAAa,qBAHb,wBA3DW,eAAA;AAsFX,kBAAA,OAAA,GAAO,mBAFP,sBApFW,eAAA;AAoHX,kBAAA,OAAA,GAAa,eAFb,kBAlHW,eAAA;AAAN,oBAAA,OAAM,eAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","names":["ValidationErrorCode"],"sources":["../../src/deposit-data-sdk/types.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { SUPPORTED_CHAINS } from '../common/index';\n\nexport type DepositData = {\n pubkey: Hex;\n withdrawal_credentials: Hex;\n amount: number;\n signature: Hex;\n deposit_message_root: Hex;\n deposit_data_root: Hex;\n fork_version: Hex;\n network_name: string;\n deposit_cli_version: string;\n};\n\nexport enum ValidationErrorCode {\n INVALID_PUBKEY = 'INVALID_PUBKEY',\n INVALID_SIGNATURE = 'INVALID_SIGNATURE',\n INVALID_WITHDRAWAL_CREDENTIALS = 'INVALID_WITHDRAWAL_CREDENTIALS',\n UNSUPPORTED_WC_TYPE = 'UNSUPPORTED_WC_TYPE',\n INVALID_AMOUNT = 'INVALID_AMOUNT',\n INVALID_NETWORK = 'INVALID_NETWORK',\n INVALID_FORK_VERSION = 'INVALID_FORK_VERSION',\n INVALID_DEPOSIT_ROOT = 'INVALID_DEPOSIT_ROOT',\n DUPLICATE_PUBKEY = 'DUPLICATE_PUBKEY',\n CACHED_PUBKEY_CONFIRMED = 'CACHED_PUBKEY_CONFIRMED',\n CACHED_PUBKEY_PENDING = 'CACHED_PUBKEY_PENDING',\n PREVIOUSLY_SUBMITTED = 'PREVIOUSLY_SUBMITTED',\n INVALID_BLS_SIGNATURE = 'INVALID_BLS_SIGNATURE',\n MISSING_FIELD = 'MISSING_FIELD',\n INVALID_FORMAT = 'INVALID_FORMAT',\n VALIDATOR_EXISTS = 'VALIDATOR_EXISTS',\n}\n\nexport type ValidationError = {\n index: number;\n field?: string;\n message: string;\n code: ValidationErrorCode;\n};\n\nexport type RemoveKeyResult = {\n success: boolean;\n data?: DepositData[];\n json?: string;\n error?: string;\n};\n\nexport type ParseResult = {\n success: boolean;\n data?: DepositData[];\n error?: string;\n};\n\nexport type ValidationProps = {\n chainId: SUPPORTED_CHAINS;\n withdrawalCredentials: string;\n wcPrefix: string;\n};\n\nexport type ValidationExtendedProps = ValidationProps & {\n currentBlockNumber?: number;\n};\n\nexport type DuplicateProcessingConfig = {\n pubkey: Hex;\n index: number;\n pubkeyMap: Map<Hex, number[]>;\n errors: ValidationError[];\n};\n"],"mappings":";AAeO,IAAK,sBAAL,kBAAKA,yBAAL;AACLA,sBAAA,oBAAiB;AACjBA,sBAAA,uBAAoB;AACpBA,sBAAA,oCAAiC;AACjCA,sBAAA,yBAAsB;AACtBA,sBAAA,oBAAiB;AACjBA,sBAAA,qBAAkB;AAClBA,sBAAA,0BAAuB;AACvBA,sBAAA,0BAAuB;AACvBA,sBAAA,sBAAmB;AACnBA,sBAAA,6BAA0B;AAC1BA,sBAAA,2BAAwB;AACxBA,sBAAA,0BAAuB;AACvBA,sBAAA,2BAAwB;AACxBA,sBAAA,mBAAgB;AAChBA,sBAAA,oBAAiB;AACjBA,sBAAA,sBAAmB;AAhBT,QAAAA;GAAA,uBAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"types.cjs","names":["ValidationErrorCode"],"sources":["../../src/deposit-data-sdk/types.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { SUPPORTED_CHAINS } from '../common/index';\n\nexport type DepositData = {\n pubkey: Hex;\n withdrawal_credentials: Hex;\n amount: number;\n signature: Hex;\n deposit_message_root: Hex;\n deposit_data_root: Hex;\n fork_version: Hex;\n network_name: string;\n deposit_cli_version: string;\n};\n\nexport enum ValidationErrorCode {\n INVALID_PUBKEY = 'INVALID_PUBKEY',\n INVALID_SIGNATURE = 'INVALID_SIGNATURE',\n INVALID_WITHDRAWAL_CREDENTIALS = 'INVALID_WITHDRAWAL_CREDENTIALS',\n UNSUPPORTED_WC_TYPE = 'UNSUPPORTED_WC_TYPE',\n INVALID_AMOUNT = 'INVALID_AMOUNT',\n INVALID_NETWORK = 'INVALID_NETWORK',\n INVALID_FORK_VERSION = 'INVALID_FORK_VERSION',\n INVALID_DEPOSIT_ROOT = 'INVALID_DEPOSIT_ROOT',\n DUPLICATE_PUBKEY = 'DUPLICATE_PUBKEY',\n CACHED_PUBKEY_CONFIRMED = 'CACHED_PUBKEY_CONFIRMED',\n CACHED_PUBKEY_PENDING = 'CACHED_PUBKEY_PENDING',\n PREVIOUSLY_SUBMITTED = 'PREVIOUSLY_SUBMITTED',\n INVALID_BLS_SIGNATURE = 'INVALID_BLS_SIGNATURE',\n MISSING_FIELD = 'MISSING_FIELD',\n INVALID_FORMAT = 'INVALID_FORMAT',\n VALIDATOR_EXISTS = 'VALIDATOR_EXISTS',\n}\n\nexport type ValidationError = {\n index: number;\n field?: string;\n message: string;\n code: ValidationErrorCode;\n};\n\nexport type RemoveKeyResult = {\n success: boolean;\n data?: DepositData[];\n json?: string;\n error?: string;\n};\n\nexport type ParseResult = {\n success: boolean;\n data?: DepositData[];\n error?: string;\n};\n\nexport type ValidationProps = {\n chainId: SUPPORTED_CHAINS;\n withdrawalCredentials: string;\n wcPrefix: string;\n};\n\nexport type ValidationExtendedProps = ValidationProps & {\n currentBlockNumber?: number;\n skipSignature?: boolean;\n};\n\nexport type DuplicateProcessingConfig = {\n pubkey: Hex;\n index: number;\n pubkeyMap: Map<Hex, number[]>;\n errors: ValidationError[];\n};\n"],"mappings":";AAeO,IAAK,sBAAL,kBAAKA,yBAAL;AACLA,sBAAA,oBAAiB;AACjBA,sBAAA,uBAAoB;AACpBA,sBAAA,oCAAiC;AACjCA,sBAAA,yBAAsB;AACtBA,sBAAA,oBAAiB;AACjBA,sBAAA,qBAAkB;AAClBA,sBAAA,0BAAuB;AACvBA,sBAAA,0BAAuB;AACvBA,sBAAA,sBAAmB;AACnBA,sBAAA,6BAA0B;AAC1BA,sBAAA,2BAAwB;AACxBA,sBAAA,0BAAuB;AACvBA,sBAAA,2BAAwB;AACxBA,sBAAA,mBAAgB;AAChBA,sBAAA,oBAAiB;AACjBA,sBAAA,sBAAmB;AAhBT,QAAAA;GAAA,uBAAA,EAAA,CAAA"}
@@ -55,6 +55,7 @@ type ValidationProps = {
55
55
  };
56
56
  type ValidationExtendedProps = ValidationProps & {
57
57
  currentBlockNumber?: number;
58
+ skipSignature?: boolean;
58
59
  };
59
60
  type DuplicateProcessingConfig = {
60
61
  pubkey: Hex;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/deposit-data-sdk/types.ts"],"mappings":";;;;KAGY,WAAA;EACV,MAAA,EAAQ,GAAA;EACR,sBAAA,EAAwB,GAAA;EACxB,MAAA;EACA,SAAA,EAAW,GAAA;EACX,oBAAA,EAAsB,GAAA;EACtB,iBAAA,EAAmB,GAAA;EACnB,YAAA,EAAc,GAAA;EACd,YAAA;EACA,mBAAA;AAAA;AAAA,aAGU,mBAAA;EACV,cAAA;EACA,iBAAA;EACA,8BAAA;EACA,mBAAA;EACA,cAAA;EACA,eAAA;EACA,oBAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,qBAAA;EACA,oBAAA;EACA,qBAAA;EACA,aAAA;EACA,cAAA;EACA,gBAAA;AAAA;AAAA,KAGU,eAAA;EACV,KAAA;EACA,KAAA;EACA,OAAA;EACA,IAAA,EAAM,mBAAA;AAAA;AAAA,KAGI,eAAA;EACV,OAAA;EACA,IAAA,GAAO,WAAA;EACP,IAAA;EACA,KAAA;AAAA;AAAA,KAGU,WAAA;EACV,OAAA;EACA,IAAA,GAAO,WAAA;EACP,KAAA;AAAA;AAAA,KAGU,eAAA;EACV,OAAA,EAAS,gBAAA;EACT,qBAAA;EACA,QAAA;AAAA;AAAA,KAGU,uBAAA,GAA0B,eAAA;EACpC,kBAAA;AAAA;AAAA,KAGU,yBAAA;EACV,MAAA,EAAQ,GAAA;EACR,KAAA;EACA,SAAA,EAAW,GAAA,CAAI,GAAA;EACf,MAAA,EAAQ,eAAA;AAAA"}
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/deposit-data-sdk/types.ts"],"mappings":";;;;KAGY,WAAA;EACV,MAAA,EAAQ,GAAA;EACR,sBAAA,EAAwB,GAAA;EACxB,MAAA;EACA,SAAA,EAAW,GAAA;EACX,oBAAA,EAAsB,GAAA;EACtB,iBAAA,EAAmB,GAAA;EACnB,YAAA,EAAc,GAAA;EACd,YAAA;EACA,mBAAA;AAAA;AAAA,aAGU,mBAAA;EACV,cAAA;EACA,iBAAA;EACA,8BAAA;EACA,mBAAA;EACA,cAAA;EACA,eAAA;EACA,oBAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,qBAAA;EACA,oBAAA;EACA,qBAAA;EACA,aAAA;EACA,cAAA;EACA,gBAAA;AAAA;AAAA,KAGU,eAAA;EACV,KAAA;EACA,KAAA;EACA,OAAA;EACA,IAAA,EAAM,mBAAA;AAAA;AAAA,KAGI,eAAA;EACV,OAAA;EACA,IAAA,GAAO,WAAA;EACP,IAAA;EACA,KAAA;AAAA;AAAA,KAGU,WAAA;EACV,OAAA;EACA,IAAA,GAAO,WAAA;EACP,KAAA;AAAA;AAAA,KAGU,eAAA;EACV,OAAA,EAAS,gBAAA;EACT,qBAAA;EACA,QAAA;AAAA;AAAA,KAGU,uBAAA,GAA0B,eAAA;EACpC,kBAAA;EACA,aAAA;AAAA;AAAA,KAGU,yBAAA;EACV,MAAA,EAAQ,GAAA;EACR,KAAA;EACA,SAAA,EAAW,GAAA,CAAI,GAAA;EACf,MAAA,EAAQ,eAAA;AAAA"}
@@ -55,6 +55,7 @@ type ValidationProps = {
55
55
  };
56
56
  type ValidationExtendedProps = ValidationProps & {
57
57
  currentBlockNumber?: number;
58
+ skipSignature?: boolean;
58
59
  };
59
60
  type DuplicateProcessingConfig = {
60
61
  pubkey: Hex;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/deposit-data-sdk/types.ts"],"mappings":";;;;KAGY,WAAA;EACV,MAAA,EAAQ,GAAA;EACR,sBAAA,EAAwB,GAAA;EACxB,MAAA;EACA,SAAA,EAAW,GAAA;EACX,oBAAA,EAAsB,GAAA;EACtB,iBAAA,EAAmB,GAAA;EACnB,YAAA,EAAc,GAAA;EACd,YAAA;EACA,mBAAA;AAAA;AAAA,aAGU,mBAAA;EACV,cAAA;EACA,iBAAA;EACA,8BAAA;EACA,mBAAA;EACA,cAAA;EACA,eAAA;EACA,oBAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,qBAAA;EACA,oBAAA;EACA,qBAAA;EACA,aAAA;EACA,cAAA;EACA,gBAAA;AAAA;AAAA,KAGU,eAAA;EACV,KAAA;EACA,KAAA;EACA,OAAA;EACA,IAAA,EAAM,mBAAA;AAAA;AAAA,KAGI,eAAA;EACV,OAAA;EACA,IAAA,GAAO,WAAA;EACP,IAAA;EACA,KAAA;AAAA;AAAA,KAGU,WAAA;EACV,OAAA;EACA,IAAA,GAAO,WAAA;EACP,KAAA;AAAA;AAAA,KAGU,eAAA;EACV,OAAA,EAAS,gBAAA;EACT,qBAAA;EACA,QAAA;AAAA;AAAA,KAGU,uBAAA,GAA0B,eAAA;EACpC,kBAAA;AAAA;AAAA,KAGU,yBAAA;EACV,MAAA,EAAQ,GAAA;EACR,KAAA;EACA,SAAA,EAAW,GAAA,CAAI,GAAA;EACf,MAAA,EAAQ,eAAA;AAAA"}
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/deposit-data-sdk/types.ts"],"mappings":";;;;KAGY,WAAA;EACV,MAAA,EAAQ,GAAA;EACR,sBAAA,EAAwB,GAAA;EACxB,MAAA;EACA,SAAA,EAAW,GAAA;EACX,oBAAA,EAAsB,GAAA;EACtB,iBAAA,EAAmB,GAAA;EACnB,YAAA,EAAc,GAAA;EACd,YAAA;EACA,mBAAA;AAAA;AAAA,aAGU,mBAAA;EACV,cAAA;EACA,iBAAA;EACA,8BAAA;EACA,mBAAA;EACA,cAAA;EACA,eAAA;EACA,oBAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,qBAAA;EACA,oBAAA;EACA,qBAAA;EACA,aAAA;EACA,cAAA;EACA,gBAAA;AAAA;AAAA,KAGU,eAAA;EACV,KAAA;EACA,KAAA;EACA,OAAA;EACA,IAAA,EAAM,mBAAA;AAAA;AAAA,KAGI,eAAA;EACV,OAAA;EACA,IAAA,GAAO,WAAA;EACP,IAAA;EACA,KAAA;AAAA;AAAA,KAGU,WAAA;EACV,OAAA;EACA,IAAA,GAAO,WAAA;EACP,KAAA;AAAA;AAAA,KAGU,eAAA;EACV,OAAA,EAAS,gBAAA;EACT,qBAAA;EACA,QAAA;AAAA;AAAA,KAGU,uBAAA,GAA0B,eAAA;EACpC,kBAAA;EACA,aAAA;AAAA;AAAA,KAGU,yBAAA;EACV,MAAA,EAAQ,GAAA;EACR,KAAA;EACA,SAAA,EAAW,GAAA,CAAI,GAAA;EACf,MAAA,EAAQ,eAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","names":["ValidationErrorCode"],"sources":["../../src/deposit-data-sdk/types.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { SUPPORTED_CHAINS } from '../common/index';\n\nexport type DepositData = {\n pubkey: Hex;\n withdrawal_credentials: Hex;\n amount: number;\n signature: Hex;\n deposit_message_root: Hex;\n deposit_data_root: Hex;\n fork_version: Hex;\n network_name: string;\n deposit_cli_version: string;\n};\n\nexport enum ValidationErrorCode {\n INVALID_PUBKEY = 'INVALID_PUBKEY',\n INVALID_SIGNATURE = 'INVALID_SIGNATURE',\n INVALID_WITHDRAWAL_CREDENTIALS = 'INVALID_WITHDRAWAL_CREDENTIALS',\n UNSUPPORTED_WC_TYPE = 'UNSUPPORTED_WC_TYPE',\n INVALID_AMOUNT = 'INVALID_AMOUNT',\n INVALID_NETWORK = 'INVALID_NETWORK',\n INVALID_FORK_VERSION = 'INVALID_FORK_VERSION',\n INVALID_DEPOSIT_ROOT = 'INVALID_DEPOSIT_ROOT',\n DUPLICATE_PUBKEY = 'DUPLICATE_PUBKEY',\n CACHED_PUBKEY_CONFIRMED = 'CACHED_PUBKEY_CONFIRMED',\n CACHED_PUBKEY_PENDING = 'CACHED_PUBKEY_PENDING',\n PREVIOUSLY_SUBMITTED = 'PREVIOUSLY_SUBMITTED',\n INVALID_BLS_SIGNATURE = 'INVALID_BLS_SIGNATURE',\n MISSING_FIELD = 'MISSING_FIELD',\n INVALID_FORMAT = 'INVALID_FORMAT',\n VALIDATOR_EXISTS = 'VALIDATOR_EXISTS',\n}\n\nexport type ValidationError = {\n index: number;\n field?: string;\n message: string;\n code: ValidationErrorCode;\n};\n\nexport type RemoveKeyResult = {\n success: boolean;\n data?: DepositData[];\n json?: string;\n error?: string;\n};\n\nexport type ParseResult = {\n success: boolean;\n data?: DepositData[];\n error?: string;\n};\n\nexport type ValidationProps = {\n chainId: SUPPORTED_CHAINS;\n withdrawalCredentials: string;\n wcPrefix: string;\n};\n\nexport type ValidationExtendedProps = ValidationProps & {\n currentBlockNumber?: number;\n};\n\nexport type DuplicateProcessingConfig = {\n pubkey: Hex;\n index: number;\n pubkeyMap: Map<Hex, number[]>;\n errors: ValidationError[];\n};\n"],"mappings":";AAeO,IAAK,sBAAL,kBAAKA,yBAAL;AACLA,sBAAA,oBAAiB;AACjBA,sBAAA,uBAAoB;AACpBA,sBAAA,oCAAiC;AACjCA,sBAAA,yBAAsB;AACtBA,sBAAA,oBAAiB;AACjBA,sBAAA,qBAAkB;AAClBA,sBAAA,0BAAuB;AACvBA,sBAAA,0BAAuB;AACvBA,sBAAA,sBAAmB;AACnBA,sBAAA,6BAA0B;AAC1BA,sBAAA,2BAAwB;AACxBA,sBAAA,0BAAuB;AACvBA,sBAAA,2BAAwB;AACxBA,sBAAA,mBAAgB;AAChBA,sBAAA,oBAAiB;AACjBA,sBAAA,sBAAmB;AAhBT,QAAAA;GAAA,uBAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"types.mjs","names":["ValidationErrorCode"],"sources":["../../src/deposit-data-sdk/types.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { SUPPORTED_CHAINS } from '../common/index';\n\nexport type DepositData = {\n pubkey: Hex;\n withdrawal_credentials: Hex;\n amount: number;\n signature: Hex;\n deposit_message_root: Hex;\n deposit_data_root: Hex;\n fork_version: Hex;\n network_name: string;\n deposit_cli_version: string;\n};\n\nexport enum ValidationErrorCode {\n INVALID_PUBKEY = 'INVALID_PUBKEY',\n INVALID_SIGNATURE = 'INVALID_SIGNATURE',\n INVALID_WITHDRAWAL_CREDENTIALS = 'INVALID_WITHDRAWAL_CREDENTIALS',\n UNSUPPORTED_WC_TYPE = 'UNSUPPORTED_WC_TYPE',\n INVALID_AMOUNT = 'INVALID_AMOUNT',\n INVALID_NETWORK = 'INVALID_NETWORK',\n INVALID_FORK_VERSION = 'INVALID_FORK_VERSION',\n INVALID_DEPOSIT_ROOT = 'INVALID_DEPOSIT_ROOT',\n DUPLICATE_PUBKEY = 'DUPLICATE_PUBKEY',\n CACHED_PUBKEY_CONFIRMED = 'CACHED_PUBKEY_CONFIRMED',\n CACHED_PUBKEY_PENDING = 'CACHED_PUBKEY_PENDING',\n PREVIOUSLY_SUBMITTED = 'PREVIOUSLY_SUBMITTED',\n INVALID_BLS_SIGNATURE = 'INVALID_BLS_SIGNATURE',\n MISSING_FIELD = 'MISSING_FIELD',\n INVALID_FORMAT = 'INVALID_FORMAT',\n VALIDATOR_EXISTS = 'VALIDATOR_EXISTS',\n}\n\nexport type ValidationError = {\n index: number;\n field?: string;\n message: string;\n code: ValidationErrorCode;\n};\n\nexport type RemoveKeyResult = {\n success: boolean;\n data?: DepositData[];\n json?: string;\n error?: string;\n};\n\nexport type ParseResult = {\n success: boolean;\n data?: DepositData[];\n error?: string;\n};\n\nexport type ValidationProps = {\n chainId: SUPPORTED_CHAINS;\n withdrawalCredentials: string;\n wcPrefix: string;\n};\n\nexport type ValidationExtendedProps = ValidationProps & {\n currentBlockNumber?: number;\n skipSignature?: boolean;\n};\n\nexport type DuplicateProcessingConfig = {\n pubkey: Hex;\n index: number;\n pubkeyMap: Map<Hex, number[]>;\n errors: ValidationError[];\n};\n"],"mappings":";AAeO,IAAK,sBAAL,kBAAKA,yBAAL;AACLA,sBAAA,oBAAiB;AACjBA,sBAAA,uBAAoB;AACpBA,sBAAA,oCAAiC;AACjCA,sBAAA,yBAAsB;AACtBA,sBAAA,oBAAiB;AACjBA,sBAAA,qBAAkB;AAClBA,sBAAA,0BAAuB;AACvBA,sBAAA,0BAAuB;AACvBA,sBAAA,sBAAmB;AACnBA,sBAAA,6BAA0B;AAC1BA,sBAAA,2BAAwB;AACxBA,sBAAA,0BAAuB;AACvBA,sBAAA,2BAAwB;AACxBA,sBAAA,mBAAgB;AAChBA,sBAAA,oBAAiB;AACjBA,sBAAA,sBAAmB;AAhBT,QAAAA;GAAA,uBAAA,EAAA,CAAA"}
@@ -122,6 +122,7 @@ const validateDepositData = async (depositData, options) => {
122
122
  withdrawalCredentials: options.withdrawalCredentials,
123
123
  wcPrefix: options.wcPrefix
124
124
  });
125
+ if (options.skipSignature) return errors;
125
126
  const signatureVerificationPromises = depositData.map((data, index) => {
126
127
  if (!data) return Promise.resolve({
127
128
  index,
@@ -1 +1 @@
1
- {"version":3,"file":"validator.cjs","names":[],"sources":["../../src/deposit-data-sdk/validator.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { compareLowercase } from '../common/utils/compare-lowercase';\nimport {\n isHexadecimalString,\n toHexString,\n trimHexPrefix,\n} from '../common/utils/index';\nimport {\n DEPOSIT_ROOT_LENGTH,\n FIXED_AMOUNT,\n FIXED_FORK_VERSION,\n FIXED_NETWORK,\n PUBKEY_LENGTH,\n SIGNATURE_LENGTH,\n WITHDRAWAL_CREDENTIALS_LENGTH,\n} from './constants';\nimport { verifyDepositSignature } from './signature';\nimport {\n DepositData,\n DuplicateProcessingConfig,\n ValidationError,\n ValidationErrorCode,\n ValidationExtendedProps,\n ValidationProps,\n} from './types';\n\nconst validateBasicFields = (\n data: DepositData,\n index: number,\n config: ValidationProps,\n): ValidationError[] => {\n const errors: ValidationError[] = [];\n\n // Validate pubkey\n if (!isHexadecimalString(data.pubkey, PUBKEY_LENGTH)) {\n errors.push({\n index,\n field: 'pubkey',\n message: 'pubkey is not a valid hex string',\n code: ValidationErrorCode.INVALID_PUBKEY,\n });\n }\n\n // Validate signature\n if (!isHexadecimalString(data.signature, SIGNATURE_LENGTH)) {\n errors.push({\n index,\n field: 'signature',\n message: 'signature is not a valid hex string',\n code: ValidationErrorCode.INVALID_SIGNATURE,\n });\n }\n\n // Validate deposit_message_root\n if (!isHexadecimalString(data.deposit_message_root, DEPOSIT_ROOT_LENGTH)) {\n errors.push({\n index,\n field: 'deposit_message_root',\n message: 'deposit_message_root is not a valid hex string',\n code: ValidationErrorCode.INVALID_DEPOSIT_ROOT,\n });\n }\n\n // Validate deposit_data_root\n if (!isHexadecimalString(data.deposit_data_root, DEPOSIT_ROOT_LENGTH)) {\n errors.push({\n index,\n field: 'deposit_data_root',\n message: 'deposit_data_root is not a valid hex string',\n code: ValidationErrorCode.INVALID_DEPOSIT_ROOT,\n });\n }\n\n // Validate withdrawal_credentials\n if (\n !isHexadecimalString(\n data.withdrawal_credentials,\n WITHDRAWAL_CREDENTIALS_LENGTH,\n )\n ) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: 'withdrawal_credentials is not a valid hex string',\n code: ValidationErrorCode.INVALID_WITHDRAWAL_CREDENTIALS,\n });\n } else {\n const wcHex = trimHexPrefix(data.withdrawal_credentials);\n const expectedAddress = trimHexPrefix(config.withdrawalCredentials);\n\n const wcTypeHex = toHexString(config.wcPrefix.replace(/0+$/, ''));\n if (!wcHex.toLowerCase().startsWith(config.wcPrefix.toLowerCase())) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: `wrong key type: only ${wcTypeHex} withdrawal credentials are supported`,\n code: ValidationErrorCode.UNSUPPORTED_WC_TYPE,\n });\n } else if (\n !compareLowercase(wcHex, `${config.wcPrefix}${expectedAddress}`)\n ) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: 'withdrawal_credentials is not the Lido Withdrawal Vault',\n code: ValidationErrorCode.INVALID_WITHDRAWAL_CREDENTIALS,\n });\n }\n }\n\n // Validate amount\n if (data.amount !== FIXED_AMOUNT) {\n errors.push({\n index,\n field: 'amount',\n message: 'amount is not equal to 32 ETH',\n code: ValidationErrorCode.INVALID_AMOUNT,\n });\n }\n\n // Validate network name\n const requiredNetworkName = FIXED_NETWORK[config.chainId];\n const networkName = data.network_name;\n\n if (!(networkName === requiredNetworkName)) {\n errors.push({\n index,\n field: 'network_name',\n message: `network_name is not equal to ${requiredNetworkName}`,\n code: ValidationErrorCode.INVALID_NETWORK,\n });\n }\n\n // Validate fork version\n const forkVersion = FIXED_FORK_VERSION[config.chainId];\n if (\n data.fork_version !== forkVersion &&\n data.fork_version !== toHexString(forkVersion)\n ) {\n errors.push({\n index,\n field: 'fork_version',\n message: `fork_version is not equal to ${forkVersion}`,\n code: ValidationErrorCode.INVALID_FORK_VERSION,\n });\n }\n\n return errors;\n};\n\nconst processDuplicatePubkey = (config: DuplicateProcessingConfig): void => {\n const existingIndices = config.pubkeyMap.get(config.pubkey);\n if (!existingIndices) {\n config.pubkeyMap.set(config.pubkey, [config.index]);\n return;\n }\n\n existingIndices.push(config.index);\n\n existingIndices.forEach((idx) => {\n const hasExistingError = config.errors.some(\n (e) => e.index === idx && e.code === ValidationErrorCode.DUPLICATE_PUBKEY,\n );\n\n if (hasExistingError) {\n return;\n }\n\n config.errors.push({\n index: idx,\n field: 'pubkey',\n message: 'pubkey is duplicated in deposit data',\n code: ValidationErrorCode.DUPLICATE_PUBKEY,\n });\n });\n};\n\nconst performBasicValidation = (\n depositData: DepositData[],\n config: ValidationProps,\n): ValidationError[] => {\n const errors: ValidationError[] = [];\n const pubkeyMap = new Map<Hex, number[]>();\n\n // Single pass: basic validation + duplicate detection\n for (const [i, data] of depositData.entries()) {\n if (!data) {\n errors.push({\n index: i,\n message: 'deposit data item is missing',\n code: ValidationErrorCode.MISSING_FIELD,\n });\n continue;\n }\n\n // Basic field validation\n const basicErrors = validateBasicFields(data, i, config);\n errors.push(...basicErrors);\n\n // Efficient duplicate detection using Map\n const pubkey = data.pubkey?.toLowerCase() as Hex;\n if (pubkey) {\n processDuplicatePubkey({\n pubkey,\n index: i,\n pubkeyMap,\n errors,\n });\n }\n }\n\n return errors;\n};\n\nexport const validateDepositData = async (\n depositData: DepositData[],\n options: ValidationExtendedProps,\n): Promise<ValidationError[]> => {\n const errors = performBasicValidation(depositData, {\n chainId: options.chainId,\n withdrawalCredentials: options.withdrawalCredentials,\n wcPrefix: options.wcPrefix,\n });\n\n // Parallel signature verification for valid items only\n const signatureVerificationPromises = depositData.map((data, index) => {\n if (!data) {\n return Promise.resolve({ index, isValid: false });\n }\n return verifyDepositSignature(data, options.chainId)\n .then((isValid) => ({ index, isValid }))\n .catch(() => ({ index, isValid: false }));\n });\n\n const signatureResults = await Promise.all(signatureVerificationPromises);\n\n // Process signature verification results\n signatureResults.forEach(({ index, isValid }) => {\n if (!isValid) {\n errors.push({\n index,\n field: 'signature',\n message: 'signature failed BLS verification',\n code: ValidationErrorCode.INVALID_BLS_SIGNATURE,\n });\n }\n });\n\n return errors;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"validator.cjs","names":[],"sources":["../../src/deposit-data-sdk/validator.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { compareLowercase } from '../common/utils/compare-lowercase';\nimport {\n isHexadecimalString,\n toHexString,\n trimHexPrefix,\n} from '../common/utils/index';\nimport {\n DEPOSIT_ROOT_LENGTH,\n FIXED_AMOUNT,\n FIXED_FORK_VERSION,\n FIXED_NETWORK,\n PUBKEY_LENGTH,\n SIGNATURE_LENGTH,\n WITHDRAWAL_CREDENTIALS_LENGTH,\n} from './constants';\nimport { verifyDepositSignature } from './signature';\nimport {\n DepositData,\n DuplicateProcessingConfig,\n ValidationError,\n ValidationErrorCode,\n ValidationExtendedProps,\n ValidationProps,\n} from './types';\n\nconst validateBasicFields = (\n data: DepositData,\n index: number,\n config: ValidationProps,\n): ValidationError[] => {\n const errors: ValidationError[] = [];\n\n // Validate pubkey\n if (!isHexadecimalString(data.pubkey, PUBKEY_LENGTH)) {\n errors.push({\n index,\n field: 'pubkey',\n message: 'pubkey is not a valid hex string',\n code: ValidationErrorCode.INVALID_PUBKEY,\n });\n }\n\n // Validate signature\n if (!isHexadecimalString(data.signature, SIGNATURE_LENGTH)) {\n errors.push({\n index,\n field: 'signature',\n message: 'signature is not a valid hex string',\n code: ValidationErrorCode.INVALID_SIGNATURE,\n });\n }\n\n // Validate deposit_message_root\n if (!isHexadecimalString(data.deposit_message_root, DEPOSIT_ROOT_LENGTH)) {\n errors.push({\n index,\n field: 'deposit_message_root',\n message: 'deposit_message_root is not a valid hex string',\n code: ValidationErrorCode.INVALID_DEPOSIT_ROOT,\n });\n }\n\n // Validate deposit_data_root\n if (!isHexadecimalString(data.deposit_data_root, DEPOSIT_ROOT_LENGTH)) {\n errors.push({\n index,\n field: 'deposit_data_root',\n message: 'deposit_data_root is not a valid hex string',\n code: ValidationErrorCode.INVALID_DEPOSIT_ROOT,\n });\n }\n\n // Validate withdrawal_credentials\n if (\n !isHexadecimalString(\n data.withdrawal_credentials,\n WITHDRAWAL_CREDENTIALS_LENGTH,\n )\n ) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: 'withdrawal_credentials is not a valid hex string',\n code: ValidationErrorCode.INVALID_WITHDRAWAL_CREDENTIALS,\n });\n } else {\n const wcHex = trimHexPrefix(data.withdrawal_credentials);\n const expectedAddress = trimHexPrefix(config.withdrawalCredentials);\n\n const wcTypeHex = toHexString(config.wcPrefix.replace(/0+$/, ''));\n if (!wcHex.toLowerCase().startsWith(config.wcPrefix.toLowerCase())) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: `wrong key type: only ${wcTypeHex} withdrawal credentials are supported`,\n code: ValidationErrorCode.UNSUPPORTED_WC_TYPE,\n });\n } else if (\n !compareLowercase(wcHex, `${config.wcPrefix}${expectedAddress}`)\n ) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: 'withdrawal_credentials is not the Lido Withdrawal Vault',\n code: ValidationErrorCode.INVALID_WITHDRAWAL_CREDENTIALS,\n });\n }\n }\n\n // Validate amount\n if (data.amount !== FIXED_AMOUNT) {\n errors.push({\n index,\n field: 'amount',\n message: 'amount is not equal to 32 ETH',\n code: ValidationErrorCode.INVALID_AMOUNT,\n });\n }\n\n // Validate network name\n const requiredNetworkName = FIXED_NETWORK[config.chainId];\n const networkName = data.network_name;\n\n if (!(networkName === requiredNetworkName)) {\n errors.push({\n index,\n field: 'network_name',\n message: `network_name is not equal to ${requiredNetworkName}`,\n code: ValidationErrorCode.INVALID_NETWORK,\n });\n }\n\n // Validate fork version\n const forkVersion = FIXED_FORK_VERSION[config.chainId];\n if (\n data.fork_version !== forkVersion &&\n data.fork_version !== toHexString(forkVersion)\n ) {\n errors.push({\n index,\n field: 'fork_version',\n message: `fork_version is not equal to ${forkVersion}`,\n code: ValidationErrorCode.INVALID_FORK_VERSION,\n });\n }\n\n return errors;\n};\n\nconst processDuplicatePubkey = (config: DuplicateProcessingConfig): void => {\n const existingIndices = config.pubkeyMap.get(config.pubkey);\n if (!existingIndices) {\n config.pubkeyMap.set(config.pubkey, [config.index]);\n return;\n }\n\n existingIndices.push(config.index);\n\n existingIndices.forEach((idx) => {\n const hasExistingError = config.errors.some(\n (e) => e.index === idx && e.code === ValidationErrorCode.DUPLICATE_PUBKEY,\n );\n\n if (hasExistingError) {\n return;\n }\n\n config.errors.push({\n index: idx,\n field: 'pubkey',\n message: 'pubkey is duplicated in deposit data',\n code: ValidationErrorCode.DUPLICATE_PUBKEY,\n });\n });\n};\n\nconst performBasicValidation = (\n depositData: DepositData[],\n config: ValidationProps,\n): ValidationError[] => {\n const errors: ValidationError[] = [];\n const pubkeyMap = new Map<Hex, number[]>();\n\n // Single pass: basic validation + duplicate detection\n for (const [i, data] of depositData.entries()) {\n if (!data) {\n errors.push({\n index: i,\n message: 'deposit data item is missing',\n code: ValidationErrorCode.MISSING_FIELD,\n });\n continue;\n }\n\n // Basic field validation\n const basicErrors = validateBasicFields(data, i, config);\n errors.push(...basicErrors);\n\n // Efficient duplicate detection using Map\n const pubkey = data.pubkey?.toLowerCase() as Hex;\n if (pubkey) {\n processDuplicatePubkey({\n pubkey,\n index: i,\n pubkeyMap,\n errors,\n });\n }\n }\n\n return errors;\n};\n\nexport const validateDepositData = async (\n depositData: DepositData[],\n options: ValidationExtendedProps,\n): Promise<ValidationError[]> => {\n const errors = performBasicValidation(depositData, {\n chainId: options.chainId,\n withdrawalCredentials: options.withdrawalCredentials,\n wcPrefix: options.wcPrefix,\n });\n\n if (options.skipSignature) {\n return errors;\n }\n\n // Parallel signature verification for valid items only\n const signatureVerificationPromises = depositData.map((data, index) => {\n if (!data) {\n return Promise.resolve({ index, isValid: false });\n }\n return verifyDepositSignature(data, options.chainId)\n .then((isValid) => ({ index, isValid }))\n .catch(() => ({ index, isValid: false }));\n });\n\n const signatureResults = await Promise.all(signatureVerificationPromises);\n\n // Process signature verification results\n signatureResults.forEach(({ index, isValid }) => {\n if (!isValid) {\n errors.push({\n index,\n field: 'signature',\n message: 'signature failed BLS verification',\n code: ValidationErrorCode.INVALID_BLS_SIGNATURE,\n });\n }\n });\n\n return errors;\n};\n"],"mappings":"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"}
@@ -122,6 +122,7 @@ const validateDepositData = async (depositData, options) => {
122
122
  withdrawalCredentials: options.withdrawalCredentials,
123
123
  wcPrefix: options.wcPrefix
124
124
  });
125
+ if (options.skipSignature) return errors;
125
126
  const signatureVerificationPromises = depositData.map((data, index) => {
126
127
  if (!data) return Promise.resolve({
127
128
  index,
@@ -1 +1 @@
1
- {"version":3,"file":"validator.mjs","names":[],"sources":["../../src/deposit-data-sdk/validator.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { compareLowercase } from '../common/utils/compare-lowercase';\nimport {\n isHexadecimalString,\n toHexString,\n trimHexPrefix,\n} from '../common/utils/index';\nimport {\n DEPOSIT_ROOT_LENGTH,\n FIXED_AMOUNT,\n FIXED_FORK_VERSION,\n FIXED_NETWORK,\n PUBKEY_LENGTH,\n SIGNATURE_LENGTH,\n WITHDRAWAL_CREDENTIALS_LENGTH,\n} from './constants';\nimport { verifyDepositSignature } from './signature';\nimport {\n DepositData,\n DuplicateProcessingConfig,\n ValidationError,\n ValidationErrorCode,\n ValidationExtendedProps,\n ValidationProps,\n} from './types';\n\nconst validateBasicFields = (\n data: DepositData,\n index: number,\n config: ValidationProps,\n): ValidationError[] => {\n const errors: ValidationError[] = [];\n\n // Validate pubkey\n if (!isHexadecimalString(data.pubkey, PUBKEY_LENGTH)) {\n errors.push({\n index,\n field: 'pubkey',\n message: 'pubkey is not a valid hex string',\n code: ValidationErrorCode.INVALID_PUBKEY,\n });\n }\n\n // Validate signature\n if (!isHexadecimalString(data.signature, SIGNATURE_LENGTH)) {\n errors.push({\n index,\n field: 'signature',\n message: 'signature is not a valid hex string',\n code: ValidationErrorCode.INVALID_SIGNATURE,\n });\n }\n\n // Validate deposit_message_root\n if (!isHexadecimalString(data.deposit_message_root, DEPOSIT_ROOT_LENGTH)) {\n errors.push({\n index,\n field: 'deposit_message_root',\n message: 'deposit_message_root is not a valid hex string',\n code: ValidationErrorCode.INVALID_DEPOSIT_ROOT,\n });\n }\n\n // Validate deposit_data_root\n if (!isHexadecimalString(data.deposit_data_root, DEPOSIT_ROOT_LENGTH)) {\n errors.push({\n index,\n field: 'deposit_data_root',\n message: 'deposit_data_root is not a valid hex string',\n code: ValidationErrorCode.INVALID_DEPOSIT_ROOT,\n });\n }\n\n // Validate withdrawal_credentials\n if (\n !isHexadecimalString(\n data.withdrawal_credentials,\n WITHDRAWAL_CREDENTIALS_LENGTH,\n )\n ) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: 'withdrawal_credentials is not a valid hex string',\n code: ValidationErrorCode.INVALID_WITHDRAWAL_CREDENTIALS,\n });\n } else {\n const wcHex = trimHexPrefix(data.withdrawal_credentials);\n const expectedAddress = trimHexPrefix(config.withdrawalCredentials);\n\n const wcTypeHex = toHexString(config.wcPrefix.replace(/0+$/, ''));\n if (!wcHex.toLowerCase().startsWith(config.wcPrefix.toLowerCase())) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: `wrong key type: only ${wcTypeHex} withdrawal credentials are supported`,\n code: ValidationErrorCode.UNSUPPORTED_WC_TYPE,\n });\n } else if (\n !compareLowercase(wcHex, `${config.wcPrefix}${expectedAddress}`)\n ) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: 'withdrawal_credentials is not the Lido Withdrawal Vault',\n code: ValidationErrorCode.INVALID_WITHDRAWAL_CREDENTIALS,\n });\n }\n }\n\n // Validate amount\n if (data.amount !== FIXED_AMOUNT) {\n errors.push({\n index,\n field: 'amount',\n message: 'amount is not equal to 32 ETH',\n code: ValidationErrorCode.INVALID_AMOUNT,\n });\n }\n\n // Validate network name\n const requiredNetworkName = FIXED_NETWORK[config.chainId];\n const networkName = data.network_name;\n\n if (!(networkName === requiredNetworkName)) {\n errors.push({\n index,\n field: 'network_name',\n message: `network_name is not equal to ${requiredNetworkName}`,\n code: ValidationErrorCode.INVALID_NETWORK,\n });\n }\n\n // Validate fork version\n const forkVersion = FIXED_FORK_VERSION[config.chainId];\n if (\n data.fork_version !== forkVersion &&\n data.fork_version !== toHexString(forkVersion)\n ) {\n errors.push({\n index,\n field: 'fork_version',\n message: `fork_version is not equal to ${forkVersion}`,\n code: ValidationErrorCode.INVALID_FORK_VERSION,\n });\n }\n\n return errors;\n};\n\nconst processDuplicatePubkey = (config: DuplicateProcessingConfig): void => {\n const existingIndices = config.pubkeyMap.get(config.pubkey);\n if (!existingIndices) {\n config.pubkeyMap.set(config.pubkey, [config.index]);\n return;\n }\n\n existingIndices.push(config.index);\n\n existingIndices.forEach((idx) => {\n const hasExistingError = config.errors.some(\n (e) => e.index === idx && e.code === ValidationErrorCode.DUPLICATE_PUBKEY,\n );\n\n if (hasExistingError) {\n return;\n }\n\n config.errors.push({\n index: idx,\n field: 'pubkey',\n message: 'pubkey is duplicated in deposit data',\n code: ValidationErrorCode.DUPLICATE_PUBKEY,\n });\n });\n};\n\nconst performBasicValidation = (\n depositData: DepositData[],\n config: ValidationProps,\n): ValidationError[] => {\n const errors: ValidationError[] = [];\n const pubkeyMap = new Map<Hex, number[]>();\n\n // Single pass: basic validation + duplicate detection\n for (const [i, data] of depositData.entries()) {\n if (!data) {\n errors.push({\n index: i,\n message: 'deposit data item is missing',\n code: ValidationErrorCode.MISSING_FIELD,\n });\n continue;\n }\n\n // Basic field validation\n const basicErrors = validateBasicFields(data, i, config);\n errors.push(...basicErrors);\n\n // Efficient duplicate detection using Map\n const pubkey = data.pubkey?.toLowerCase() as Hex;\n if (pubkey) {\n processDuplicatePubkey({\n pubkey,\n index: i,\n pubkeyMap,\n errors,\n });\n }\n }\n\n return errors;\n};\n\nexport const validateDepositData = async (\n depositData: DepositData[],\n options: ValidationExtendedProps,\n): Promise<ValidationError[]> => {\n const errors = performBasicValidation(depositData, {\n chainId: options.chainId,\n withdrawalCredentials: options.withdrawalCredentials,\n wcPrefix: options.wcPrefix,\n });\n\n // Parallel signature verification for valid items only\n const signatureVerificationPromises = depositData.map((data, index) => {\n if (!data) {\n return Promise.resolve({ index, isValid: false });\n }\n return verifyDepositSignature(data, options.chainId)\n .then((isValid) => ({ index, isValid }))\n .catch(() => ({ index, isValid: false }));\n });\n\n const signatureResults = await Promise.all(signatureVerificationPromises);\n\n // Process signature verification results\n signatureResults.forEach(({ index, isValid }) => {\n if (!isValid) {\n errors.push({\n index,\n field: 'signature',\n message: 'signature failed BLS verification',\n code: ValidationErrorCode.INVALID_BLS_SIGNATURE,\n });\n }\n });\n\n return errors;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"validator.mjs","names":[],"sources":["../../src/deposit-data-sdk/validator.ts"],"sourcesContent":["import { Hex } from 'viem';\nimport { compareLowercase } from '../common/utils/compare-lowercase';\nimport {\n isHexadecimalString,\n toHexString,\n trimHexPrefix,\n} from '../common/utils/index';\nimport {\n DEPOSIT_ROOT_LENGTH,\n FIXED_AMOUNT,\n FIXED_FORK_VERSION,\n FIXED_NETWORK,\n PUBKEY_LENGTH,\n SIGNATURE_LENGTH,\n WITHDRAWAL_CREDENTIALS_LENGTH,\n} from './constants';\nimport { verifyDepositSignature } from './signature';\nimport {\n DepositData,\n DuplicateProcessingConfig,\n ValidationError,\n ValidationErrorCode,\n ValidationExtendedProps,\n ValidationProps,\n} from './types';\n\nconst validateBasicFields = (\n data: DepositData,\n index: number,\n config: ValidationProps,\n): ValidationError[] => {\n const errors: ValidationError[] = [];\n\n // Validate pubkey\n if (!isHexadecimalString(data.pubkey, PUBKEY_LENGTH)) {\n errors.push({\n index,\n field: 'pubkey',\n message: 'pubkey is not a valid hex string',\n code: ValidationErrorCode.INVALID_PUBKEY,\n });\n }\n\n // Validate signature\n if (!isHexadecimalString(data.signature, SIGNATURE_LENGTH)) {\n errors.push({\n index,\n field: 'signature',\n message: 'signature is not a valid hex string',\n code: ValidationErrorCode.INVALID_SIGNATURE,\n });\n }\n\n // Validate deposit_message_root\n if (!isHexadecimalString(data.deposit_message_root, DEPOSIT_ROOT_LENGTH)) {\n errors.push({\n index,\n field: 'deposit_message_root',\n message: 'deposit_message_root is not a valid hex string',\n code: ValidationErrorCode.INVALID_DEPOSIT_ROOT,\n });\n }\n\n // Validate deposit_data_root\n if (!isHexadecimalString(data.deposit_data_root, DEPOSIT_ROOT_LENGTH)) {\n errors.push({\n index,\n field: 'deposit_data_root',\n message: 'deposit_data_root is not a valid hex string',\n code: ValidationErrorCode.INVALID_DEPOSIT_ROOT,\n });\n }\n\n // Validate withdrawal_credentials\n if (\n !isHexadecimalString(\n data.withdrawal_credentials,\n WITHDRAWAL_CREDENTIALS_LENGTH,\n )\n ) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: 'withdrawal_credentials is not a valid hex string',\n code: ValidationErrorCode.INVALID_WITHDRAWAL_CREDENTIALS,\n });\n } else {\n const wcHex = trimHexPrefix(data.withdrawal_credentials);\n const expectedAddress = trimHexPrefix(config.withdrawalCredentials);\n\n const wcTypeHex = toHexString(config.wcPrefix.replace(/0+$/, ''));\n if (!wcHex.toLowerCase().startsWith(config.wcPrefix.toLowerCase())) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: `wrong key type: only ${wcTypeHex} withdrawal credentials are supported`,\n code: ValidationErrorCode.UNSUPPORTED_WC_TYPE,\n });\n } else if (\n !compareLowercase(wcHex, `${config.wcPrefix}${expectedAddress}`)\n ) {\n errors.push({\n index,\n field: 'withdrawal_credentials',\n message: 'withdrawal_credentials is not the Lido Withdrawal Vault',\n code: ValidationErrorCode.INVALID_WITHDRAWAL_CREDENTIALS,\n });\n }\n }\n\n // Validate amount\n if (data.amount !== FIXED_AMOUNT) {\n errors.push({\n index,\n field: 'amount',\n message: 'amount is not equal to 32 ETH',\n code: ValidationErrorCode.INVALID_AMOUNT,\n });\n }\n\n // Validate network name\n const requiredNetworkName = FIXED_NETWORK[config.chainId];\n const networkName = data.network_name;\n\n if (!(networkName === requiredNetworkName)) {\n errors.push({\n index,\n field: 'network_name',\n message: `network_name is not equal to ${requiredNetworkName}`,\n code: ValidationErrorCode.INVALID_NETWORK,\n });\n }\n\n // Validate fork version\n const forkVersion = FIXED_FORK_VERSION[config.chainId];\n if (\n data.fork_version !== forkVersion &&\n data.fork_version !== toHexString(forkVersion)\n ) {\n errors.push({\n index,\n field: 'fork_version',\n message: `fork_version is not equal to ${forkVersion}`,\n code: ValidationErrorCode.INVALID_FORK_VERSION,\n });\n }\n\n return errors;\n};\n\nconst processDuplicatePubkey = (config: DuplicateProcessingConfig): void => {\n const existingIndices = config.pubkeyMap.get(config.pubkey);\n if (!existingIndices) {\n config.pubkeyMap.set(config.pubkey, [config.index]);\n return;\n }\n\n existingIndices.push(config.index);\n\n existingIndices.forEach((idx) => {\n const hasExistingError = config.errors.some(\n (e) => e.index === idx && e.code === ValidationErrorCode.DUPLICATE_PUBKEY,\n );\n\n if (hasExistingError) {\n return;\n }\n\n config.errors.push({\n index: idx,\n field: 'pubkey',\n message: 'pubkey is duplicated in deposit data',\n code: ValidationErrorCode.DUPLICATE_PUBKEY,\n });\n });\n};\n\nconst performBasicValidation = (\n depositData: DepositData[],\n config: ValidationProps,\n): ValidationError[] => {\n const errors: ValidationError[] = [];\n const pubkeyMap = new Map<Hex, number[]>();\n\n // Single pass: basic validation + duplicate detection\n for (const [i, data] of depositData.entries()) {\n if (!data) {\n errors.push({\n index: i,\n message: 'deposit data item is missing',\n code: ValidationErrorCode.MISSING_FIELD,\n });\n continue;\n }\n\n // Basic field validation\n const basicErrors = validateBasicFields(data, i, config);\n errors.push(...basicErrors);\n\n // Efficient duplicate detection using Map\n const pubkey = data.pubkey?.toLowerCase() as Hex;\n if (pubkey) {\n processDuplicatePubkey({\n pubkey,\n index: i,\n pubkeyMap,\n errors,\n });\n }\n }\n\n return errors;\n};\n\nexport const validateDepositData = async (\n depositData: DepositData[],\n options: ValidationExtendedProps,\n): Promise<ValidationError[]> => {\n const errors = performBasicValidation(depositData, {\n chainId: options.chainId,\n withdrawalCredentials: options.withdrawalCredentials,\n wcPrefix: options.wcPrefix,\n });\n\n if (options.skipSignature) {\n return errors;\n }\n\n // Parallel signature verification for valid items only\n const signatureVerificationPromises = depositData.map((data, index) => {\n if (!data) {\n return Promise.resolve({ index, isValid: false });\n }\n return verifyDepositSignature(data, options.chainId)\n .then((isValid) => ({ index, isValid }))\n .catch(() => ({ index, isValid: false }));\n });\n\n const signatureResults = await Promise.all(signatureVerificationPromises);\n\n // Process signature verification results\n signatureResults.forEach(({ index, isValid }) => {\n if (!isValid) {\n errors.push({\n index,\n field: 'signature',\n message: 'signature failed BLS verification',\n code: ValidationErrorCode.INVALID_BLS_SIGNATURE,\n });\n }\n });\n\n return errors;\n};\n"],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  require("../_virtual/_rolldown/runtime.cjs");
2
2
  const require_contract_names = require("../common/constants/contract-names.cjs");
3
+ const require_sdk_error = require("../common/utils/sdk-error.cjs");
3
4
  const require_csm_sdk_module = require("../common/class-primitives/csm-sdk-module.cjs");
4
5
  const require_on_error = require("../common/utils/on-error.cjs");
6
+ const require_operator_types = require("../common/constants/operator-types.cjs");
5
7
  const require_roles = require("../common/constants/roles.cjs");
8
+ const require_operator_type_utils = require("../common/utils/operator-type-utils.cjs");
6
9
  const require_error_handler = require("../common/decorators/error-handler.cjs");
7
10
  const require_logger = require("../common/decorators/logger.cjs");
8
11
  const require_iterate_pages = require("./iterate-pages.cjs");
@@ -90,8 +93,8 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError("Cannot use
90
93
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
91
94
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
92
95
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
93
- var _getOperatorsWithLockedBond_dec, _getAllNodeOperators_dec, _getNodeOperatorsByProposedAddress_dec, _getNodeOperatorsByAddress_dec, _getNodeOperatorIds_dec, _a, _init;
94
- var DiscoverySDK = class extends (_a = require_csm_sdk_module.CsmSDKModule, _getNodeOperatorIds_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _getNodeOperatorsByAddress_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _getNodeOperatorsByProposedAddress_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _getAllNodeOperators_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _getOperatorsWithLockedBond_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _a) {
96
+ var _getOperatorsWithLockedBond_dec, _getAllNodeOperators_dec, _getNodeOperatorsByProposedAddress_dec, _getOperatorsByType_dec, _getOperatorsByCurveId_dec, _getNodeOperatorsByAddress_dec, _getNodeOperatorIds_dec, _a, _init;
97
+ var DiscoverySDK = class extends (_a = require_csm_sdk_module.CsmSDKModule, _getNodeOperatorIds_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _getNodeOperatorsByAddress_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _getOperatorsByCurveId_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _getOperatorsByType_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _getNodeOperatorsByProposedAddress_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _getAllNodeOperators_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _getOperatorsWithLockedBond_dec = [require_logger.Logger("Views:"), require_error_handler.ErrorHandler()], _a) {
95
98
  constructor() {
96
99
  super(...arguments);
97
100
  __runInitializers(_init, 5, this);
@@ -135,11 +138,21 @@ var DiscoverySDK = class extends (_a = require_csm_sdk_module.CsmSDKModule, _get
135
138
  address,
136
139
  p.offset,
137
140
  p.limit
138
- ]), pagination)).map((operator) => ({
139
- ...operator,
140
- rewardsAddress: operator.rewardAddress,
141
- nodeOperatorId: operator.id
142
- }));
141
+ ]), pagination)).map(toShortInfo);
142
+ }
143
+ async getOperatorsByCurveId(curveId, pagination) {
144
+ return (await this.paginateOperators((p) => this.discoveryContract.read.getOperatorsByCurveId([
145
+ this.core.moduleId,
146
+ curveId,
147
+ p.offset,
148
+ p.limit
149
+ ]), pagination)).map(toShortInfo);
150
+ }
151
+ async getOperatorsByType(operatorType, pagination) {
152
+ require_sdk_error.invariantArgument(require_operator_types.OPERATOR_TYPE_MODULE[operatorType] === this.core.moduleName, `Operator type "${operatorType}" does not belong to the current module (${this.core.moduleName})`);
153
+ const curveId = require_operator_type_utils.getCurveIdByOperatorType(this.core.chainId, operatorType);
154
+ require_sdk_error.invariantArgument(curveId !== void 0, `Operator type "${operatorType}" has no curve id for the current chain`);
155
+ return this.getOperatorsByCurveId(curveId, pagination);
143
156
  }
144
157
  async getNodeOperatorsByProposedAddress(address, pagination) {
145
158
  return (await this.paginateOperators((p) => this.discoveryContract.read.getNodeOperatorsByProposedAddress([
@@ -182,10 +195,17 @@ var DiscoverySDK = class extends (_a = require_csm_sdk_module.CsmSDKModule, _get
182
195
  _init = __decoratorStart(_a);
183
196
  __decorateElement(_init, 1, "getNodeOperatorIds", _getNodeOperatorIds_dec, DiscoverySDK);
184
197
  __decorateElement(_init, 1, "getNodeOperatorsByAddress", _getNodeOperatorsByAddress_dec, DiscoverySDK);
198
+ __decorateElement(_init, 1, "getOperatorsByCurveId", _getOperatorsByCurveId_dec, DiscoverySDK);
199
+ __decorateElement(_init, 1, "getOperatorsByType", _getOperatorsByType_dec, DiscoverySDK);
185
200
  __decorateElement(_init, 1, "getNodeOperatorsByProposedAddress", _getNodeOperatorsByProposedAddress_dec, DiscoverySDK);
186
201
  __decorateElement(_init, 1, "getAllNodeOperators", _getAllNodeOperators_dec, DiscoverySDK);
187
202
  __decorateElement(_init, 1, "getOperatorsWithLockedBond", _getOperatorsWithLockedBond_dec, DiscoverySDK);
188
203
  __decoratorMetadata(_init, DiscoverySDK);
204
+ const toShortInfo = (operator) => ({
205
+ ...operator,
206
+ rewardsAddress: operator.rewardAddress,
207
+ nodeOperatorId: operator.id
208
+ });
189
209
  //#endregion
190
210
  exports.DiscoverySDK = DiscoverySDK;
191
211
 
@@ -1 +1 @@
1
- {"version":3,"file":"discovery-sdk.cjs","names":[],"sources":["../../src/discovery-sdk/discovery-sdk.ts"],"sourcesContent":["import { Address, isAddressEqual } from 'viem';\nimport { CsmSDKModule } from '../common/class-primitives/csm-sdk-module';\nimport { CONTRACT_NAMES } from '../common/constants/index';\nimport { ROLES } from '../common/constants/roles';\nimport { ErrorHandler, Logger } from '../common/decorators/index';\nimport {\n NodeOperatorId,\n NodeOperatorInviteInfo,\n NodeOperatorShortInfo,\n} from '../common/types';\nimport { onRevertEmptyList } from '../common/utils/on-error';\nimport { ModuleSDK } from '../module-sdk/module-sdk';\nimport { byTotalCount, iteratePages, onePage } from './iterate-pages';\nimport {\n NodeOperatorDiscoveryInfo,\n NodeOperatorLockedBond,\n Pagination,\n SearchMode,\n} from './types';\n\nexport class DiscoverySDK extends CsmSDKModule<{ module: ModuleSDK }> {\n private get discoveryContract() {\n return this.core.getContract(CONTRACT_NAMES.smDiscovery);\n }\n\n /**\n * Paginates through operators using the provided fetch function.\n *\n * Behavior:\n * - Without pagination parameter: Fetches ALL operators by querying total count and iterating through all pages\n * - With pagination parameter: Fetches ONLY ONE PAGE at the specified offset/limit\n *\n * @param fetchPage - Function to fetch a page of operators\n * @param pagination - Optional pagination parameters (offset, limit)\n * @param defaultLimit - Optional default limit when pagination is not provided (defaults to 1000)\n * @returns Array of all fetched operators\n */\n private async paginateOperators<T>(\n fetchPage: (p: Pagination) => Promise<readonly T[] | T[]>,\n pagination?: Pagination,\n defaultLimit = 1000n,\n ): Promise<T[]> {\n const limit = pagination?.limit ?? defaultLimit;\n const offset = pagination?.offset ?? 0n;\n\n const getNextOffset = pagination\n ? onePage\n : byTotalCount(await this.bus.module.getOperatorsCount());\n\n return iteratePages(fetchPage, { offset, limit }, getNextOffset).catch(\n onRevertEmptyList<T>,\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorIds(\n address: Address,\n searchMode: SearchMode = SearchMode.CURRENT_ADDRESSES,\n pagination?: Pagination,\n ): Promise<NodeOperatorId[]> {\n return this.paginateOperators(\n (p) =>\n this.discoveryContract.read.findNodeOperatorsByAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n searchMode,\n ]),\n pagination,\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorsByAddress(\n address: Address,\n pagination?: Pagination,\n ): Promise<NodeOperatorShortInfo[]> {\n const operators = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getNodeOperatorsByAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return operators.map((operator) => ({\n ...operator,\n rewardsAddress: operator.rewardAddress,\n nodeOperatorId: operator.id,\n }));\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorsByProposedAddress(\n address: Address,\n pagination?: Pagination,\n ): Promise<NodeOperatorInviteInfo[]> {\n const operators = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getNodeOperatorsByProposedAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return operators.flatMap((operator) =>\n [\n { address: operator.proposedManagerAddress, role: ROLES.MANAGER },\n { address: operator.proposedRewardAddress, role: ROLES.REWARDS },\n ]\n .filter((item) => isAddressEqual(item.address, address))\n .map((item) => ({\n nodeOperatorId: operator.id,\n extendedManagerPermissions: operator.extendedManagerPermissions,\n curveId: operator.curveId,\n role: item.role,\n })),\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getAllNodeOperators(\n pagination?: Pagination,\n ): Promise<NodeOperatorDiscoveryInfo[]> {\n return this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getAllNodeOperators([\n this.core.moduleId,\n p.offset,\n p.limit,\n ]),\n pagination,\n 500n, // Custom default limit for bulk fetching\n ) as Promise<NodeOperatorDiscoveryInfo[]>;\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getOperatorsWithLockedBond(\n pagination?: Pagination,\n ): Promise<NodeOperatorLockedBond[]> {\n const entries = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getOperatorsWithLockedBond([\n this.core.moduleId,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return entries.map((e) => ({\n nodeOperatorId: e.id,\n locked: e.amount,\n until: Number(e.until),\n }));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"discovery-sdk.cjs","names":[],"sources":["../../src/discovery-sdk/discovery-sdk.ts"],"sourcesContent":["import { Address, isAddressEqual } from 'viem';\nimport { CsmSDKModule } from '../common/class-primitives/csm-sdk-module';\nimport {\n CONTRACT_NAMES,\n OPERATOR_TYPE,\n OPERATOR_TYPE_MODULE,\n} from '../common/constants/index';\nimport { ROLES } from '../common/constants/roles';\nimport { ErrorHandler, Logger } from '../common/decorators/index';\nimport {\n NodeOperatorId,\n NodeOperatorInviteInfo,\n NodeOperatorShortInfo,\n} from '../common/types';\nimport { getCurveIdByOperatorType } from '../common/utils/operator-type-utils';\nimport { onRevertEmptyList } from '../common/utils/on-error';\nimport { invariantArgument } from '../common/utils/sdk-error';\nimport { ModuleSDK } from '../module-sdk/module-sdk';\nimport { byTotalCount, iteratePages, onePage } from './iterate-pages';\nimport {\n NodeOperatorDiscoveryInfo,\n NodeOperatorLockedBond,\n Pagination,\n SearchMode,\n} from './types';\n\nexport class DiscoverySDK extends CsmSDKModule<{ module: ModuleSDK }> {\n private get discoveryContract() {\n return this.core.getContract(CONTRACT_NAMES.smDiscovery);\n }\n\n /**\n * Paginates through operators using the provided fetch function.\n *\n * Behavior:\n * - Without pagination parameter: Fetches ALL operators by querying total count and iterating through all pages\n * - With pagination parameter: Fetches ONLY ONE PAGE at the specified offset/limit\n *\n * @param fetchPage - Function to fetch a page of operators\n * @param pagination - Optional pagination parameters (offset, limit)\n * @param defaultLimit - Optional default limit when pagination is not provided (defaults to 1000)\n * @returns Array of all fetched operators\n */\n private async paginateOperators<T>(\n fetchPage: (p: Pagination) => Promise<readonly T[] | T[]>,\n pagination?: Pagination,\n defaultLimit = 1000n,\n ): Promise<T[]> {\n const limit = pagination?.limit ?? defaultLimit;\n const offset = pagination?.offset ?? 0n;\n\n const getNextOffset = pagination\n ? onePage\n : byTotalCount(await this.bus.module.getOperatorsCount());\n\n return iteratePages(fetchPage, { offset, limit }, getNextOffset).catch(\n onRevertEmptyList<T>,\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorIds(\n address: Address,\n searchMode: SearchMode = SearchMode.CURRENT_ADDRESSES,\n pagination?: Pagination,\n ): Promise<NodeOperatorId[]> {\n return this.paginateOperators(\n (p) =>\n this.discoveryContract.read.findNodeOperatorsByAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n searchMode,\n ]),\n pagination,\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorsByAddress(\n address: Address,\n pagination?: Pagination,\n ): Promise<NodeOperatorShortInfo[]> {\n const operators = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getNodeOperatorsByAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return operators.map(toShortInfo);\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getOperatorsByCurveId(\n curveId: bigint,\n pagination?: Pagination,\n ): Promise<NodeOperatorShortInfo[]> {\n const operators = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getOperatorsByCurveId([\n this.core.moduleId,\n curveId,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return operators.map(toShortInfo);\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getOperatorsByType(\n operatorType: OPERATOR_TYPE,\n pagination?: Pagination,\n ): Promise<NodeOperatorShortInfo[]> {\n invariantArgument(\n OPERATOR_TYPE_MODULE[operatorType] === this.core.moduleName,\n `Operator type \"${operatorType}\" does not belong to the current module (${this.core.moduleName})`,\n );\n\n const curveId = getCurveIdByOperatorType(this.core.chainId, operatorType);\n\n // Belt-and-suspenders: with the module check above this should always be\n // defined, but guard against a chain/type combo missing from the curve\n // id table (e.g. a newly added OPERATOR_TYPE not yet backfilled).\n invariantArgument(\n curveId !== undefined,\n `Operator type \"${operatorType}\" has no curve id for the current chain`,\n );\n\n return this.getOperatorsByCurveId(curveId, pagination);\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorsByProposedAddress(\n address: Address,\n pagination?: Pagination,\n ): Promise<NodeOperatorInviteInfo[]> {\n const operators = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getNodeOperatorsByProposedAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return operators.flatMap((operator) =>\n [\n { address: operator.proposedManagerAddress, role: ROLES.MANAGER },\n { address: operator.proposedRewardAddress, role: ROLES.REWARDS },\n ]\n .filter((item) => isAddressEqual(item.address, address))\n .map((item) => ({\n nodeOperatorId: operator.id,\n extendedManagerPermissions: operator.extendedManagerPermissions,\n curveId: operator.curveId,\n role: item.role,\n })),\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getAllNodeOperators(\n pagination?: Pagination,\n ): Promise<NodeOperatorDiscoveryInfo[]> {\n return this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getAllNodeOperators([\n this.core.moduleId,\n p.offset,\n p.limit,\n ]),\n pagination,\n 500n, // Custom default limit for bulk fetching\n ) as Promise<NodeOperatorDiscoveryInfo[]>;\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getOperatorsWithLockedBond(\n pagination?: Pagination,\n ): Promise<NodeOperatorLockedBond[]> {\n const entries = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getOperatorsWithLockedBond([\n this.core.moduleId,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return entries.map((e) => ({\n nodeOperatorId: e.id,\n locked: e.amount,\n until: Number(e.until),\n }));\n }\n}\n\n/** Shape of the `NodeOperatorShort` struct shared by SMDiscovery ABI methods. */\ntype NodeOperatorShort = {\n id: bigint;\n managerAddress: Address;\n rewardAddress: Address;\n extendedManagerPermissions: boolean;\n curveId: bigint;\n};\n\nconst toShortInfo = (operator: NodeOperatorShort): NodeOperatorShortInfo => ({\n ...operator,\n rewardsAddress: operator.rewardAddress,\n nodeOperatorId: operator.id,\n});\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { OPERATOR_TYPE } from "../common/constants/operator-types.cjs";
1
2
  import { NodeOperatorId, NodeOperatorInviteInfo, NodeOperatorShortInfo } from "../common/types.cjs";
2
3
  import { CsmSDKModule } from "../common/class-primitives/csm-sdk-module.cjs";
3
4
  import { ModuleSDK } from "../module-sdk/module-sdk.cjs";
@@ -24,6 +25,8 @@ declare class DiscoverySDK extends CsmSDKModule<{
24
25
  private paginateOperators;
25
26
  getNodeOperatorIds(address: Address, searchMode?: SearchMode, pagination?: Pagination): Promise<NodeOperatorId[]>;
26
27
  getNodeOperatorsByAddress(address: Address, pagination?: Pagination): Promise<NodeOperatorShortInfo[]>;
28
+ getOperatorsByCurveId(curveId: bigint, pagination?: Pagination): Promise<NodeOperatorShortInfo[]>;
29
+ getOperatorsByType(operatorType: OPERATOR_TYPE, pagination?: Pagination): Promise<NodeOperatorShortInfo[]>;
27
30
  getNodeOperatorsByProposedAddress(address: Address, pagination?: Pagination): Promise<NodeOperatorInviteInfo[]>;
28
31
  getAllNodeOperators(pagination?: Pagination): Promise<NodeOperatorDiscoveryInfo[]>;
29
32
  getOperatorsWithLockedBond(pagination?: Pagination): Promise<NodeOperatorLockedBond[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"discovery-sdk.d.cts","names":[],"sources":["../../src/discovery-sdk/discovery-sdk.ts"],"mappings":";;;;;;;cAoBa,YAAA,SAAqB,YAAA;EAAe,MAAA,EAAQ,SAAA;AAAA;EAAA,YAC3C,iBAAA,CAAA;;;;;;;;;;;;;UAgBE,iBAAA;EAmBD,kBAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAY,UAAA,EACZ,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,cAAA;EAgBE,yBAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,qBAAA;EAqBE,iCAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,sBAAA;EA6BE,mBAAA,CACX,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,yBAAA;EAeE,0BAAA,CACX,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,sBAAA;AAAA"}
1
+ {"version":3,"file":"discovery-sdk.d.cts","names":[],"sources":["../../src/discovery-sdk/discovery-sdk.ts"],"mappings":";;;;;;;;cA0Ba,YAAA,SAAqB,YAAA;EAAe,MAAA,EAAQ,SAAA;AAAA;EAAA,YAC3C,iBAAA,CAAA;EADY;;;;;;;;;;;;EAAA,QAiBV,iBAAA;EAmBD,kBAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAY,UAAA,EACZ,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,cAAA;EAgBE,yBAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,qBAAA;EAiBE,qBAAA,CACX,OAAA,UACA,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,qBAAA;EAiBE,kBAAA,CACX,YAAA,EAAc,aAAA,EACd,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,qBAAA;EAqBE,iCAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,sBAAA;EA6BE,mBAAA,CACX,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,yBAAA;EAeE,0BAAA,CACX,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,sBAAA;AAAA"}
@@ -1,3 +1,4 @@
1
+ import { OPERATOR_TYPE } from "../common/constants/operator-types.mjs";
1
2
  import { NodeOperatorId, NodeOperatorInviteInfo, NodeOperatorShortInfo } from "../common/types.mjs";
2
3
  import { CsmSDKModule } from "../common/class-primitives/csm-sdk-module.mjs";
3
4
  import { ModuleSDK } from "../module-sdk/module-sdk.mjs";
@@ -24,6 +25,8 @@ declare class DiscoverySDK extends CsmSDKModule<{
24
25
  private paginateOperators;
25
26
  getNodeOperatorIds(address: Address, searchMode?: SearchMode, pagination?: Pagination): Promise<NodeOperatorId[]>;
26
27
  getNodeOperatorsByAddress(address: Address, pagination?: Pagination): Promise<NodeOperatorShortInfo[]>;
28
+ getOperatorsByCurveId(curveId: bigint, pagination?: Pagination): Promise<NodeOperatorShortInfo[]>;
29
+ getOperatorsByType(operatorType: OPERATOR_TYPE, pagination?: Pagination): Promise<NodeOperatorShortInfo[]>;
27
30
  getNodeOperatorsByProposedAddress(address: Address, pagination?: Pagination): Promise<NodeOperatorInviteInfo[]>;
28
31
  getAllNodeOperators(pagination?: Pagination): Promise<NodeOperatorDiscoveryInfo[]>;
29
32
  getOperatorsWithLockedBond(pagination?: Pagination): Promise<NodeOperatorLockedBond[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"discovery-sdk.d.mts","names":[],"sources":["../../src/discovery-sdk/discovery-sdk.ts"],"mappings":";;;;;;;cAoBa,YAAA,SAAqB,YAAA;EAAe,MAAA,EAAQ,SAAA;AAAA;EAAA,YAC3C,iBAAA,CAAA;;;;;;;;;;;;;UAgBE,iBAAA;EAmBD,kBAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAY,UAAA,EACZ,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,cAAA;EAgBE,yBAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,qBAAA;EAqBE,iCAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,sBAAA;EA6BE,mBAAA,CACX,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,yBAAA;EAeE,0BAAA,CACX,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,sBAAA;AAAA"}
1
+ {"version":3,"file":"discovery-sdk.d.mts","names":[],"sources":["../../src/discovery-sdk/discovery-sdk.ts"],"mappings":";;;;;;;;cA0Ba,YAAA,SAAqB,YAAA;EAAe,MAAA,EAAQ,SAAA;AAAA;EAAA,YAC3C,iBAAA,CAAA;EADY;;;;;;;;;;;;EAAA,QAiBV,iBAAA;EAmBD,kBAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAY,UAAA,EACZ,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,cAAA;EAgBE,yBAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,qBAAA;EAiBE,qBAAA,CACX,OAAA,UACA,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,qBAAA;EAiBE,kBAAA,CACX,YAAA,EAAc,aAAA,EACd,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,qBAAA;EAqBE,iCAAA,CACX,OAAA,EAAS,OAAA,EACT,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,sBAAA;EA6BE,mBAAA,CACX,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,yBAAA;EAeE,0BAAA,CACX,UAAA,GAAa,UAAA,GACZ,OAAA,CAAQ,sBAAA;AAAA"}
@@ -1,7 +1,10 @@
1
1
  import { CONTRACT_NAMES } from "../common/constants/contract-names.mjs";
2
+ import { invariantArgument } from "../common/utils/sdk-error.mjs";
2
3
  import { CsmSDKModule } from "../common/class-primitives/csm-sdk-module.mjs";
3
4
  import { onRevertEmptyList } from "../common/utils/on-error.mjs";
5
+ import { OPERATOR_TYPE_MODULE } from "../common/constants/operator-types.mjs";
4
6
  import { ROLES } from "../common/constants/roles.mjs";
7
+ import { getCurveIdByOperatorType } from "../common/utils/operator-type-utils.mjs";
5
8
  import { ErrorHandler } from "../common/decorators/error-handler.mjs";
6
9
  import { Logger } from "../common/decorators/logger.mjs";
7
10
  import { byTotalCount, iteratePages, onePage } from "./iterate-pages.mjs";
@@ -89,8 +92,8 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError("Cannot use
89
92
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
90
93
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
91
94
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
92
- var _getOperatorsWithLockedBond_dec, _getAllNodeOperators_dec, _getNodeOperatorsByProposedAddress_dec, _getNodeOperatorsByAddress_dec, _getNodeOperatorIds_dec, _a, _init;
93
- var DiscoverySDK = class extends (_a = CsmSDKModule, _getNodeOperatorIds_dec = [Logger("Views:"), ErrorHandler()], _getNodeOperatorsByAddress_dec = [Logger("Views:"), ErrorHandler()], _getNodeOperatorsByProposedAddress_dec = [Logger("Views:"), ErrorHandler()], _getAllNodeOperators_dec = [Logger("Views:"), ErrorHandler()], _getOperatorsWithLockedBond_dec = [Logger("Views:"), ErrorHandler()], _a) {
95
+ var _getOperatorsWithLockedBond_dec, _getAllNodeOperators_dec, _getNodeOperatorsByProposedAddress_dec, _getOperatorsByType_dec, _getOperatorsByCurveId_dec, _getNodeOperatorsByAddress_dec, _getNodeOperatorIds_dec, _a, _init;
96
+ var DiscoverySDK = class extends (_a = CsmSDKModule, _getNodeOperatorIds_dec = [Logger("Views:"), ErrorHandler()], _getNodeOperatorsByAddress_dec = [Logger("Views:"), ErrorHandler()], _getOperatorsByCurveId_dec = [Logger("Views:"), ErrorHandler()], _getOperatorsByType_dec = [Logger("Views:"), ErrorHandler()], _getNodeOperatorsByProposedAddress_dec = [Logger("Views:"), ErrorHandler()], _getAllNodeOperators_dec = [Logger("Views:"), ErrorHandler()], _getOperatorsWithLockedBond_dec = [Logger("Views:"), ErrorHandler()], _a) {
94
97
  constructor() {
95
98
  super(...arguments);
96
99
  __runInitializers(_init, 5, this);
@@ -134,11 +137,21 @@ var DiscoverySDK = class extends (_a = CsmSDKModule, _getNodeOperatorIds_dec = [
134
137
  address,
135
138
  p.offset,
136
139
  p.limit
137
- ]), pagination)).map((operator) => ({
138
- ...operator,
139
- rewardsAddress: operator.rewardAddress,
140
- nodeOperatorId: operator.id
141
- }));
140
+ ]), pagination)).map(toShortInfo);
141
+ }
142
+ async getOperatorsByCurveId(curveId, pagination) {
143
+ return (await this.paginateOperators((p) => this.discoveryContract.read.getOperatorsByCurveId([
144
+ this.core.moduleId,
145
+ curveId,
146
+ p.offset,
147
+ p.limit
148
+ ]), pagination)).map(toShortInfo);
149
+ }
150
+ async getOperatorsByType(operatorType, pagination) {
151
+ invariantArgument(OPERATOR_TYPE_MODULE[operatorType] === this.core.moduleName, `Operator type "${operatorType}" does not belong to the current module (${this.core.moduleName})`);
152
+ const curveId = getCurveIdByOperatorType(this.core.chainId, operatorType);
153
+ invariantArgument(curveId !== void 0, `Operator type "${operatorType}" has no curve id for the current chain`);
154
+ return this.getOperatorsByCurveId(curveId, pagination);
142
155
  }
143
156
  async getNodeOperatorsByProposedAddress(address, pagination) {
144
157
  return (await this.paginateOperators((p) => this.discoveryContract.read.getNodeOperatorsByProposedAddress([
@@ -181,10 +194,17 @@ var DiscoverySDK = class extends (_a = CsmSDKModule, _getNodeOperatorIds_dec = [
181
194
  _init = __decoratorStart(_a);
182
195
  __decorateElement(_init, 1, "getNodeOperatorIds", _getNodeOperatorIds_dec, DiscoverySDK);
183
196
  __decorateElement(_init, 1, "getNodeOperatorsByAddress", _getNodeOperatorsByAddress_dec, DiscoverySDK);
197
+ __decorateElement(_init, 1, "getOperatorsByCurveId", _getOperatorsByCurveId_dec, DiscoverySDK);
198
+ __decorateElement(_init, 1, "getOperatorsByType", _getOperatorsByType_dec, DiscoverySDK);
184
199
  __decorateElement(_init, 1, "getNodeOperatorsByProposedAddress", _getNodeOperatorsByProposedAddress_dec, DiscoverySDK);
185
200
  __decorateElement(_init, 1, "getAllNodeOperators", _getAllNodeOperators_dec, DiscoverySDK);
186
201
  __decorateElement(_init, 1, "getOperatorsWithLockedBond", _getOperatorsWithLockedBond_dec, DiscoverySDK);
187
202
  __decoratorMetadata(_init, DiscoverySDK);
203
+ const toShortInfo = (operator) => ({
204
+ ...operator,
205
+ rewardsAddress: operator.rewardAddress,
206
+ nodeOperatorId: operator.id
207
+ });
188
208
  //#endregion
189
209
  export { DiscoverySDK };
190
210
 
@@ -1 +1 @@
1
- {"version":3,"file":"discovery-sdk.mjs","names":[],"sources":["../../src/discovery-sdk/discovery-sdk.ts"],"sourcesContent":["import { Address, isAddressEqual } from 'viem';\nimport { CsmSDKModule } from '../common/class-primitives/csm-sdk-module';\nimport { CONTRACT_NAMES } from '../common/constants/index';\nimport { ROLES } from '../common/constants/roles';\nimport { ErrorHandler, Logger } from '../common/decorators/index';\nimport {\n NodeOperatorId,\n NodeOperatorInviteInfo,\n NodeOperatorShortInfo,\n} from '../common/types';\nimport { onRevertEmptyList } from '../common/utils/on-error';\nimport { ModuleSDK } from '../module-sdk/module-sdk';\nimport { byTotalCount, iteratePages, onePage } from './iterate-pages';\nimport {\n NodeOperatorDiscoveryInfo,\n NodeOperatorLockedBond,\n Pagination,\n SearchMode,\n} from './types';\n\nexport class DiscoverySDK extends CsmSDKModule<{ module: ModuleSDK }> {\n private get discoveryContract() {\n return this.core.getContract(CONTRACT_NAMES.smDiscovery);\n }\n\n /**\n * Paginates through operators using the provided fetch function.\n *\n * Behavior:\n * - Without pagination parameter: Fetches ALL operators by querying total count and iterating through all pages\n * - With pagination parameter: Fetches ONLY ONE PAGE at the specified offset/limit\n *\n * @param fetchPage - Function to fetch a page of operators\n * @param pagination - Optional pagination parameters (offset, limit)\n * @param defaultLimit - Optional default limit when pagination is not provided (defaults to 1000)\n * @returns Array of all fetched operators\n */\n private async paginateOperators<T>(\n fetchPage: (p: Pagination) => Promise<readonly T[] | T[]>,\n pagination?: Pagination,\n defaultLimit = 1000n,\n ): Promise<T[]> {\n const limit = pagination?.limit ?? defaultLimit;\n const offset = pagination?.offset ?? 0n;\n\n const getNextOffset = pagination\n ? onePage\n : byTotalCount(await this.bus.module.getOperatorsCount());\n\n return iteratePages(fetchPage, { offset, limit }, getNextOffset).catch(\n onRevertEmptyList<T>,\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorIds(\n address: Address,\n searchMode: SearchMode = SearchMode.CURRENT_ADDRESSES,\n pagination?: Pagination,\n ): Promise<NodeOperatorId[]> {\n return this.paginateOperators(\n (p) =>\n this.discoveryContract.read.findNodeOperatorsByAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n searchMode,\n ]),\n pagination,\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorsByAddress(\n address: Address,\n pagination?: Pagination,\n ): Promise<NodeOperatorShortInfo[]> {\n const operators = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getNodeOperatorsByAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return operators.map((operator) => ({\n ...operator,\n rewardsAddress: operator.rewardAddress,\n nodeOperatorId: operator.id,\n }));\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorsByProposedAddress(\n address: Address,\n pagination?: Pagination,\n ): Promise<NodeOperatorInviteInfo[]> {\n const operators = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getNodeOperatorsByProposedAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return operators.flatMap((operator) =>\n [\n { address: operator.proposedManagerAddress, role: ROLES.MANAGER },\n { address: operator.proposedRewardAddress, role: ROLES.REWARDS },\n ]\n .filter((item) => isAddressEqual(item.address, address))\n .map((item) => ({\n nodeOperatorId: operator.id,\n extendedManagerPermissions: operator.extendedManagerPermissions,\n curveId: operator.curveId,\n role: item.role,\n })),\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getAllNodeOperators(\n pagination?: Pagination,\n ): Promise<NodeOperatorDiscoveryInfo[]> {\n return this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getAllNodeOperators([\n this.core.moduleId,\n p.offset,\n p.limit,\n ]),\n pagination,\n 500n, // Custom default limit for bulk fetching\n ) as Promise<NodeOperatorDiscoveryInfo[]>;\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getOperatorsWithLockedBond(\n pagination?: Pagination,\n ): Promise<NodeOperatorLockedBond[]> {\n const entries = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getOperatorsWithLockedBond([\n this.core.moduleId,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return entries.map((e) => ({\n nodeOperatorId: e.id,\n locked: e.amount,\n until: Number(e.until),\n }));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"discovery-sdk.mjs","names":[],"sources":["../../src/discovery-sdk/discovery-sdk.ts"],"sourcesContent":["import { Address, isAddressEqual } from 'viem';\nimport { CsmSDKModule } from '../common/class-primitives/csm-sdk-module';\nimport {\n CONTRACT_NAMES,\n OPERATOR_TYPE,\n OPERATOR_TYPE_MODULE,\n} from '../common/constants/index';\nimport { ROLES } from '../common/constants/roles';\nimport { ErrorHandler, Logger } from '../common/decorators/index';\nimport {\n NodeOperatorId,\n NodeOperatorInviteInfo,\n NodeOperatorShortInfo,\n} from '../common/types';\nimport { getCurveIdByOperatorType } from '../common/utils/operator-type-utils';\nimport { onRevertEmptyList } from '../common/utils/on-error';\nimport { invariantArgument } from '../common/utils/sdk-error';\nimport { ModuleSDK } from '../module-sdk/module-sdk';\nimport { byTotalCount, iteratePages, onePage } from './iterate-pages';\nimport {\n NodeOperatorDiscoveryInfo,\n NodeOperatorLockedBond,\n Pagination,\n SearchMode,\n} from './types';\n\nexport class DiscoverySDK extends CsmSDKModule<{ module: ModuleSDK }> {\n private get discoveryContract() {\n return this.core.getContract(CONTRACT_NAMES.smDiscovery);\n }\n\n /**\n * Paginates through operators using the provided fetch function.\n *\n * Behavior:\n * - Without pagination parameter: Fetches ALL operators by querying total count and iterating through all pages\n * - With pagination parameter: Fetches ONLY ONE PAGE at the specified offset/limit\n *\n * @param fetchPage - Function to fetch a page of operators\n * @param pagination - Optional pagination parameters (offset, limit)\n * @param defaultLimit - Optional default limit when pagination is not provided (defaults to 1000)\n * @returns Array of all fetched operators\n */\n private async paginateOperators<T>(\n fetchPage: (p: Pagination) => Promise<readonly T[] | T[]>,\n pagination?: Pagination,\n defaultLimit = 1000n,\n ): Promise<T[]> {\n const limit = pagination?.limit ?? defaultLimit;\n const offset = pagination?.offset ?? 0n;\n\n const getNextOffset = pagination\n ? onePage\n : byTotalCount(await this.bus.module.getOperatorsCount());\n\n return iteratePages(fetchPage, { offset, limit }, getNextOffset).catch(\n onRevertEmptyList<T>,\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorIds(\n address: Address,\n searchMode: SearchMode = SearchMode.CURRENT_ADDRESSES,\n pagination?: Pagination,\n ): Promise<NodeOperatorId[]> {\n return this.paginateOperators(\n (p) =>\n this.discoveryContract.read.findNodeOperatorsByAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n searchMode,\n ]),\n pagination,\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorsByAddress(\n address: Address,\n pagination?: Pagination,\n ): Promise<NodeOperatorShortInfo[]> {\n const operators = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getNodeOperatorsByAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return operators.map(toShortInfo);\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getOperatorsByCurveId(\n curveId: bigint,\n pagination?: Pagination,\n ): Promise<NodeOperatorShortInfo[]> {\n const operators = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getOperatorsByCurveId([\n this.core.moduleId,\n curveId,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return operators.map(toShortInfo);\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getOperatorsByType(\n operatorType: OPERATOR_TYPE,\n pagination?: Pagination,\n ): Promise<NodeOperatorShortInfo[]> {\n invariantArgument(\n OPERATOR_TYPE_MODULE[operatorType] === this.core.moduleName,\n `Operator type \"${operatorType}\" does not belong to the current module (${this.core.moduleName})`,\n );\n\n const curveId = getCurveIdByOperatorType(this.core.chainId, operatorType);\n\n // Belt-and-suspenders: with the module check above this should always be\n // defined, but guard against a chain/type combo missing from the curve\n // id table (e.g. a newly added OPERATOR_TYPE not yet backfilled).\n invariantArgument(\n curveId !== undefined,\n `Operator type \"${operatorType}\" has no curve id for the current chain`,\n );\n\n return this.getOperatorsByCurveId(curveId, pagination);\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getNodeOperatorsByProposedAddress(\n address: Address,\n pagination?: Pagination,\n ): Promise<NodeOperatorInviteInfo[]> {\n const operators = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getNodeOperatorsByProposedAddress([\n this.core.moduleId,\n address,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return operators.flatMap((operator) =>\n [\n { address: operator.proposedManagerAddress, role: ROLES.MANAGER },\n { address: operator.proposedRewardAddress, role: ROLES.REWARDS },\n ]\n .filter((item) => isAddressEqual(item.address, address))\n .map((item) => ({\n nodeOperatorId: operator.id,\n extendedManagerPermissions: operator.extendedManagerPermissions,\n curveId: operator.curveId,\n role: item.role,\n })),\n );\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getAllNodeOperators(\n pagination?: Pagination,\n ): Promise<NodeOperatorDiscoveryInfo[]> {\n return this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getAllNodeOperators([\n this.core.moduleId,\n p.offset,\n p.limit,\n ]),\n pagination,\n 500n, // Custom default limit for bulk fetching\n ) as Promise<NodeOperatorDiscoveryInfo[]>;\n }\n\n @Logger('Views:')\n @ErrorHandler()\n public async getOperatorsWithLockedBond(\n pagination?: Pagination,\n ): Promise<NodeOperatorLockedBond[]> {\n const entries = await this.paginateOperators(\n (p) =>\n this.discoveryContract.read.getOperatorsWithLockedBond([\n this.core.moduleId,\n p.offset,\n p.limit,\n ]),\n pagination,\n );\n\n return entries.map((e) => ({\n nodeOperatorId: e.id,\n locked: e.amount,\n until: Number(e.until),\n }));\n }\n}\n\n/** Shape of the `NodeOperatorShort` struct shared by SMDiscovery ABI methods. */\ntype NodeOperatorShort = {\n id: bigint;\n managerAddress: Address;\n rewardAddress: Address;\n extendedManagerPermissions: boolean;\n curveId: bigint;\n};\n\nconst toShortInfo = (operator: NodeOperatorShort): NodeOperatorShortInfo => ({\n ...operator,\n rewardsAddress: operator.rewardAddress,\n nodeOperatorId: operator.id,\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lidofinance/lido-csm-sdk",
3
- "version": "2.0.0-alpha.72",
3
+ "version": "2.0.0-alpha.74",
4
4
  "license": "GPL-3.0-or-later",
5
5
  "sideEffects": false,
6
6
  "type": "module",