Skip to content

Commit 1f67abd

Browse files
committed
More v3 convert config options
1 parent f0b7b4f commit 1f67abd

2 files changed

Lines changed: 49 additions & 45 deletions

File tree

packages/utils/migration/src/migrations/v1/encoder_v1_v3.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,13 @@ import {
99
import { AbiFunction, Address, Hex } from 'ox'
1010
import { UnsignedMigration, VersionedContext } from '../../types.js'
1111
import { MigrationEncoder } from '../index.js'
12-
import { createDefaultV3Topology } from '../v3/config.js'
12+
import { ConvertOptions as V3ConvertOptions, createDefaultV3Topology } from '../v3/config.js'
13+
14+
export type ConvertOptions = V3ConvertOptions
1315

1416
// uint160(keccak256("org.sequence.sdk.migration.v1v3.space.nonce"))
1517
export const MIGRATION_V1_V3_NONCE_SPACE = '0x9e4d5bdafd978baf1290aff23057245a2a62bef5'
1618

17-
export type ConvertOptions = {
18-
loginSigner: {
19-
address: Address.Address
20-
imageHash?: Hex.Hex
21-
}
22-
extensions?: V3Extensions.Extensions
23-
}
24-
2519
export type PrepareOptions = {
2620
space?: bigint
2721
}
@@ -53,7 +47,7 @@ export class MigrationEncoder_v1v3
5347
type: 'nested',
5448
weight: 1n,
5549
threshold: 2n,
56-
tree: createDefaultV3Topology(options.loginSigner, options.extensions),
50+
tree: createDefaultV3Topology(options),
5751
},
5852
],
5953
}

packages/utils/migration/src/migrations/v3/config.ts

Lines changed: 45 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@ import {
66
} from '@0xsequence/wallet-primitives'
77
import { Address, Hex } from 'ox'
88

9-
export const createDefaultV3Topology = (
9+
export type ConvertOptions = {
1010
loginSigner: {
1111
address: Address.Address
1212
imageHash?: Hex.Hex
13-
},
14-
extensions?: V3Extensions.Extensions,
15-
): V3Config.Topology => {
13+
}
14+
noWalletGuard?: boolean
15+
noSessions?: boolean
16+
extensions?: V3Extensions.Extensions
17+
}
18+
19+
export const createDefaultV3Topology = (options: ConvertOptions): V3Config.Topology => {
20+
const { loginSigner, extensions } = options
1621
// Login topology
1722
const loginTopology: V3Config.SapientSignerLeaf | V3Config.SignerLeaf = loginSigner.imageHash
1823
? {
@@ -28,11 +33,13 @@ export const createDefaultV3Topology = (
2833
}
2934

3035
// Wallet guard topology
31-
const walletGuardTopology: V3Config.SignerLeaf = {
32-
type: 'signer',
33-
address: '0xa2e70CeaB3Eb145F32d110383B75B330fA4e288a', // Guard wallet signer
34-
weight: 1n,
35-
}
36+
const walletGuardTopology: V3Config.SignerLeaf | undefined = options.noWalletGuard
37+
? undefined
38+
: {
39+
type: 'signer',
40+
address: '0xa2e70CeaB3Eb145F32d110383B75B330fA4e288a', // Guard wallet signer
41+
weight: 1n,
42+
}
3643

3744
// Placeholder recovery topology
3845
const recoveryTopology: V3Config.SapientSignerLeaf = {
@@ -43,36 +50,39 @@ export const createDefaultV3Topology = (
4350
}
4451

4552
// Session topology
46-
let sessionsImageHash: Hex.Hex = '0x0000000000000000000000000000000000000000000000000000000000000000'
47-
if (!loginSigner.imageHash) {
48-
// We can't use the login signer with sessions if it is a sapient signer
49-
const sessionsTopology = V3SessionConfig.emptySessionsTopology(loginSigner.address)
50-
const sessionsConfig = V3SessionConfig.sessionsTopologyToConfigurationTree(sessionsTopology)
51-
sessionsImageHash = V3GenericTree.hash(sessionsConfig)
52-
}
53-
const sessionTopology: V3Config.SapientSignerLeaf = {
54-
type: 'sapient-signer',
55-
address: (extensions ?? V3Extensions.Rc3).sessions,
56-
weight: 1n,
57-
imageHash: sessionsImageHash,
58-
}
53+
let nestedSessionTopology: V3Config.NestedLeaf | undefined = undefined
54+
if (!options.noSessions) {
55+
let sessionsImageHash: Hex.Hex = '0x0000000000000000000000000000000000000000000000000000000000000000'
56+
if (!loginSigner.imageHash) {
57+
// We can't use the login signer with sessions if it is a sapient signer
58+
const sessionsTopology = V3SessionConfig.emptySessionsTopology(loginSigner.address)
59+
const sessionsConfig = V3SessionConfig.sessionsTopologyToConfigurationTree(sessionsTopology)
60+
sessionsImageHash = V3GenericTree.hash(sessionsConfig)
61+
}
62+
const sessionTopology: V3Config.SapientSignerLeaf = {
63+
type: 'sapient-signer',
64+
address: (extensions ?? V3Extensions.Rc3).sessions,
65+
weight: 1n,
66+
imageHash: sessionsImageHash,
67+
}
5968

60-
// Sessions are protected by a guard signer
61-
const sessionGuardTopology: V3Config.SignerLeaf = {
62-
type: 'signer',
63-
address: '0x18002Fc09deF9A47437cc64e270843dE094f5984', // Guard session signer
64-
weight: 1n,
65-
}
66-
const nestedSessionTopology: V3Config.NestedLeaf = {
67-
type: 'nested',
68-
weight: 255n,
69-
threshold: 2n,
70-
tree: [sessionTopology, sessionGuardTopology],
69+
// Sessions are protected by a guard signer
70+
const sessionGuardTopology: V3Config.SignerLeaf = {
71+
type: 'signer',
72+
address: '0x18002Fc09deF9A47437cc64e270843dE094f5984', // Guard session signer
73+
weight: 1n,
74+
}
75+
nestedSessionTopology = {
76+
type: 'nested',
77+
weight: 255n,
78+
threshold: 2n,
79+
tree: [sessionTopology, sessionGuardTopology],
80+
}
7181
}
7282

7383
// Return the wallet topology
7484
return [
75-
[loginTopology, walletGuardTopology],
76-
[recoveryTopology, nestedSessionTopology],
85+
walletGuardTopology ? [loginTopology, walletGuardTopology] : loginTopology,
86+
nestedSessionTopology ? [recoveryTopology, nestedSessionTopology] : recoveryTopology,
7787
]
7888
}

0 commit comments

Comments
 (0)