Skip to content

Commit 7ed9aae

Browse files
Merge pull request #913 from 0xsequence/v3-rc4
Sequence v3 rc4
2 parents ec60b5b + 8541844 commit 7ed9aae

File tree

15 files changed

+670
-528
lines changed

15 files changed

+670
-528
lines changed

packages/wallet/core/src/signers/session/explicit.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -263,10 +263,7 @@ export class Explicit implements ExplicitSessionSigner {
263263
}
264264

265265
// Sign it
266-
const useDeprecatedHash =
267-
Address.isEqual(sessionManagerAddress, Extensions.Dev1.sessions) ||
268-
Address.isEqual(sessionManagerAddress, Extensions.Dev2.sessions)
269-
const callHash = SessionSignature.hashCallWithReplayProtection(payload, callIdx, chainId, useDeprecatedHash)
266+
const callHash = SessionSignature.hashPayloadWithCallIdx(wallet, payload, callIdx, chainId, sessionManagerAddress)
270267
const sessionSignature = await this._privateKey.signDigest(Bytes.fromHex(callHash))
271268
return {
272269
permissionIndex: BigInt(permissionIndex),

packages/wallet/core/src/signers/session/implicit.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,7 @@ export class Implicit implements ImplicitSessionSigner {
115115
if (!isSupported) {
116116
throw new Error('Unsupported call')
117117
}
118-
const useDeprecatedHash =
119-
Address.isEqual(sessionManagerAddress, Extensions.Dev1.sessions) ||
120-
Address.isEqual(sessionManagerAddress, Extensions.Dev2.sessions)
121-
const callHash = SessionSignature.hashCallWithReplayProtection(payload, callIdx, chainId, useDeprecatedHash)
118+
const callHash = SessionSignature.hashPayloadWithCallIdx(wallet, payload, callIdx, chainId, sessionManagerAddress)
122119
const sessionSignature = await this._privateKey.signDigest(Bytes.fromHex(callHash))
123120
return {
124121
attestation: this._attestation,

packages/wallet/core/src/state/local/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export interface Store {
6666
export class Provider implements ProviderInterface {
6767
constructor(
6868
private readonly store: Store = new MemoryStore(),
69-
public readonly extensions: Extensions.Extensions = Extensions.Rc3,
69+
public readonly extensions: Extensions.Extensions = Extensions.Rc4,
7070
) {}
7171

7272
getConfiguration(imageHash: Hex.Hex): Promise<Config.Config | undefined> {

packages/wallet/core/src/state/sequence/index.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,12 @@ export class Provider implements ProviderInterface {
364364
}
365365
}
366366

367-
const passkeySigners = [Extensions.Dev1.passkeys, Extensions.Dev2.passkeys, Extensions.Rc3.passkeys].map(
368-
Address.checksum,
369-
)
367+
const passkeySigners = [
368+
Extensions.Dev1.passkeys,
369+
Extensions.Dev2.passkeys,
370+
Extensions.Rc3.passkeys,
371+
Extensions.Rc4.passkeys,
372+
].map(Address.checksum)
370373

371374
const recoverSapientSignatureCompactSignature =
372375
'function recoverSapientSignatureCompact(bytes32 _digest, bytes _signature) view returns (bytes32)'

packages/wallet/core/test/session-manager.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
USDC_ADDRESS,
1414
} from './constants'
1515
import { Extensions } from '@0xsequence/wallet-primitives'
16-
import { ExplicitSessionConfig } from '../../wdk/src/sequence/types/sessions.js'
16+
import { ExplicitSessionConfig } from '../src/utils/session/types.js'
1717

1818
const { PermissionBuilder, ERC20PermissionBuilder } = Utils
1919

@@ -34,6 +34,10 @@ const ALL_EXTENSIONS = [
3434
name: 'Rc3',
3535
...Extensions.Rc3,
3636
},
37+
{
38+
name: 'Rc4',
39+
...Extensions.Rc4,
40+
},
3741
]
3842

3943
// Handle the increment call being first or last depending on the session manager version
@@ -561,7 +565,7 @@ for (const extension of ALL_EXTENSIONS) {
561565
}
562566

563567
// Sign the transaction
564-
expect(sessionManager.signSapient(wallet.address, chainId, payload, imageHash)).rejects.toThrow(
568+
await expect(sessionManager.signSapient(wallet.address, chainId, payload, imageHash)).rejects.toThrow(
565569
`Signer supporting call is expired: ${explicitSigner.address}`,
566570
)
567571
},

packages/wallet/dapp-client/src/ChainSessionManager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ export class ChainSessionManager {
221221
stateProvider: this.stateProvider,
222222
})
223223
this.sessionManager = new Signers.SessionManager(this.wallet, {
224-
sessionManagerAddress: Extensions.Rc3.sessions,
224+
sessionManagerAddress: Extensions.Rc4.sessions,
225225
provider: this.provider!,
226226
})
227227
this.isInitialized = true
@@ -730,7 +730,7 @@ export class ChainSessionManager {
730730
for (let attempt = 1; attempt <= maxRetries; attempt++) {
731731
try {
732732
const tempManager = new Signers.SessionManager(this.wallet, {
733-
sessionManagerAddress: Extensions.Rc3.sessions,
733+
sessionManagerAddress: Extensions.Rc4.sessions,
734734
provider: this.provider,
735735
})
736736
const topology = await tempManager.getTopology()

packages/wallet/primitives-cli/src/subcommands/address.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ const addressCommand: CommandModule = {
4545
.option('creationCode', {
4646
type: 'string',
4747
description: 'Creation code (optional)',
48-
default: Context.Rc3.creationCode,
48+
default: Context.Rc4.creationCode,
4949
})
5050
},
5151
async (argv) => {

packages/wallet/primitives/src/context.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,25 @@ export const Rc3_4337: Context = {
5959
},
6060
}
6161

62+
export const Rc4: Context = {
63+
factory: '0x00000000000018A77519fcCCa060c2537c9D6d3F',
64+
stage1: '0x0000000000003DF093bc4257E6dCE45D937EF161',
65+
stage2: '0x10bE1Abf3cD0918bb1079ECc6b8220c177F34088',
66+
creationCode: '0x6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d30545af43d82803e903d91601f57fd5bf3',
67+
}
68+
69+
export const Rc4_4337: Context = {
70+
factory: '0x00000000000003c0C955C8AE06FB13cDd19a7ac6',
71+
stage1: '0x0000000000003add039FF84b064B7347Fc23C444',
72+
stage2: '0x4B3E5735665057A0A15eE448A7293bC01e3b4De9',
73+
creationCode: '0x6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d30545af43d82803e903d91601f57fd5bf3',
74+
capabilities: {
75+
erc4337: {
76+
entrypoint: '0x0000000071727De22E5E9d8BAf0edAc6f37da032',
77+
},
78+
},
79+
}
80+
6281
export type KnownContext = Context & {
6382
name: string
6483
development: boolean
@@ -70,6 +89,8 @@ export const KnownContexts: KnownContext[] = [
7089
{ name: 'Dev2_4337', development: true, ...Dev2_4337 },
7190
{ name: 'Rc3', development: true, ...Rc3 },
7291
{ name: 'Rc3_4337', development: true, ...Rc3_4337 },
92+
{ name: 'Rc4', development: false, ...Rc4 },
93+
{ name: 'Rc4_4337', development: false, ...Rc4_4337 },
7394
]
7495

7596
export function isKnownContext(context: Context): context is KnownContext {

packages/wallet/primitives/src/extensions/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,11 @@ export const Rc3: Extensions = {
2424
sessions: '0x0000000000CC58810c33F3a0D78aA1Ed80FaDcD8',
2525
}
2626

27+
export const Rc4: Extensions = {
28+
passkeys: '0x0000000000005204F3711851EAD52CC9c241499a',
29+
recovery: '0x000000000001FC499c3E177DD56Febb0A4bc15b7',
30+
sessions: '0x00000000000030Bcc832F7d657f50D6Be35C92b3',
31+
}
32+
2733
export * as Passkeys from './passkeys.js'
2834
export * as Recovery from './recovery.js'

packages/wallet/primitives/src/payload.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,10 @@ export function isCalls4337_07(payload: Payload): payload is Calls4337_07 {
184184
return payload.type === 'call_4337_07'
185185
}
186186

187+
export function isParented(payload: Payload): payload is Parented {
188+
return 'parentWallets' in payload
189+
}
190+
187191
export function toRecovery<T extends MayRecoveryPayload>(payload: T): Recovery<T> {
188192
if (isRecovery(payload)) {
189193
return payload

0 commit comments

Comments
 (0)