@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.
- package/dist/core-sdk/core-sdk.d.cts +27 -27
- package/dist/core-sdk/core-sdk.d.mts +27 -27
- package/dist/deposit-data-sdk/deposit-data-sdk.cjs +2 -1
- package/dist/deposit-data-sdk/deposit-data-sdk.cjs.map +1 -1
- package/dist/deposit-data-sdk/deposit-data-sdk.d.cts +1 -0
- package/dist/deposit-data-sdk/deposit-data-sdk.d.cts.map +1 -1
- package/dist/deposit-data-sdk/deposit-data-sdk.d.mts +1 -0
- package/dist/deposit-data-sdk/deposit-data-sdk.d.mts.map +1 -1
- package/dist/deposit-data-sdk/deposit-data-sdk.mjs +2 -1
- package/dist/deposit-data-sdk/deposit-data-sdk.mjs.map +1 -1
- package/dist/deposit-data-sdk/types.cjs.map +1 -1
- package/dist/deposit-data-sdk/types.d.cts +1 -0
- package/dist/deposit-data-sdk/types.d.cts.map +1 -1
- package/dist/deposit-data-sdk/types.d.mts +1 -0
- package/dist/deposit-data-sdk/types.d.mts.map +1 -1
- package/dist/deposit-data-sdk/types.mjs.map +1 -1
- package/dist/deposit-data-sdk/validator.cjs +1 -0
- package/dist/deposit-data-sdk/validator.cjs.map +1 -1
- package/dist/deposit-data-sdk/validator.mjs +1 -0
- package/dist/deposit-data-sdk/validator.mjs.map +1 -1
- package/dist/discovery-sdk/discovery-sdk.cjs +27 -7
- package/dist/discovery-sdk/discovery-sdk.cjs.map +1 -1
- package/dist/discovery-sdk/discovery-sdk.d.cts +3 -0
- package/dist/discovery-sdk/discovery-sdk.d.cts.map +1 -1
- package/dist/discovery-sdk/discovery-sdk.d.mts +3 -0
- package/dist/discovery-sdk/discovery-sdk.d.mts.map +1 -1
- package/dist/discovery-sdk/discovery-sdk.mjs +27 -7
- package/dist/discovery-sdk/discovery-sdk.mjs.map +1 -1
- 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" | "
|
|
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, "
|
|
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" | "
|
|
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, "
|
|
8096
|
-
writeContractSync: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "
|
|
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" | "
|
|
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, "
|
|
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" | "
|
|
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, "
|
|
8096
|
-
writeContractSync: <const abi extends Abi | readonly unknown[], functionName extends _$viem.ContractFunctionName<abi, "
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,kBAAA,sBAAA,wBAAA,0BAAA,kBAAA,gBAAA,uBAAA,IAAA;AAwBO,IAAM,iBAAN,eAA6B,KAAA,uBAAA,cAKlC,wBAAA,CAAC,eAAA,OAAO,SAAQ,CAAA,EAKhB,iBAAA,CAAC,eAAA,OAAO,SAAQ,CAAA,EAKhB,mBAAA,CAAC,eAAA,OAAO,SAAQ,CAAA,EAMhB,2BAAA,CAAC,eAAA,OAAO,SAAQ,CAAA,
|
|
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,
|
|
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,
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,
|
|
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":"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"}
|
|
@@ -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"}
|
|
@@ -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"}
|
|
@@ -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(
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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":"
|
|
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":"
|
|
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(
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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 {
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,iCAAA,0BAAA,wCAAA,yBAAA,4BAAA,gCAAA,yBAAA,IAAA;AA0BO,IAAM,eAAN,eAA2B,KAAA,cAkChC,0BAAA,CAAC,OAAO,SAAQ,EACf,cAAa,CAAA,EAmBd,iCAAA,CAAC,OAAO,SAAQ,EACf,cAAa,CAAA,EAmBd,6BAAA,CAAC,OAAO,SAAQ,EACf,cAAa,CAAA,EAmBd,0BAAA,CAAC,OAAO,SAAQ,EACf,cAAa,CAAA,EAuBd,yCAAA,CAAC,OAAO,SAAQ,EACf,cAAa,CAAA,EA+Bd,2BAAA,CAAC,OAAO,SAAQ,EACf,cAAa,CAAA,EAgBd,kCAAA,CAAC,OAAO,SAAQ,EACf,cAAa,CAAA,EAxKkB,IAAoC;CAA/D,cAAA;AAAA,QAAA,GAAA,UAAA;AAAA,oBAAA,OAAA,GAAA,KAAA;;CACL,IAAY,oBAAoB;AAC9B,SAAO,KAAK,KAAK,YAAY,eAAe,YAAW;;;;;;;;;;;;;;CAezD,MAAc,kBACZ,WACA,YACA,eAAe,OACD;EACd,MAAM,QAAQ,YAAY,SAAS;EACnC,MAAM,SAAS,YAAY,UAAU;EAErC,MAAM,gBAAgB,aAClB,UACA,aAAa,MAAM,KAAK,IAAI,OAAO,mBAAmB,CAAA;AAE1D,SAAO,aAAa,WAAW;GAAE;GAAQ;GAAM,EAAG,cAAa,CAAE,MAC/D,kBACF;;CAKF,MAAa,mBACX,SACA,aAAyB,WAAW,mBACpC,YAC2B;AAC3B,SAAO,KAAK,mBACT,MACC,KAAK,kBAAkB,KAAK,2BAA2B;GACrD,KAAK,KAAK;GACV;GACA,EAAE;GACF,EAAE;GACF;GACD,CAAA,EACH,WACF;;CAKF,MAAa,0BACX,SACA,YACkC;AAYlC,UAXkB,MAAM,KAAK,mBAC1B,MACC,KAAK,kBAAkB,KAAK,0BAA0B;GACpD,KAAK,KAAK;GACV;GACA,EAAE;GACF,EAAE;GACH,CAAA,EACH,WACF,EAEiB,IAAI,YAAW;;CAKlC,MAAa,sBACX,SACA,YACkC;AAYlC,UAXkB,MAAM,KAAK,mBAC1B,MACC,KAAK,kBAAkB,KAAK,sBAAsB;GAChD,KAAK,KAAK;GACV;GACA,EAAE;GACF,EAAE;GACH,CAAA,EACH,WACF,EAEiB,IAAI,YAAW;;CAKlC,MAAa,mBACX,cACA,YACkC;AAClC,oBACE,qBAAqB,kBAAkB,KAAK,KAAK,YACjD,kBAAkB,aAAY,2CAA4C,KAAK,KAAK,WAAU,GAChG;EAEA,MAAM,UAAU,yBAAyB,KAAK,KAAK,SAAS,aAAY;AAKxE,oBACE,YAAY,KAAA,GACZ,kBAAkB,aAAY,yCAChC;AAEA,SAAO,KAAK,sBAAsB,SAAS,WAAU;;CAKvD,MAAa,kCACX,SACA,YACmC;AAYnC,UAXkB,MAAM,KAAK,mBAC1B,MACC,KAAK,kBAAkB,KAAK,kCAAkC;GAC5D,KAAK,KAAK;GACV;GACA,EAAE;GACF,EAAE;GACH,CAAA,EACH,WACF,EAEiB,SAAS,aACxB,CACE;GAAE,SAAS,SAAS;GAAwB,MAAM,MAAM;GAAQ,EAChE;GAAE,SAAS,SAAS;GAAuB,MAAM,MAAM;GAAQ,CACjE,CACG,QAAQ,SAAS,eAAe,KAAK,SAAS,QAAQ,CAAA,CACtD,KAAK,UAAU;GACd,gBAAgB,SAAS;GACzB,4BAA4B,SAAS;GACrC,SAAS,SAAS;GAClB,MAAM,KAAK;GACb,EAAE,CACN;;CAKF,MAAa,oBACX,YACsC;AACtC,SAAO,KAAK,mBACT,MACC,KAAK,kBAAkB,KAAK,oBAAoB;GAC9C,KAAK,KAAK;GACV,EAAE;GACF,EAAE;GACH,CAAA,EACH,YACA,KACF;;CAKF,MAAa,2BACX,YACmC;AAWnC,UAVgB,MAAM,KAAK,mBACxB,MACC,KAAK,kBAAkB,KAAK,2BAA2B;GACrD,KAAK,KAAK;GACV,EAAE;GACF,EAAE;GACH,CAAA,EACH,WACF,EAEe,KAAK,OAAO;GACzB,gBAAgB,EAAE;GAClB,QAAQ,EAAE;GACV,OAAO,OAAO,EAAE,MAAK;GACvB,EAAE;;;AA1LC,QAAA,iBAAA,GAAA;AAoCL,kBAAA,OAAA,GAAa,sBAFb,yBAlCW,aAAA;AAwDX,kBAAA,OAAA,GAAa,6BAFb,gCAtDW,aAAA;AA4EX,kBAAA,OAAA,GAAa,yBAFb,4BA1EW,aAAA;AAgGX,kBAAA,OAAA,GAAa,sBAFb,yBA9FW,aAAA;AAwHX,kBAAA,OAAA,GAAa,qCAFb,wCAtHW,aAAA;AAwJX,kBAAA,OAAA,GAAa,uBAFb,0BAtJW,aAAA;AAyKX,kBAAA,OAAA,GAAa,8BAFb,iCAvKW,aAAA;AAAN,oBAAA,OAAM,aAAA;AAuMb,MAAM,eAAe,cAAwD;CAC3E,GAAG;CACH,gBAAgB,SAAS;CACzB,gBAAgB,SAAS;CAC3B"}
|