@0xsequence/wallet-wdk 3.0.0-beta.16 → 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 +24 -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 +100 -34
- package/package.json +6 -6
- package/src/sequence/manager.ts +2 -0
- package/src/sequence/recovery.ts +165 -56
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
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
|
+
|
|
15
|
+
## 3.0.0-beta.17
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- New chains, relayer rpc fix
|
|
20
|
+
- Updated dependencies
|
|
21
|
+
- @0xsequence/guard@3.0.0-beta.17
|
|
22
|
+
- @0xsequence/identity-instrument@3.0.0-beta.17
|
|
23
|
+
- @0xsequence/relayer@3.0.0-beta.17
|
|
24
|
+
- @0xsequence/wallet-core@3.0.0-beta.17
|
|
25
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.17
|
|
26
|
+
|
|
3
27
|
## 3.0.0-beta.16
|
|
4
28
|
|
|
5
29
|
### 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":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAG7C,OAAO,EAAE,MAAM,EAAa,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AAC/F,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,EAGL,OAAO,EAIR,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEvE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAgB,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAErF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB,UAAU,CAAC,EAAE,UAAU,CAAC,UAAU,CAAA;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAA;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC,OAAO,CAAA;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAA;IAEvB,cAAc,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAA;IACxD,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,CAAA;IACtB,cAAc,CAAC,EAAE,EAAE,CAAC,YAAY,CAAA;IAChC,YAAY,CAAC,EAAE,EAAE,CAAC,UAAU,CAAA;IAC5B,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAA;IACxB,iBAAiB,CAAC,EAAE,EAAE,CAAC,eAAe,CAAA;IACtC,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAA;IACxB,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAA;IACxB,oBAAoB,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAA;IAE5C,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,eAAe,CAAC,EAAE,eAAe,CAAA;IAEjC,aAAa,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAA;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAEnD,qBAAqB,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;IAGzC,oBAAoB,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IACtC,uBAAuB,CAAC,EAAE,gBAAgB,CAAA;IAG1C,8BAA8B,CAAC,EAAE,OAAO,CAAA;IAExC,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;QACpB,iBAAiB,CAAC,EAAE,OAAO,CAAA;QAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;QACvB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE;YACN,OAAO,EAAE,OAAO,CAAA;SACjB,CAAA;QACD,MAAM,CAAC,EAAE;YACP,OAAO,EAAE,OAAO,CAAA;YAChB,QAAQ,EAAE,MAAM,CAAA;SACjB,CAAA;QACD,KAAK,CAAC,EAAE;YACN,OAAO,EAAE,OAAO,CAAA;YAChB,QAAQ,EAAE,MAAM,CAAA;SACjB,CAAA;QACD,eAAe,CAAC,EAAE;YAChB,IAAI,EAAE,UAAU,MAAM,EAAE,CAAA;YACxB,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,eAAe,CAAA;YACrD,MAAM,EAAE,MAAM,CAAA;YACd,QAAQ,EAAE,MAAM,CAAA;YAChB,QAAQ,EAAE,MAAM,CAAA;SACjB,EAAE,CAAA;KACJ,CAAA;CACF,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE;QACL,OAAO,EAAE,OAAO,CAAA;KACjB,CAAA;IACD,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,KAAK,EAAE;QACL,OAAO,EAAE,OAAO,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,eAAe,CAAC,EAAE;QAChB,IAAI,EAAE,UAAU,MAAM,EAAE,CAAA;QACxB,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,eAAe,CAAA;QACrD,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;KACjB,EAAE,CAAA;CACJ,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAA;IAEhB,UAAU,EAAE,UAAU,CAAC,UAAU,CAAA;IACjC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAA;IACxB,WAAW,EAAE,OAAO,CAAC,OAAO,CAAA;IAC5B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAA;IAEtB,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAA;IACvD,SAAS,EAAE,EAAE,CAAC,OAAO,CAAA;IACrB,cAAc,EAAE,EAAE,CAAC,YAAY,CAAA;IAC/B,YAAY,EAAE,EAAE,CAAC,UAAU,CAAA;IAC3B,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAA;IACvB,iBAAiB,EAAE,EAAE,CAAC,eAAe,CAAA;IACrC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAA;IACvB,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAA;IACvB,oBAAoB,EAAE,EAAE,CAAC,kBAAkB,CAAA;IAE3C,iBAAiB,EAAE,MAAM,CAAA;IAEzB,GAAG,EAAE,MAAM,CAAA;IACX,eAAe,EAAE,eAAe,CAAA;IAEhC,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAA;IAC7B,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;IAC3B,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACvD,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAElD,qBAAqB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;IAExC,oBAAoB,EAAE,MAAM,CAAC,QAAQ,CAAA;IACrC,uBAAuB,EAAE,gBAAgB,CAAA;IAEzC,8BAA8B,EAAE,OAAO,CAAA;IAEvC,QAAQ,EAAE,uBAAuB,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;2BAgCJ,OAAO,CAAC,OAAO,EAAE;;oBAMzC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC;0BAmBlC,MAAM,CAAC,UAAU;6BAKjB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,WAAW,GAAG,SAAS,CAAC
|
|
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) {
|
|
@@ -97,7 +100,7 @@ export class Recovery {
|
|
|
97
100
|
throw new Error('recovery-module-not-enabled');
|
|
98
101
|
}
|
|
99
102
|
await this.updateRecoveryModule(modules, (leaves) => {
|
|
100
|
-
const next = leaves.filter((l) => l.signer
|
|
103
|
+
const next = leaves.filter((l) => !Address.isEqual(l.signer, address));
|
|
101
104
|
if (next.length === 0) {
|
|
102
105
|
return [
|
|
103
106
|
{
|
|
@@ -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,44 +282,102 @@ 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
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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
|
|
310
|
+
for (let i = 0n; i < totalPayloads; i++) {
|
|
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);
|
|
313
|
+
const payload = await this.shared.sequence.stateProvider.getPayload(payloadHash);
|
|
314
|
+
// If ready, we need to check if it was executed already
|
|
315
|
+
// for this, we check if the wallet nonce for the given space
|
|
316
|
+
// is greater than the nonce in the payload
|
|
317
|
+
if (timestamp < Date.now() / 1000 && payload && Payload.isCalls(payload.payload)) {
|
|
318
|
+
const nonce = await this.shared.modules.wallets.getNonce(chainId, wallet, payload.payload.space);
|
|
319
|
+
if (nonce > i) {
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
292
322
|
}
|
|
323
|
+
// The id is the index + signer address + chainId + wallet address
|
|
324
|
+
const id = `${i}-${signer.address}-${chainId}-${wallet}`;
|
|
325
|
+
const payloadEntry = {
|
|
326
|
+
id,
|
|
327
|
+
index: i,
|
|
328
|
+
recoveryModule: recoveryExtension,
|
|
329
|
+
wallet: wallet,
|
|
330
|
+
signer: signer.address,
|
|
331
|
+
chainId,
|
|
332
|
+
startTimestamp: timestamp,
|
|
333
|
+
endTimestamp: timestamp + signer.requiredDeltaTime,
|
|
334
|
+
payloadHash,
|
|
335
|
+
payload: payload?.payload,
|
|
336
|
+
};
|
|
337
|
+
payloads.push(payloadEntry);
|
|
293
338
|
}
|
|
294
|
-
// The id is the index + signer address + chainId + wallet address
|
|
295
|
-
const id = `${i}-${signer.address}-${chainId}-${wallet}`;
|
|
296
|
-
// Create a new payload
|
|
297
|
-
const payloadEntry = {
|
|
298
|
-
id,
|
|
299
|
-
index: i,
|
|
300
|
-
recoveryModule: this.shared.sequence.extensions.recovery,
|
|
301
|
-
wallet: wallet,
|
|
302
|
-
signer: signer.address,
|
|
303
|
-
chainId,
|
|
304
|
-
startTimestamp: timestamp,
|
|
305
|
-
endTimestamp: timestamp + signer.requiredDeltaTime,
|
|
306
|
-
payloadHash,
|
|
307
|
-
payload: payload?.payload,
|
|
308
|
-
};
|
|
309
|
-
payloads.push(payloadEntry);
|
|
310
339
|
}
|
|
311
340
|
}
|
|
312
|
-
|
|
341
|
+
catch (err) {
|
|
342
|
+
console.error(`Recovery.fetchQueuedPayloads error for chainId ${chainId}:`, err);
|
|
343
|
+
}
|
|
344
|
+
}));
|
|
313
345
|
return payloads;
|
|
314
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
|
+
};
|
|
315
381
|
async encodeRecoverySignature(imageHash, signer) {
|
|
316
382
|
const genericTree = await this.shared.sequence.stateProvider.getTree(imageHash);
|
|
317
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/
|
|
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.
|
|
@@ -284,7 +288,7 @@ export class Recovery implements RecoveryInterface {
|
|
|
284
288
|
}
|
|
285
289
|
|
|
286
290
|
await this.updateRecoveryModule(modules, (leaves) => {
|
|
287
|
-
const next = leaves.filter((l) => l.signer
|
|
291
|
+
const next = leaves.filter((l) => !Address.isEqual(l.signer, address))
|
|
288
292
|
if (next.length === 0) {
|
|
289
293
|
return [
|
|
290
294
|
{
|
|
@@ -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,69 +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
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
// If ready, we need to check if it was executed already
|
|
560
|
-
// for this, we check if the wallet nonce for the given space
|
|
561
|
-
// is greater than the nonce in the payload
|
|
562
|
-
if (timestamp < Date.now() / 1000 && payload && Payload.isCalls(payload.payload)) {
|
|
563
|
-
const nonce = await this.shared.modules.wallets.getNonce(chainId, wallet, payload.payload.space)
|
|
564
|
-
if (nonce > i) {
|
|
565
|
-
continue
|
|
543
|
+
await Promise.all(
|
|
544
|
+
providers.map(async ({ chainId, provider, multicall3Address }) => {
|
|
545
|
+
try {
|
|
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
|
+
)
|
|
566
570
|
}
|
|
571
|
+
} else {
|
|
572
|
+
totalPayloadsBySigner = await this.fetchTotalQueuedPayloadsFallback(
|
|
573
|
+
provider,
|
|
574
|
+
recoveryExtension,
|
|
575
|
+
wallet,
|
|
576
|
+
signers,
|
|
577
|
+
)
|
|
567
578
|
}
|
|
568
579
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
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
|
+
}
|
|
614
|
+
|
|
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,
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
payloads.push(payloadEntry)
|
|
632
|
+
}
|
|
584
633
|
}
|
|
585
|
-
|
|
586
|
-
|
|
634
|
+
} catch (err) {
|
|
635
|
+
console.error(`Recovery.fetchQueuedPayloads error for chainId ${chainId}:`, err)
|
|
587
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
|
|
588
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
|
|
589
698
|
}
|
|
590
699
|
|
|
591
|
-
return
|
|
700
|
+
return result
|
|
592
701
|
}
|
|
593
702
|
|
|
594
703
|
async encodeRecoverySignature(imageHash: Hex.Hex, signer: Address.Address) {
|