@0xsequence/wallet-wdk 3.0.0-beta.17 → 3.0.0-beta.18
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +12 -0
- package/dist/sequence/manager.d.ts +2 -0
- package/dist/sequence/manager.d.ts.map +1 -1
- package/dist/sequence/manager.js +1 -0
- package/dist/sequence/recovery.d.ts +2 -0
- package/dist/sequence/recovery.d.ts.map +1 -1
- package/dist/sequence/recovery.js +75 -14
- package/package.json +6 -6
- package/src/sequence/manager.ts +2 -0
- package/src/sequence/recovery.ts +157 -52
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @0xsequence/wallet-wdk
|
|
2
2
|
|
|
3
|
+
## 3.0.0-beta.18
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- multicall3 optimization
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @0xsequence/guard@3.0.0-beta.18
|
|
10
|
+
- @0xsequence/identity-instrument@3.0.0-beta.18
|
|
11
|
+
- @0xsequence/relayer@3.0.0-beta.18
|
|
12
|
+
- @0xsequence/wallet-core@3.0.0-beta.18
|
|
13
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.18
|
|
14
|
+
|
|
3
15
|
## 3.0.0-beta.17
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -159,6 +159,7 @@ export declare const ManagerOptionsDefaults: {
|
|
|
159
159
|
defaultRecoverySettings: {
|
|
160
160
|
requiredDeltaTime: bigint;
|
|
161
161
|
minTimestamp: bigint;
|
|
162
|
+
includeTestnets: boolean;
|
|
162
163
|
};
|
|
163
164
|
multiInjectedProviderDiscovery: boolean;
|
|
164
165
|
identity: {
|
|
@@ -185,6 +186,7 @@ export declare function applyManagerOptionsDefaults(options?: ManagerOptions): R
|
|
|
185
186
|
export type RecoverySettings = {
|
|
186
187
|
requiredDeltaTime: bigint;
|
|
187
188
|
minTimestamp: bigint;
|
|
189
|
+
includeTestnets?: boolean;
|
|
188
190
|
};
|
|
189
191
|
export type Databases = {
|
|
190
192
|
readonly encryptedPks: CoreSigners.Pk.Encrypted.EncryptedPksDb;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/sequence/manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/sequence/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/sequence/manager.js
CHANGED
|
@@ -178,6 +178,8 @@ export declare class Recovery implements RecoveryInterface {
|
|
|
178
178
|
onQueuedPayloadsUpdate(wallet: Address.Address | undefined, cb: (payloads: QueuedRecoveryPayload[]) => void, trigger?: boolean): () => void;
|
|
179
179
|
updateQueuedPayloads(): Promise<void>;
|
|
180
180
|
fetchQueuedPayloads(wallet: Address.Address, chainId?: number): Promise<QueuedRecoveryPayload[]>;
|
|
181
|
+
private fetchTotalQueuedPayloadsBatched;
|
|
182
|
+
private fetchTotalQueuedPayloadsFallback;
|
|
181
183
|
encodeRecoverySignature(imageHash: Hex.Hex, signer: Address.Address): Promise<import("ox/Bytes").Bytes>;
|
|
182
184
|
}
|
|
183
185
|
//# sourceMappingURL=recovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/sequence/recovery.ts"],"names":[],"mappings":"AACA,OAAO,EAA8C,OAAO,EAAE,MAAM,+BAA+B,CAAA;AACnG,OAAO,
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/sequence/recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { Envelope } from '@0xsequence/wallet-core';
|
|
2
2
|
import { Config, Constants, Extensions, GenericTree, Payload } from '@0xsequence/wallet-primitives';
|
|
3
|
-
import { Address, Provider, RpcTransport } from 'ox';
|
|
3
|
+
import { Abi, AbiFunction, Address, Hex, Provider, RpcTransport } from 'ox';
|
|
4
4
|
import { MnemonicHandler } from './handlers/mnemonic.js';
|
|
5
5
|
import { Actions } from './types/index.js';
|
|
6
6
|
import { Kinds } from './types/signer.js';
|
|
7
|
+
const AGGREGATE3 = Abi.from([
|
|
8
|
+
'function aggregate3((address target, bool allowFailure, bytes callData)[] calls) external payable returns ((bool success, bytes returnData)[])',
|
|
9
|
+
])[0];
|
|
7
10
|
export class Recovery {
|
|
8
11
|
shared;
|
|
9
12
|
constructor(shared) {
|
|
@@ -264,9 +267,14 @@ export class Recovery {
|
|
|
264
267
|
async fetchQueuedPayloads(wallet, chainId) {
|
|
265
268
|
// Create providers for each network
|
|
266
269
|
const providers = this.shared.sequence.networks
|
|
267
|
-
.filter((network) =>
|
|
270
|
+
.filter((network) => chainId
|
|
271
|
+
? network.chainId === chainId
|
|
272
|
+
: !this.shared.sequence.defaultRecoverySettings.includeTestnets
|
|
273
|
+
? network.type !== 'testnet'
|
|
274
|
+
: true)
|
|
268
275
|
.map((network) => ({
|
|
269
276
|
chainId: network.chainId,
|
|
277
|
+
multicall3Address: network.contracts?.multicall3,
|
|
270
278
|
provider: Provider.from(RpcTransport.fromHttp(network.rpcUrl)),
|
|
271
279
|
}));
|
|
272
280
|
// See if they have any recover signers
|
|
@@ -274,14 +282,34 @@ export class Recovery {
|
|
|
274
282
|
if (!signers || signers.length === 0) {
|
|
275
283
|
return [];
|
|
276
284
|
}
|
|
285
|
+
const recoveryExtension = this.shared.sequence.extensions.recovery;
|
|
277
286
|
const payloads = [];
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
287
|
+
await Promise.all(providers.map(async ({ chainId, provider, multicall3Address }) => {
|
|
288
|
+
try {
|
|
289
|
+
let totalPayloadsBySigner;
|
|
290
|
+
if (multicall3Address) {
|
|
291
|
+
try {
|
|
292
|
+
// Batch all totalQueuedPayloads calls for every signer into a single Multicall3 request.
|
|
293
|
+
// This reduces N signer calls per network down to 1 call per network.
|
|
294
|
+
totalPayloadsBySigner = await this.fetchTotalQueuedPayloadsBatched(provider, recoveryExtension, wallet, signers, multicall3Address);
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
console.error(`Recovery.fetchQueuedPayloads multicall3 failed for chainId ${chainId}, retrying with individual calls:`, err);
|
|
298
|
+
totalPayloadsBySigner = await this.fetchTotalQueuedPayloadsFallback(provider, recoveryExtension, wallet, signers);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
totalPayloadsBySigner = await this.fetchTotalQueuedPayloadsFallback(provider, recoveryExtension, wallet, signers);
|
|
303
|
+
}
|
|
304
|
+
for (let s = 0; s < signers.length; s++) {
|
|
305
|
+
const signer = signers[s];
|
|
306
|
+
const totalPayloads = totalPayloadsBySigner[s];
|
|
307
|
+
if (totalPayloads === 0n)
|
|
308
|
+
continue;
|
|
309
|
+
// Only make individual calls for the rare case where payloads actually exist
|
|
282
310
|
for (let i = 0n; i < totalPayloads; i++) {
|
|
283
|
-
const payloadHash = await Extensions.Recovery.queuedPayloadHashOf(provider,
|
|
284
|
-
const timestamp = await Extensions.Recovery.timestampForQueuedPayload(provider,
|
|
311
|
+
const payloadHash = await Extensions.Recovery.queuedPayloadHashOf(provider, recoveryExtension, wallet, signer.address, i);
|
|
312
|
+
const timestamp = await Extensions.Recovery.timestampForQueuedPayload(provider, recoveryExtension, wallet, signer.address, payloadHash);
|
|
285
313
|
const payload = await this.shared.sequence.stateProvider.getPayload(payloadHash);
|
|
286
314
|
// If ready, we need to check if it was executed already
|
|
287
315
|
// for this, we check if the wallet nonce for the given space
|
|
@@ -294,11 +322,10 @@ export class Recovery {
|
|
|
294
322
|
}
|
|
295
323
|
// The id is the index + signer address + chainId + wallet address
|
|
296
324
|
const id = `${i}-${signer.address}-${chainId}-${wallet}`;
|
|
297
|
-
// Create a new payload
|
|
298
325
|
const payloadEntry = {
|
|
299
326
|
id,
|
|
300
327
|
index: i,
|
|
301
|
-
recoveryModule:
|
|
328
|
+
recoveryModule: recoveryExtension,
|
|
302
329
|
wallet: wallet,
|
|
303
330
|
signer: signer.address,
|
|
304
331
|
chainId,
|
|
@@ -310,13 +337,47 @@ export class Recovery {
|
|
|
310
337
|
payloads.push(payloadEntry);
|
|
311
338
|
}
|
|
312
339
|
}
|
|
313
|
-
catch (err) {
|
|
314
|
-
console.error('Recovery.fetchQueuedPayloads error', err);
|
|
315
|
-
}
|
|
316
340
|
}
|
|
317
|
-
|
|
341
|
+
catch (err) {
|
|
342
|
+
console.error(`Recovery.fetchQueuedPayloads error for chainId ${chainId}:`, err);
|
|
343
|
+
}
|
|
344
|
+
}));
|
|
318
345
|
return payloads;
|
|
319
346
|
}
|
|
347
|
+
async fetchTotalQueuedPayloadsBatched(provider, recoveryExtension, wallet, signers, multicall3Address) {
|
|
348
|
+
const calls = signers.map((signer) => ({
|
|
349
|
+
target: recoveryExtension,
|
|
350
|
+
allowFailure: true,
|
|
351
|
+
callData: AbiFunction.encodeData(Extensions.Recovery.TOTAL_QUEUED_PAYLOADS, [wallet, signer.address]),
|
|
352
|
+
}));
|
|
353
|
+
const response = await provider.request({
|
|
354
|
+
method: 'eth_call',
|
|
355
|
+
params: [
|
|
356
|
+
{
|
|
357
|
+
to: multicall3Address,
|
|
358
|
+
data: AbiFunction.encodeData(AGGREGATE3, [calls]),
|
|
359
|
+
},
|
|
360
|
+
'latest',
|
|
361
|
+
],
|
|
362
|
+
});
|
|
363
|
+
const results = AbiFunction.decodeResult(AGGREGATE3, response);
|
|
364
|
+
return results.map((result) => {
|
|
365
|
+
if (!result.success || result.returnData === '0x') {
|
|
366
|
+
return 0n;
|
|
367
|
+
}
|
|
368
|
+
return Hex.toBigInt(result.returnData);
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
fetchTotalQueuedPayloadsFallback = async (provider, recoveryExtension, wallet, signers) => {
|
|
372
|
+
const result = signers.map(() => 0n);
|
|
373
|
+
// Fallback to individual calls if the multicall3 call fails
|
|
374
|
+
for (let s = 0; s < signers.length; s++) {
|
|
375
|
+
const signer = signers[s];
|
|
376
|
+
const totalPayloads = await Extensions.Recovery.totalQueuedPayloads(provider, recoveryExtension, wallet, signer.address);
|
|
377
|
+
result[s] = totalPayloads;
|
|
378
|
+
}
|
|
379
|
+
return result;
|
|
380
|
+
};
|
|
320
381
|
async encodeRecoverySignature(imageHash, signer) {
|
|
321
382
|
const genericTree = await this.shared.sequence.stateProvider.getTree(imageHash);
|
|
322
383
|
if (!genericTree) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xsequence/wallet-wdk",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.18",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -29,11 +29,11 @@
|
|
|
29
29
|
"jwt-decode": "^4.0.0",
|
|
30
30
|
"ox": "^0.9.17",
|
|
31
31
|
"uuid": "^13.0.0",
|
|
32
|
-
"@0xsequence/
|
|
33
|
-
"@0xsequence/
|
|
34
|
-
"@0xsequence/relayer": "^3.0.0-beta.
|
|
35
|
-
"@0xsequence/
|
|
36
|
-
"@0xsequence/wallet-primitives": "^3.0.0-beta.
|
|
32
|
+
"@0xsequence/guard": "^3.0.0-beta.18",
|
|
33
|
+
"@0xsequence/identity-instrument": "^3.0.0-beta.18",
|
|
34
|
+
"@0xsequence/relayer": "^3.0.0-beta.18",
|
|
35
|
+
"@0xsequence/wallet-core": "^3.0.0-beta.18",
|
|
36
|
+
"@0xsequence/wallet-primitives": "^3.0.0-beta.18"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
39
|
"build": "tsc",
|
package/src/sequence/manager.ts
CHANGED
|
@@ -233,6 +233,7 @@ export const ManagerOptionsDefaults = {
|
|
|
233
233
|
defaultRecoverySettings: {
|
|
234
234
|
requiredDeltaTime: 2592000n, // 30 days (in seconds)
|
|
235
235
|
minTimestamp: 0n,
|
|
236
|
+
includeTestnets: false,
|
|
236
237
|
},
|
|
237
238
|
|
|
238
239
|
multiInjectedProviderDiscovery: true,
|
|
@@ -369,6 +370,7 @@ export function applyManagerOptionsDefaults(options?: ManagerOptions): ResolvedM
|
|
|
369
370
|
export type RecoverySettings = {
|
|
370
371
|
requiredDeltaTime: bigint
|
|
371
372
|
minTimestamp: bigint
|
|
373
|
+
includeTestnets?: boolean
|
|
372
374
|
}
|
|
373
375
|
|
|
374
376
|
export type Databases = {
|
package/src/sequence/recovery.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { Envelope } from '@0xsequence/wallet-core'
|
|
2
2
|
import { Config, Constants, Extensions, GenericTree, Payload } from '@0xsequence/wallet-primitives'
|
|
3
|
-
import { Address, Hex, Provider, RpcTransport } from 'ox'
|
|
3
|
+
import { Abi, AbiFunction, Address, Hex, Provider, RpcTransport } from 'ox'
|
|
4
4
|
import { MnemonicHandler } from './handlers/mnemonic.js'
|
|
5
5
|
import { Shared } from './manager.js'
|
|
6
6
|
import { Actions, Module } from './types/index.js'
|
|
7
7
|
import { QueuedRecoveryPayload } from './types/recovery.js'
|
|
8
8
|
import { Kinds, RecoverySigner } from './types/signer.js'
|
|
9
9
|
|
|
10
|
+
const AGGREGATE3 = Abi.from([
|
|
11
|
+
'function aggregate3((address target, bool allowFailure, bytes callData)[] calls) external payable returns ((bool success, bytes returnData)[])',
|
|
12
|
+
])[0]!
|
|
13
|
+
|
|
10
14
|
export interface RecoveryInterface {
|
|
11
15
|
/**
|
|
12
16
|
* Retrieves the list of configured recovery signers for a given wallet.
|
|
@@ -514,9 +518,16 @@ export class Recovery implements RecoveryInterface {
|
|
|
514
518
|
async fetchQueuedPayloads(wallet: Address.Address, chainId?: number): Promise<QueuedRecoveryPayload[]> {
|
|
515
519
|
// Create providers for each network
|
|
516
520
|
const providers = this.shared.sequence.networks
|
|
517
|
-
.filter((network) =>
|
|
521
|
+
.filter((network) =>
|
|
522
|
+
chainId
|
|
523
|
+
? network.chainId === chainId
|
|
524
|
+
: !this.shared.sequence.defaultRecoverySettings.includeTestnets
|
|
525
|
+
? network.type !== 'testnet'
|
|
526
|
+
: true,
|
|
527
|
+
)
|
|
518
528
|
.map((network) => ({
|
|
519
529
|
chainId: network.chainId,
|
|
530
|
+
multicall3Address: network.contracts?.multicall3,
|
|
520
531
|
provider: Provider.from(RpcTransport.fromHttp(network.rpcUrl)),
|
|
521
532
|
}))
|
|
522
533
|
|
|
@@ -526,73 +537,167 @@ export class Recovery implements RecoveryInterface {
|
|
|
526
537
|
return []
|
|
527
538
|
}
|
|
528
539
|
|
|
540
|
+
const recoveryExtension = this.shared.sequence.extensions.recovery
|
|
529
541
|
const payloads: QueuedRecoveryPayload[] = []
|
|
530
542
|
|
|
531
|
-
|
|
532
|
-
|
|
543
|
+
await Promise.all(
|
|
544
|
+
providers.map(async ({ chainId, provider, multicall3Address }) => {
|
|
533
545
|
try {
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
546
|
+
let totalPayloadsBySigner: bigint[]
|
|
547
|
+
|
|
548
|
+
if (multicall3Address) {
|
|
549
|
+
try {
|
|
550
|
+
// Batch all totalQueuedPayloads calls for every signer into a single Multicall3 request.
|
|
551
|
+
// This reduces N signer calls per network down to 1 call per network.
|
|
552
|
+
totalPayloadsBySigner = await this.fetchTotalQueuedPayloadsBatched(
|
|
553
|
+
provider,
|
|
554
|
+
recoveryExtension,
|
|
555
|
+
wallet,
|
|
556
|
+
signers,
|
|
557
|
+
multicall3Address,
|
|
558
|
+
)
|
|
559
|
+
} catch (err) {
|
|
560
|
+
console.error(
|
|
561
|
+
`Recovery.fetchQueuedPayloads multicall3 failed for chainId ${chainId}, retrying with individual calls:`,
|
|
562
|
+
err,
|
|
563
|
+
)
|
|
564
|
+
totalPayloadsBySigner = await this.fetchTotalQueuedPayloadsFallback(
|
|
565
|
+
provider,
|
|
566
|
+
recoveryExtension,
|
|
567
|
+
wallet,
|
|
568
|
+
signers,
|
|
569
|
+
)
|
|
570
|
+
}
|
|
571
|
+
} else {
|
|
572
|
+
totalPayloadsBySigner = await this.fetchTotalQueuedPayloadsFallback(
|
|
551
573
|
provider,
|
|
552
|
-
|
|
574
|
+
recoveryExtension,
|
|
553
575
|
wallet,
|
|
554
|
-
|
|
555
|
-
payloadHash,
|
|
576
|
+
signers,
|
|
556
577
|
)
|
|
578
|
+
}
|
|
557
579
|
|
|
558
|
-
|
|
580
|
+
for (let s = 0; s < signers.length; s++) {
|
|
581
|
+
const signer = signers[s]!
|
|
582
|
+
const totalPayloads = totalPayloadsBySigner[s]!
|
|
583
|
+
if (totalPayloads === 0n) continue
|
|
584
|
+
|
|
585
|
+
// Only make individual calls for the rare case where payloads actually exist
|
|
586
|
+
for (let i = 0n; i < totalPayloads; i++) {
|
|
587
|
+
const payloadHash = await Extensions.Recovery.queuedPayloadHashOf(
|
|
588
|
+
provider,
|
|
589
|
+
recoveryExtension,
|
|
590
|
+
wallet,
|
|
591
|
+
signer.address,
|
|
592
|
+
i,
|
|
593
|
+
)
|
|
594
|
+
|
|
595
|
+
const timestamp = await Extensions.Recovery.timestampForQueuedPayload(
|
|
596
|
+
provider,
|
|
597
|
+
recoveryExtension,
|
|
598
|
+
wallet,
|
|
599
|
+
signer.address,
|
|
600
|
+
payloadHash,
|
|
601
|
+
)
|
|
602
|
+
|
|
603
|
+
const payload = await this.shared.sequence.stateProvider.getPayload(payloadHash)
|
|
604
|
+
|
|
605
|
+
// If ready, we need to check if it was executed already
|
|
606
|
+
// for this, we check if the wallet nonce for the given space
|
|
607
|
+
// is greater than the nonce in the payload
|
|
608
|
+
if (timestamp < Date.now() / 1000 && payload && Payload.isCalls(payload.payload)) {
|
|
609
|
+
const nonce = await this.shared.modules.wallets.getNonce(chainId, wallet, payload.payload.space)
|
|
610
|
+
if (nonce > i) {
|
|
611
|
+
continue
|
|
612
|
+
}
|
|
613
|
+
}
|
|
559
614
|
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
615
|
+
// The id is the index + signer address + chainId + wallet address
|
|
616
|
+
const id = `${i}-${signer.address}-${chainId}-${wallet}`
|
|
617
|
+
|
|
618
|
+
const payloadEntry: QueuedRecoveryPayload = {
|
|
619
|
+
id,
|
|
620
|
+
index: i,
|
|
621
|
+
recoveryModule: recoveryExtension,
|
|
622
|
+
wallet: wallet,
|
|
623
|
+
signer: signer.address,
|
|
624
|
+
chainId,
|
|
625
|
+
startTimestamp: timestamp,
|
|
626
|
+
endTimestamp: timestamp + signer.requiredDeltaTime,
|
|
627
|
+
payloadHash,
|
|
628
|
+
payload: payload?.payload,
|
|
567
629
|
}
|
|
568
|
-
}
|
|
569
630
|
|
|
570
|
-
|
|
571
|
-
const id = `${i}-${signer.address}-${chainId}-${wallet}`
|
|
572
|
-
|
|
573
|
-
// Create a new payload
|
|
574
|
-
const payloadEntry: QueuedRecoveryPayload = {
|
|
575
|
-
id,
|
|
576
|
-
index: i,
|
|
577
|
-
recoveryModule: this.shared.sequence.extensions.recovery,
|
|
578
|
-
wallet: wallet,
|
|
579
|
-
signer: signer.address,
|
|
580
|
-
chainId,
|
|
581
|
-
startTimestamp: timestamp,
|
|
582
|
-
endTimestamp: timestamp + signer.requiredDeltaTime,
|
|
583
|
-
payloadHash,
|
|
584
|
-
payload: payload?.payload,
|
|
631
|
+
payloads.push(payloadEntry)
|
|
585
632
|
}
|
|
586
|
-
|
|
587
|
-
payloads.push(payloadEntry)
|
|
588
633
|
}
|
|
589
634
|
} catch (err) {
|
|
590
|
-
console.error(
|
|
635
|
+
console.error(`Recovery.fetchQueuedPayloads error for chainId ${chainId}:`, err)
|
|
591
636
|
}
|
|
637
|
+
}),
|
|
638
|
+
)
|
|
639
|
+
|
|
640
|
+
return payloads
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
private async fetchTotalQueuedPayloadsBatched(
|
|
644
|
+
provider: Provider.Provider,
|
|
645
|
+
recoveryExtension: Address.Address,
|
|
646
|
+
wallet: Address.Address,
|
|
647
|
+
signers: RecoverySigner[],
|
|
648
|
+
multicall3Address: Address.Address,
|
|
649
|
+
): Promise<bigint[]> {
|
|
650
|
+
const calls = signers.map((signer) => ({
|
|
651
|
+
target: recoveryExtension,
|
|
652
|
+
allowFailure: true,
|
|
653
|
+
callData: AbiFunction.encodeData(Extensions.Recovery.TOTAL_QUEUED_PAYLOADS, [wallet, signer.address]),
|
|
654
|
+
}))
|
|
655
|
+
|
|
656
|
+
const response = await provider.request({
|
|
657
|
+
method: 'eth_call',
|
|
658
|
+
params: [
|
|
659
|
+
{
|
|
660
|
+
to: multicall3Address,
|
|
661
|
+
data: AbiFunction.encodeData(AGGREGATE3, [calls]),
|
|
662
|
+
},
|
|
663
|
+
'latest',
|
|
664
|
+
],
|
|
665
|
+
})
|
|
666
|
+
|
|
667
|
+
const results = AbiFunction.decodeResult(AGGREGATE3, response) as readonly {
|
|
668
|
+
success: boolean
|
|
669
|
+
returnData: Hex.Hex
|
|
670
|
+
}[]
|
|
671
|
+
|
|
672
|
+
return results.map((result) => {
|
|
673
|
+
if (!result.success || result.returnData === '0x') {
|
|
674
|
+
return 0n
|
|
592
675
|
}
|
|
676
|
+
return Hex.toBigInt(result.returnData)
|
|
677
|
+
})
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
private fetchTotalQueuedPayloadsFallback = async (
|
|
681
|
+
provider: Provider.Provider,
|
|
682
|
+
recoveryExtension: Address.Address,
|
|
683
|
+
wallet: Address.Address,
|
|
684
|
+
signers: RecoverySigner[],
|
|
685
|
+
): Promise<bigint[]> => {
|
|
686
|
+
const result: bigint[] = signers.map(() => 0n)
|
|
687
|
+
|
|
688
|
+
// Fallback to individual calls if the multicall3 call fails
|
|
689
|
+
for (let s = 0; s < signers.length; s++) {
|
|
690
|
+
const signer = signers[s]!
|
|
691
|
+
const totalPayloads = await Extensions.Recovery.totalQueuedPayloads(
|
|
692
|
+
provider,
|
|
693
|
+
recoveryExtension,
|
|
694
|
+
wallet,
|
|
695
|
+
signer.address,
|
|
696
|
+
)
|
|
697
|
+
result[s] = totalPayloads
|
|
593
698
|
}
|
|
594
699
|
|
|
595
|
-
return
|
|
700
|
+
return result
|
|
596
701
|
}
|
|
597
702
|
|
|
598
703
|
async encodeRecoverySignature(imageHash: Hex.Hex, signer: Address.Address) {
|