@rhinestone/sdk 2.2.1 → 2.2.5
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/src/accounts/adapters/kernel.d.ts.map +1 -1
- package/dist/src/accounts/adapters/kernel.js +3 -6
- package/dist/src/accounts/adapters/nexus.d.ts.map +1 -1
- package/dist/src/accounts/adapters/nexus.js +3 -6
- package/dist/src/accounts/adapters/safe.d.ts.map +1 -1
- package/dist/src/accounts/adapters/safe.js +7 -5
- package/dist/src/accounts/adapters/shared.d.ts +1 -0
- package/dist/src/accounts/adapters/shared.d.ts.map +1 -1
- package/dist/src/accounts/adapters/shared.js +7 -0
- package/dist/src/accounts/adapters/startale.d.ts.map +1 -1
- package/dist/src/accounts/adapters/startale.js +2 -5
- package/dist/src/accounts/construction.d.ts +1 -1
- package/dist/src/accounts/construction.d.ts.map +1 -1
- package/dist/src/accounts/construction.js +63 -15
- package/dist/src/accounts/deployment.d.ts +13 -1
- package/dist/src/accounts/deployment.d.ts.map +1 -1
- package/dist/src/accounts/deployment.js +11 -0
- package/dist/src/accounts/error.d.ts +8 -1
- package/dist/src/accounts/error.d.ts.map +1 -1
- package/dist/src/accounts/error.js +9 -1
- package/dist/src/accounts/passkey-install.d.ts +25 -0
- package/dist/src/accounts/passkey-install.d.ts.map +1 -0
- package/dist/src/accounts/passkey-install.js +105 -0
- package/dist/src/actions/mfa.d.ts +0 -1
- package/dist/src/actions/mfa.d.ts.map +1 -1
- package/dist/src/actions/mfa.js +0 -1
- package/dist/src/actions/passkeys.d.ts +1 -2
- package/dist/src/actions/passkeys.d.ts.map +1 -1
- package/dist/src/actions/passkeys.js +1 -2
- package/dist/src/api/direct-signing.d.ts.map +1 -1
- package/dist/src/api/direct-signing.js +100 -98
- package/dist/src/api/sdk.d.ts +1 -1
- package/dist/src/api/sdk.js +1 -1
- package/dist/src/chains/caip2.d.ts +15 -0
- package/dist/src/chains/caip2.d.ts.map +1 -1
- package/dist/src/chains/caip2.js +34 -6
- package/dist/src/chains/catalog.js +2 -2
- package/dist/src/chains/non-evm.d.ts +4 -3
- package/dist/src/chains/non-evm.d.ts.map +1 -1
- package/dist/src/chains/non-evm.js +17 -4
- package/dist/src/clients/orchestrator/client.js +1 -1
- package/dist/src/clients/orchestrator/mappers.d.ts +4 -3
- package/dist/src/clients/orchestrator/mappers.d.ts.map +1 -1
- package/dist/src/clients/orchestrator/mappers.js +21 -13
- package/dist/src/clients/orchestrator/serialization.d.ts +5 -0
- package/dist/src/clients/orchestrator/serialization.d.ts.map +1 -0
- package/dist/src/clients/orchestrator/serialization.js +11 -0
- package/dist/src/clients/orchestrator/wire.d.ts +15 -0
- package/dist/src/clients/orchestrator/wire.d.ts.map +1 -1
- package/dist/src/clients/orchestrator/wire.gen.d.ts +556 -39
- package/dist/src/clients/orchestrator/wire.gen.d.ts.map +1 -1
- package/dist/src/config/account.d.ts +3 -3
- package/dist/src/errors/index.d.ts +2 -2
- package/dist/src/errors/index.d.ts.map +1 -1
- package/dist/src/errors/index.js +2 -2
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/modules/validators/ens.d.ts.map +1 -1
- package/dist/src/modules/validators/ens.js +2 -1
- package/dist/src/modules/validators/ordering.d.ts +3 -0
- package/dist/src/modules/validators/ordering.d.ts.map +1 -0
- package/dist/src/modules/validators/ordering.js +11 -0
- package/dist/src/modules/validators/resolve.d.ts +3 -2
- package/dist/src/modules/validators/resolve.d.ts.map +1 -1
- package/dist/src/modules/validators/resolve.js +8 -5
- package/dist/src/modules/validators/webauthn.d.ts +20 -1
- package/dist/src/modules/validators/webauthn.d.ts.map +1 -1
- package/dist/src/modules/validators/webauthn.js +58 -7
- package/dist/src/signing/message.d.ts +2 -0
- package/dist/src/signing/message.d.ts.map +1 -1
- package/dist/src/signing/message.js +1 -1
- package/dist/src/signing/protocols/erc7739.js +1 -8
- package/dist/src/signing/typed-data.d.ts.map +1 -1
- package/dist/src/signing/typed-data.js +5 -10
- package/dist/src/signing/types.d.ts +0 -4
- package/dist/src/signing/types.d.ts.map +1 -1
- package/dist/src/transactions/intents/prepare.d.ts.map +1 -1
- package/dist/src/transactions/intents/prepare.js +16 -3
- package/dist/src/transactions/intents/sessions.d.ts.map +1 -1
- package/dist/src/transactions/intents/sessions.js +12 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../../../accounts/adapters/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../../../accounts/adapters/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,GAAG,EAMT,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAKnD,eAAO,MAAM,6BAA6B,EACxC,4CAAqD,CAAA;AAQvD,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG,CAgBzE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,EAAE,CA2CxE;AAsED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,mBAAmB,GAChC,cAAc,CAmChB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { concat, concatHex, decodeAbiParameters, decodeFunctionData, domainSeparator, encodeAbiParameters, encodeFunctionData, getContractAddress, keccak256, parseAbi, stringToHex, toHex, zeroAddress,
|
|
1
|
+
import { concat, concatHex, decodeAbiParameters, decodeFunctionData, domainSeparator, encodeAbiParameters, encodeFunctionData, getContractAddress, keccak256, parseAbi, stringToHex, toHex, zeroAddress, } from 'viem';
|
|
2
2
|
import { moduleTypeId } from '../../modules/erc7579-abi.js';
|
|
3
|
-
import { deploymentPlan } from '../deployment.js';
|
|
3
|
+
import { deploymentPlan, KERNEL_SALT_DEFAULTS, selectedValue, } from '../deployment.js';
|
|
4
4
|
import { encodeErc7579Calls } from '../erc7579-calls.js';
|
|
5
5
|
import { encodeUninstallModule } from './shared.js';
|
|
6
6
|
const KERNEL_META_FACTORY_ADDRESS = '0xd703aae79538628d27099b8c4f621be4ccd142d5';
|
|
@@ -99,10 +99,7 @@ function kernelMaterial(input) {
|
|
|
99
99
|
initConfig,
|
|
100
100
|
],
|
|
101
101
|
});
|
|
102
|
-
salt =
|
|
103
|
-
input.account.salt.source === 'explicit'
|
|
104
|
-
? input.account.salt.value
|
|
105
|
-
: zeroHash;
|
|
102
|
+
salt = selectedValue(input.account.salt, KERNEL_SALT_DEFAULTS);
|
|
106
103
|
factoryData = encodeFunctionData({
|
|
107
104
|
abi: parseAbi(['function deployWithFactory(address,bytes,bytes32)']),
|
|
108
105
|
functionName: 'deployWithFactory',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nexus.d.ts","sourceRoot":"","sources":["../../../../accounts/adapters/nexus.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAOZ,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"nexus.d.ts","sourceRoot":"","sources":["../../../../accounts/adapters/nexus.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAOZ,KAAK,GAAG,EAIT,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAOnD,eAAO,MAAM,4BAA4B,EACvC,4CAAqD,CAAA;AACvD,eAAO,MAAM,qBAAqB,EAChC,4CAAqD,CAAA;AAIvD,eAAO,MAAM,0BAA0B,EACrC,4CAAqD,CAAA;AACvD,eAAO,MAAM,mBAAmB,EAC9B,4CAAqD,CAAA;AAmCvD,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAA;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CACpB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,mBAAmB,GACzB,uBAAuB,CAqHzB;AA4CD,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,mBAAmB,GAChC,cAAc,CAoChB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { concat, decodeFunctionData, encodeAbiParameters, encodeFunctionData, encodePacked, getContractAddress,
|
|
1
|
+
import { concat, decodeFunctionData, encodeAbiParameters, encodeFunctionData, encodePacked, getContractAddress, parseAbi, size, zeroAddress, } from 'viem';
|
|
2
2
|
import { OWNABLE_VALIDATOR_ADDRESS } from '../../modules/validators/ownable.js';
|
|
3
|
-
import { deploymentPlan } from '../deployment.js';
|
|
3
|
+
import { deploymentPlan, NEXUS_SALT_DEFAULTS, selectedValue, } from '../deployment.js';
|
|
4
4
|
import { encodeErc7579Calls } from '../erc7579-calls.js';
|
|
5
5
|
import { encodeAddressEnvelope, encodeInstallModule, encodeUninstallModule, } from './shared.js';
|
|
6
6
|
export const NEXUS_IMPLEMENTATION_ADDRESS = '0x000000000032ddc454c3bdcba80484ad5a798705';
|
|
@@ -72,10 +72,7 @@ export function nexusMaterial(input) {
|
|
|
72
72
|
const deployment = getNexusDeployment(version);
|
|
73
73
|
factory = deployment.factory;
|
|
74
74
|
implementation = deployment.implementation;
|
|
75
|
-
salt =
|
|
76
|
-
input.account.salt.source === 'explicit'
|
|
77
|
-
? input.account.salt.value
|
|
78
|
-
: keccak256('0x');
|
|
75
|
+
salt = selectedValue(input.account.salt, NEXUS_SALT_DEFAULTS);
|
|
79
76
|
const defaultValidator = input.setup.validators.find((module) => module.address === OWNABLE_VALIDATOR_ADDRESS);
|
|
80
77
|
const defaultValidatorInitData = defaultValidator?.initData ?? '0x';
|
|
81
78
|
const validators = input.setup.validators.filter((module) => module.address !== OWNABLE_VALIDATOR_ADDRESS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../../accounts/adapters/safe.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../../accounts/adapters/safe.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAyHnD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,mBAAmB,GACzB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,CA2D/D;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,mBAAmB,GAChC,cAAc,CA8BhB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { concat, decodeFunctionData, encodeAbiParameters, encodeFunctionData, encodePacked, getContractAddress, keccak256, parseAbi, parseAbiParameters, zeroAddress, } from 'viem';
|
|
2
2
|
import { getV0Attesters } from '../../modules/legacy-core.js';
|
|
3
|
-
import { deploymentPlan } from '../deployment.js';
|
|
3
|
+
import { deploymentPlan, SAFE_NONCE_DEFAULTS, selectedValue, } from '../deployment.js';
|
|
4
4
|
import { encodeErc7579Calls } from '../erc7579-calls.js';
|
|
5
|
-
import { encodeAddressEnvelope, encodeInstallModule, encodeUninstallModule, primaryOwnerAddresses, primaryThreshold, } from './shared.js';
|
|
5
|
+
import { canonicalOwnerAddresses, encodeAddressEnvelope, encodeInstallModule, encodeUninstallModule, primaryOwnerAddresses, primaryThreshold, } from './shared.js';
|
|
6
6
|
const SAFE_LAUNCHPAD = '0x75798463024bda64d83c94a64bc7d7eab41300ef';
|
|
7
7
|
const SAFE_ADAPTER = '0x7579f2ad53b01c3d8779fe17928e0d48885b0003';
|
|
8
8
|
const SAFE_V0_LAUNCHPAD = '0x7579011ab74c46090561ea277ba79d510c6c00ff';
|
|
@@ -75,7 +75,7 @@ function safeMaterial(input) {
|
|
|
75
75
|
]),
|
|
76
76
|
functionName: 'setup',
|
|
77
77
|
args: [
|
|
78
|
-
[...
|
|
78
|
+
[...canonicalOwnerAddresses(input.owner)],
|
|
79
79
|
primaryThreshold(input.owner),
|
|
80
80
|
SAFE_LAUNCHPAD,
|
|
81
81
|
addSafe7579,
|
|
@@ -85,7 +85,7 @@ function safeMaterial(input) {
|
|
|
85
85
|
zeroAddress,
|
|
86
86
|
],
|
|
87
87
|
});
|
|
88
|
-
const nonce = input.account.nonce
|
|
88
|
+
const nonce = selectedValue(input.account.nonce, SAFE_NONCE_DEFAULTS);
|
|
89
89
|
factoryData = encodeFunctionData({
|
|
90
90
|
abi: parseAbi([
|
|
91
91
|
'function createProxyWithNonce(address singleton,bytes initializer,uint256 saltNonce)',
|
|
@@ -139,6 +139,8 @@ export function safeV0FactoryMaterial(input) {
|
|
|
139
139
|
]),
|
|
140
140
|
functionName: 'setup',
|
|
141
141
|
args: [
|
|
142
|
+
// Caller order, not canonical order: this path reconstructs accounts that
|
|
143
|
+
// SDK v0 already deployed from the owner list as it was supplied.
|
|
142
144
|
[...primaryOwnerAddresses(input.owner)],
|
|
143
145
|
primaryThreshold(input.owner),
|
|
144
146
|
SAFE_V0_LAUNCHPAD,
|
|
@@ -149,7 +151,7 @@ export function safeV0FactoryMaterial(input) {
|
|
|
149
151
|
zeroAddress,
|
|
150
152
|
],
|
|
151
153
|
});
|
|
152
|
-
const nonce = input.account.nonce
|
|
154
|
+
const nonce = selectedValue(input.account.nonce, SAFE_NONCE_DEFAULTS);
|
|
153
155
|
return {
|
|
154
156
|
factory: SAFE_FACTORY,
|
|
155
157
|
factoryData: encodeFunctionData({
|
|
@@ -2,6 +2,7 @@ import { type Hex } from 'viem';
|
|
|
2
2
|
import type { ResolvedModule } from '../../modules/types.js';
|
|
3
3
|
import type { ResolvedValidatorDefinition } from '../../modules/validators/types.js';
|
|
4
4
|
export declare function primaryOwnerAddresses(validator: ResolvedValidatorDefinition): readonly `0x${string}`[];
|
|
5
|
+
export declare function canonicalOwnerAddresses(validator: ResolvedValidatorDefinition): readonly `0x${string}`[];
|
|
5
6
|
export declare function primaryThreshold(validator: ResolvedValidatorDefinition): bigint;
|
|
6
7
|
export declare function encodeInstallModule(module: ResolvedModule): Hex;
|
|
7
8
|
export declare function encodeUninstallModule(module: ResolvedModule): Hex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../accounts/adapters/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,GAAG,EAAe,MAAM,MAAM,CAAA;AAE9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../accounts/adapters/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,GAAG,EAAe,MAAM,MAAM,CAAA;AAE9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAA;AAEjF,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,2BAA2B,GACrC,SAAS,KAAK,MAAM,EAAE,EAAE,CAU1B;AAKD,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,2BAA2B,GACrC,SAAS,KAAK,MAAM,EAAE,EAAE,CAE1B;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,2BAA2B,GACrC,MAAM,CAMR;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,GAAG,CAkB/D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,GAAG,CAkBjE;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,KAAK,MAAM,EAAE,EACxB,SAAS,EAAE,GAAG,EACd,gBAAgB,CAAC,EAAE,KAAK,MAAM,EAAE,GAC/B,GAAG,CAML"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { encodeFunctionData, encodePacked, zeroAddress } from 'viem';
|
|
2
2
|
import { moduleTypeId } from '../../modules/erc7579-abi.js';
|
|
3
|
+
import { compareHexValues } from '../../modules/validators/ordering.js';
|
|
3
4
|
export function primaryOwnerAddresses(validator) {
|
|
4
5
|
if (validator.kind === 'passkey' || validator.kind === 'multi-factor') {
|
|
5
6
|
return ['0xbabe99e62d8bcbd3acf5ccbcfcd4f64fe75e5e72'];
|
|
@@ -11,6 +12,12 @@ export function primaryOwnerAddresses(validator) {
|
|
|
11
12
|
return owner.account.address;
|
|
12
13
|
});
|
|
13
14
|
}
|
|
15
|
+
// Safe keeps owners in a linked list and imposes no order on them, but the
|
|
16
|
+
// owner array is part of the `setup` initializer that becomes the account's
|
|
17
|
+
// CREATE2 salt — so it must be ordered by value, never by caller order.
|
|
18
|
+
export function canonicalOwnerAddresses(validator) {
|
|
19
|
+
return [...primaryOwnerAddresses(validator)].sort(compareHexValues);
|
|
20
|
+
}
|
|
14
21
|
export function primaryThreshold(validator) {
|
|
15
22
|
return BigInt(validator.kind === 'passkey' || validator.kind === 'multi-factor'
|
|
16
23
|
? 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startale.d.ts","sourceRoot":"","sources":["../../../../accounts/adapters/startale.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAYb,MAAM,MAAM,CAAA;AAEb,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"startale.d.ts","sourceRoot":"","sources":["../../../../accounts/adapters/startale.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAYb,MAAM,MAAM,CAAA;AAEb,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAQnD,OAAO,EAAE,4BAA4B,EAAE,CAAA;AACvC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;;;;;;EAQrE;AAkID,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,mBAAmB,GAChC,cAAc,CAoChB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { concat, decodeFunctionData, encodeAbiParameters, encodeFunctionData, encodePacked, keccak256, parseAbi, slice, zeroAddress, zeroHash, } from 'viem';
|
|
2
2
|
import { K1_DEFAULT_VALIDATOR_ADDRESS } from '../../modules/validators/k1.js';
|
|
3
|
-
import { deploymentPlan } from '../deployment.js';
|
|
3
|
+
import { deploymentPlan, STARTALE_SALT_DEFAULTS, selectedValue, } from '../deployment.js';
|
|
4
4
|
import { encodeErc7579Calls } from '../erc7579-calls.js';
|
|
5
5
|
import { encodeAddressEnvelope, encodeInstallModule, encodeUninstallModule, primaryOwnerAddresses, } from './shared.js';
|
|
6
6
|
export { K1_DEFAULT_VALIDATOR_ADDRESS };
|
|
@@ -106,10 +106,7 @@ function startaleMaterial(input) {
|
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
else {
|
|
109
|
-
salt =
|
|
110
|
-
input.account.salt.source === 'explicit'
|
|
111
|
-
? input.account.salt.value
|
|
112
|
-
: zeroHash;
|
|
109
|
+
salt = selectedValue(input.account.salt, STARTALE_SALT_DEFAULTS);
|
|
113
110
|
const initData = startaleInitData(input);
|
|
114
111
|
factoryData = encodeFunctionData({
|
|
115
112
|
abi: parseAbi(['function createAccount(bytes,bytes32)']),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Account } from 'viem';
|
|
2
2
|
import type { EvmChainReference } from '../chains/types.js';
|
|
3
3
|
import type { ConfiguredModule, ModuleSetup } from '../modules/types.js';
|
|
4
4
|
import type { ResolvedValidatorDefinition } from '../modules/validators/types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"construction.d.ts","sourceRoot":"","sources":["../../../accounts/construction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"construction.d.ts","sourceRoot":"","sources":["../../../accounts/construction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAoC,MAAM,MAAM,CAAA;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAErE,OAAO,KAAK,EAEV,2BAA2B,EAC5B,MAAM,6BAA6B,CAAA;AAapC,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EAChB,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,2BAA2B,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;QACzB,QAAQ,CAAC,WAAW,EAAE,YAAY,GAAG,aAAa,CAAA;QAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,EAAE,CAAA;QAC/B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAA;KAC/C,CAAA;CACF;AAqBD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAA;IAC9C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAA;CAC7B,GAAG,mBAAmB,CAwEtB"}
|
|
@@ -1,34 +1,82 @@
|
|
|
1
|
+
import { keccak256, stringToHex } from 'viem';
|
|
1
2
|
import { planModuleSetup } from '../modules/plan.js';
|
|
2
3
|
import { resolveValidator } from '../modules/validators/resolve.js';
|
|
4
|
+
import { orderWebauthnCredentials, toWebauthnInstallCredentials, webauthnDefinitionCredentials, } from '../modules/validators/webauthn.js';
|
|
5
|
+
import { accountSupportsSaltSearch, assertPasskeySetInstallable, selectPasskeyAccount, } from './passkey-install.js';
|
|
6
|
+
import { createAccountAdapter } from './registry.js';
|
|
7
|
+
function passkeyOwner(owner) {
|
|
8
|
+
return owner?.kind === 'passkey' ? owner : undefined;
|
|
9
|
+
}
|
|
10
|
+
function setupFingerprint(input) {
|
|
11
|
+
return keccak256(stringToHex(JSON.stringify(input, (_key, value) => typeof value === 'bigint' ? `${value}n` : value)));
|
|
12
|
+
}
|
|
3
13
|
export function createAccountConstruction(input) {
|
|
4
|
-
const
|
|
5
|
-
|
|
14
|
+
const material = input.material;
|
|
15
|
+
const passkey = passkeyOwner(material.owner);
|
|
16
|
+
// Caller-pinned init data carrying a factory is used verbatim, so neither the
|
|
17
|
+
// credential order nor the salt has any effect on the deployed account.
|
|
18
|
+
const pinned = material.initData !== undefined && 'factory' in material.initData;
|
|
19
|
+
const knownAddress = material.eoa?.address ?? material.initData?.address;
|
|
20
|
+
const credentials = passkey && !pinned
|
|
21
|
+
? toWebauthnInstallCredentials(webauthnDefinitionCredentials(passkey))
|
|
6
22
|
: undefined;
|
|
7
|
-
|
|
23
|
+
const searchable = credentials !== undefined &&
|
|
24
|
+
credentials.length > 1 &&
|
|
25
|
+
knownAddress === undefined &&
|
|
26
|
+
accountSupportsSaltSearch(material.account);
|
|
27
|
+
if (credentials && (knownAddress !== undefined || searchable)) {
|
|
28
|
+
assertPasskeySetInstallable({ credentials, atDeployment: searchable });
|
|
29
|
+
}
|
|
30
|
+
const ordering = knownAddress
|
|
31
|
+
? // The address is already fixed (EIP-7702 adoption or a caller-supplied
|
|
32
|
+
// address), so the exact order the validator requires is computable.
|
|
33
|
+
{ kind: 'credential-id', account: knownAddress }
|
|
34
|
+
: searchable
|
|
35
|
+
? { kind: 'canonical' }
|
|
36
|
+
: undefined;
|
|
37
|
+
const ownerModule = material.owner
|
|
38
|
+
? resolveValidator(material.owner, ordering)
|
|
39
|
+
: undefined;
|
|
40
|
+
if (!ownerModule && material.account.kind !== 'eoa') {
|
|
8
41
|
throw new Error('Smart account owner is required');
|
|
9
42
|
}
|
|
10
43
|
const setup = input.setup ??
|
|
11
44
|
(ownerModule
|
|
12
45
|
? planModuleSetup({
|
|
13
|
-
accountKind:
|
|
46
|
+
accountKind: material.account.kind,
|
|
14
47
|
owner: ownerModule,
|
|
15
|
-
configured:
|
|
16
|
-
environment:
|
|
17
|
-
sessions:
|
|
48
|
+
configured: material.modules,
|
|
49
|
+
environment: material.sessions.environment,
|
|
50
|
+
sessions: material.sessions,
|
|
18
51
|
})
|
|
19
52
|
: { validators: [], executors: [], hooks: [], fallbacks: [] });
|
|
20
|
-
|
|
21
|
-
account:
|
|
22
|
-
...(
|
|
23
|
-
modules:
|
|
53
|
+
const base = {
|
|
54
|
+
account: material.account,
|
|
55
|
+
...(material.owner ? { owner: material.owner } : {}),
|
|
56
|
+
modules: material.modules,
|
|
24
57
|
setup,
|
|
25
58
|
sessions: {
|
|
26
|
-
enabled:
|
|
27
|
-
environment:
|
|
59
|
+
enabled: material.sessions.enabled,
|
|
60
|
+
environment: material.sessions.environment,
|
|
28
61
|
},
|
|
29
|
-
...(
|
|
30
|
-
...(
|
|
62
|
+
...(material.initData ? { initData: material.initData } : {}),
|
|
63
|
+
...(material.eoa ? { eoa: material.eoa } : {}),
|
|
31
64
|
chain: input.chain,
|
|
32
65
|
deployed: input.deployed,
|
|
33
66
|
};
|
|
67
|
+
if (!searchable || !credentials)
|
|
68
|
+
return base;
|
|
69
|
+
// The module setup is salt-independent, so only the account definition varies
|
|
70
|
+
// across attempts.
|
|
71
|
+
const account = selectPasskeyAccount({
|
|
72
|
+
account: material.account,
|
|
73
|
+
credentials: orderWebauthnCredentials(credentials, { kind: 'canonical' }),
|
|
74
|
+
fingerprint: setupFingerprint({ account: material.account, setup }),
|
|
75
|
+
deriveAddress: (candidate) => {
|
|
76
|
+
const construction = { ...base, account: candidate };
|
|
77
|
+
return createAccountAdapter(construction).getIdentity(construction)
|
|
78
|
+
.address;
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
return { ...base, account };
|
|
34
82
|
}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Address, type Hex } from 'viem';
|
|
2
2
|
import type { AccountDefinition, AccountDeploymentPlan, AccountInitData, AccountValueSelection } from './types.js';
|
|
3
3
|
export interface DeploymentMaterial {
|
|
4
4
|
readonly address: Address;
|
|
5
5
|
readonly factory?: Address;
|
|
6
6
|
readonly factoryData?: Hex;
|
|
7
7
|
}
|
|
8
|
+
export declare const NEXUS_SALT_DEFAULTS: {
|
|
9
|
+
readonly 'nexus-empty-calldata-salt': `0x${string}`;
|
|
10
|
+
};
|
|
11
|
+
export declare const KERNEL_SALT_DEFAULTS: {
|
|
12
|
+
readonly 'kernel-zero-salt': "0x0000000000000000000000000000000000000000000000000000000000000000";
|
|
13
|
+
};
|
|
14
|
+
export declare const STARTALE_SALT_DEFAULTS: {
|
|
15
|
+
readonly 'startale-zero-salt': "0x0000000000000000000000000000000000000000000000000000000000000000";
|
|
16
|
+
};
|
|
17
|
+
export declare const SAFE_NONCE_DEFAULTS: {
|
|
18
|
+
readonly 'safe-zero-nonce': 0n;
|
|
19
|
+
};
|
|
8
20
|
export declare function selectedValue<Value, Profile extends string>(selection: AccountValueSelection<Value, Profile>, defaults: Readonly<Record<Profile, Value>>): Value;
|
|
9
21
|
export declare function deploymentPlan(chain: AccountDeploymentPlan['chain'], material: DeploymentMaterial, deployed: boolean): AccountDeploymentPlan;
|
|
10
22
|
export declare function initDataMaterial(initData: AccountInitData | undefined): DeploymentMaterial | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../../accounts/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../../accounts/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAuB,MAAM,MAAM,CAAA;AAClE,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,CAAA;CAC3B;AAID,eAAO,MAAM,mBAAmB;;CAEtB,CAAA;AACV,eAAO,MAAM,oBAAoB;;CAA4C,CAAA;AAC7E,eAAO,MAAM,sBAAsB;;CAEzB,CAAA;AACV,eAAO,MAAM,mBAAmB;;CAAqC,CAAA;AAErE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,SAAS,MAAM,EACzD,SAAS,EAAE,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,EAChD,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,GACzC,KAAK,CAIP;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,EACrC,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,OAAO,GAChB,qBAAqB,CAcvB;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,GAAG,SAAS,GACpC,kBAAkB,GAAG,SAAS,CAShC;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,iBAAiB,GAC5B,iBAAiB,CAAC,MAAM,CAAC,CAE3B"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
import { keccak256, zeroHash } from 'viem';
|
|
2
|
+
// Salt/nonce defaults live here rather than in the adapters so the passkey salt
|
|
3
|
+
// search grinds the same values the adapters derive addresses from.
|
|
4
|
+
export const NEXUS_SALT_DEFAULTS = {
|
|
5
|
+
'nexus-empty-calldata-salt': keccak256('0x'),
|
|
6
|
+
};
|
|
7
|
+
export const KERNEL_SALT_DEFAULTS = { 'kernel-zero-salt': zeroHash };
|
|
8
|
+
export const STARTALE_SALT_DEFAULTS = {
|
|
9
|
+
'startale-zero-salt': zeroHash,
|
|
10
|
+
};
|
|
11
|
+
export const SAFE_NONCE_DEFAULTS = { 'safe-zero-nonce': 0n };
|
|
1
12
|
export function selectedValue(selection, defaults) {
|
|
2
13
|
return selection.source === 'explicit'
|
|
3
14
|
? selection.value
|
|
@@ -99,9 +99,16 @@ declare class OwnersFieldRequiredError extends AccountError {
|
|
|
99
99
|
traceId?: string;
|
|
100
100
|
});
|
|
101
101
|
}
|
|
102
|
+
declare class PasskeyConfigurationNotInstallableError extends AccountError {
|
|
103
|
+
constructor(reason: string, params?: {
|
|
104
|
+
context?: any;
|
|
105
|
+
errorType?: string;
|
|
106
|
+
traceId?: string;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
102
109
|
declare class Eip712DomainNotAvailableError extends AccountError {
|
|
103
110
|
constructor(message: string);
|
|
104
111
|
}
|
|
105
112
|
declare function isAccountError(error: Error): error is AccountError;
|
|
106
|
-
export { isAccountError, AccountError, Eip712DomainNotAvailableError, Eip7702AccountMustHaveEoaError, EoaAccountMustHaveAccountError, FactoryArgsNotAvailableError, DefaultValidatorAlreadyInitializedError, SigningNotSupportedForAccountError, Eip7702NotSupportedForAccountError, AccountConfigurationNotSupportedError, WalletClientNoConnectedAccountError, ModuleInstallationNotSupportedError, EoaSigningNotSupportedError, EoaSigningMethodNotConfiguredError, OwnersFieldRequiredError, };
|
|
113
|
+
export { isAccountError, AccountError, Eip712DomainNotAvailableError, Eip7702AccountMustHaveEoaError, EoaAccountMustHaveAccountError, FactoryArgsNotAvailableError, DefaultValidatorAlreadyInitializedError, SigningNotSupportedForAccountError, Eip7702NotSupportedForAccountError, AccountConfigurationNotSupportedError, WalletClientNoConnectedAccountError, ModuleInstallationNotSupportedError, EoaSigningNotSupportedError, EoaSigningMethodNotConfiguredError, OwnersFieldRequiredError, PasskeyConfigurationNotInstallableError, };
|
|
107
114
|
//# sourceMappingURL=error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../accounts/error.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../accounts/error.ts"],"names":[],"mappings":"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"}
|
|
@@ -121,6 +121,14 @@ class OwnersFieldRequiredError extends AccountError {
|
|
|
121
121
|
});
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
|
+
class PasskeyConfigurationNotInstallableError extends AccountError {
|
|
125
|
+
constructor(reason, params) {
|
|
126
|
+
super({
|
|
127
|
+
message: `Passkey owner set cannot be installed on a new account: ${reason}`,
|
|
128
|
+
...params,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
124
132
|
class Eip712DomainNotAvailableError extends AccountError {
|
|
125
133
|
constructor(message) {
|
|
126
134
|
super({
|
|
@@ -147,4 +155,4 @@ function getAccountName(account) {
|
|
|
147
155
|
return 'EOA';
|
|
148
156
|
}
|
|
149
157
|
}
|
|
150
|
-
export { isAccountError, AccountError, Eip712DomainNotAvailableError, Eip7702AccountMustHaveEoaError, EoaAccountMustHaveAccountError, FactoryArgsNotAvailableError, DefaultValidatorAlreadyInitializedError, SigningNotSupportedForAccountError, Eip7702NotSupportedForAccountError, AccountConfigurationNotSupportedError, WalletClientNoConnectedAccountError, ModuleInstallationNotSupportedError, EoaSigningNotSupportedError, EoaSigningMethodNotConfiguredError, OwnersFieldRequiredError, };
|
|
158
|
+
export { isAccountError, AccountError, Eip712DomainNotAvailableError, Eip7702AccountMustHaveEoaError, EoaAccountMustHaveAccountError, FactoryArgsNotAvailableError, DefaultValidatorAlreadyInitializedError, SigningNotSupportedForAccountError, Eip7702NotSupportedForAccountError, AccountConfigurationNotSupportedError, WalletClientNoConnectedAccountError, ModuleInstallationNotSupportedError, EoaSigningNotSupportedError, EoaSigningMethodNotConfiguredError, OwnersFieldRequiredError, PasskeyConfigurationNotInstallableError, };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Address, type Hex } from 'viem';
|
|
2
|
+
import { type WebauthnInstallCredential } from '../modules/validators/webauthn.js';
|
|
3
|
+
import type { AccountDefinition } from './types.js';
|
|
4
|
+
export declare const MAX_DEPLOYMENT_PASSKEYS = 6;
|
|
5
|
+
export declare const MAX_PASSKEY_CREDENTIALS = 32;
|
|
6
|
+
export declare const MAX_PASSKEY_SALT_ATTEMPTS = 65536;
|
|
7
|
+
export declare function accountSupportsSaltSearch(account: AccountDefinition): boolean;
|
|
8
|
+
export declare function accountWithSaltAttempt(account: AccountDefinition, attempt: number): AccountDefinition;
|
|
9
|
+
export declare function assertPasskeySetInstallable(input: {
|
|
10
|
+
readonly credentials: readonly WebauthnInstallCredential[];
|
|
11
|
+
readonly atDeployment: boolean;
|
|
12
|
+
}): void;
|
|
13
|
+
/**
|
|
14
|
+
* Picks the account salt whose derived address makes the (canonically ordered)
|
|
15
|
+
* passkey set installable. Deterministic: the same inputs select the same salt
|
|
16
|
+
* on every host and in every run.
|
|
17
|
+
*/
|
|
18
|
+
export declare function selectPasskeyAccount(input: {
|
|
19
|
+
readonly account: AccountDefinition;
|
|
20
|
+
readonly credentials: readonly WebauthnInstallCredential[];
|
|
21
|
+
readonly fingerprint: Hex;
|
|
22
|
+
readonly deriveAddress: (account: AccountDefinition) => Address;
|
|
23
|
+
readonly maxAttempts?: number;
|
|
24
|
+
}): AccountDefinition;
|
|
25
|
+
//# sourceMappingURL=passkey-install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passkey-install.d.ts","sourceRoot":"","sources":["../../../accounts/passkey-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAuB,KAAK,GAAG,EAAa,MAAM,MAAM,CAAA;AAC7E,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,gCAAgC,CAAA;AASvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAOhD,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAGzC,eAAO,MAAM,yBAAyB,QAAS,CAAA;AAK/C,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAO7E;AAaD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,iBAAiB,CA2DnB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,WAAW,EAAE,SAAS,yBAAyB,EAAE,CAAA;IAC1D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAC/B,GAAG,IAAI,CAmBP;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;IACnC,QAAQ,CAAC,WAAW,EAAE,SAAS,yBAAyB,EAAE,CAAA;IAC1D,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAA;IACzB,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAA;IAG/D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B,GAAG,iBAAiB,CAgBpB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { encodeAbiParameters, keccak256 } from 'viem';
|
|
2
|
+
import { hasDuplicateWebauthnCredentials, webauthnCredentialsAreAscending, } from '../modules/validators/webauthn.js';
|
|
3
|
+
import { KERNEL_SALT_DEFAULTS, NEXUS_SALT_DEFAULTS, SAFE_NONCE_DEFAULTS, STARTALE_SALT_DEFAULTS, selectedValue, } from './deployment.js';
|
|
4
|
+
import { PasskeyConfigurationNotInstallableError } from './error.js';
|
|
5
|
+
// The validator's install data must list credentials with strictly ascending
|
|
6
|
+
// `keccak(x, y, account)`, so the number of salts that have to be tried grows
|
|
7
|
+
// with the factorial of the credential count. Six passkeys is ~0.2s of
|
|
8
|
+
// synchronous work in the worst realistic case; beyond that the remaining
|
|
9
|
+
// passkeys are added after deployment, which the validator accepts in any order.
|
|
10
|
+
export const MAX_DEPLOYMENT_PASSKEYS = 6;
|
|
11
|
+
// The validator's own `MAX_CREDENTIALS`.
|
|
12
|
+
export const MAX_PASSKEY_CREDENTIALS = 32;
|
|
13
|
+
// A fixed attempt count, never a wall-clock budget: a slower host must derive
|
|
14
|
+
// the same address as a faster one.
|
|
15
|
+
export const MAX_PASSKEY_SALT_ATTEMPTS = 65_536;
|
|
16
|
+
const MEMO_LIMIT = 256;
|
|
17
|
+
const memo = new Map();
|
|
18
|
+
export function accountSupportsSaltSearch(account) {
|
|
19
|
+
return (account.kind === 'nexus' ||
|
|
20
|
+
account.kind === 'kernel' ||
|
|
21
|
+
account.kind === 'startale' ||
|
|
22
|
+
account.kind === 'safe');
|
|
23
|
+
}
|
|
24
|
+
function saltAttempt(base, attempt) {
|
|
25
|
+
return keccak256(encodeAbiParameters([{ type: 'bytes32' }, { type: 'uint256' }], [base, BigInt(attempt)]));
|
|
26
|
+
}
|
|
27
|
+
// Attempt 0 is the caller's own salt, so a configuration that already installs
|
|
28
|
+
// cleanly keeps the address it derives today.
|
|
29
|
+
export function accountWithSaltAttempt(account, attempt) {
|
|
30
|
+
if (attempt === 0)
|
|
31
|
+
return account;
|
|
32
|
+
switch (account.kind) {
|
|
33
|
+
case 'nexus':
|
|
34
|
+
return {
|
|
35
|
+
...account,
|
|
36
|
+
salt: {
|
|
37
|
+
source: 'explicit',
|
|
38
|
+
value: saltAttempt(selectedValue(account.salt, NEXUS_SALT_DEFAULTS), attempt),
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
case 'kernel':
|
|
42
|
+
return {
|
|
43
|
+
...account,
|
|
44
|
+
salt: {
|
|
45
|
+
source: 'explicit',
|
|
46
|
+
value: saltAttempt(selectedValue(account.salt, KERNEL_SALT_DEFAULTS), attempt),
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
case 'startale':
|
|
50
|
+
return {
|
|
51
|
+
...account,
|
|
52
|
+
salt: {
|
|
53
|
+
source: 'explicit',
|
|
54
|
+
value: saltAttempt(selectedValue(account.salt, STARTALE_SALT_DEFAULTS), attempt),
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
case 'safe': {
|
|
58
|
+
const nonce = selectedValue(account.nonce, SAFE_NONCE_DEFAULTS);
|
|
59
|
+
return {
|
|
60
|
+
...account,
|
|
61
|
+
nonce: {
|
|
62
|
+
source: 'explicit',
|
|
63
|
+
value: BigInt(keccak256(encodeAbiParameters([{ type: 'uint256' }, { type: 'uint256' }], [nonce, BigInt(attempt)]))),
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
case 'hca':
|
|
68
|
+
case 'eoa':
|
|
69
|
+
throw new PasskeyConfigurationNotInstallableError(`${account.kind} accounts have no salt to search`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export function assertPasskeySetInstallable(input) {
|
|
73
|
+
if (hasDuplicateWebauthnCredentials(input.credentials)) {
|
|
74
|
+
throw new PasskeyConfigurationNotInstallableError('the owner set contains duplicate passkeys');
|
|
75
|
+
}
|
|
76
|
+
if (input.credentials.length > MAX_PASSKEY_CREDENTIALS) {
|
|
77
|
+
throw new PasskeyConfigurationNotInstallableError(`the WebAuthn validator supports at most ${MAX_PASSKEY_CREDENTIALS} passkeys, received ${input.credentials.length}`);
|
|
78
|
+
}
|
|
79
|
+
if (input.atDeployment &&
|
|
80
|
+
input.credentials.length > MAX_DEPLOYMENT_PASSKEYS) {
|
|
81
|
+
throw new PasskeyConfigurationNotInstallableError(`at most ${MAX_DEPLOYMENT_PASSKEYS} passkeys can be installed at deployment, received ${input.credentials.length}. Deploy with ${MAX_DEPLOYMENT_PASSKEYS} or fewer and add the rest with \`passkeys.addOwner\``);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Picks the account salt whose derived address makes the (canonically ordered)
|
|
86
|
+
* passkey set installable. Deterministic: the same inputs select the same salt
|
|
87
|
+
* on every host and in every run.
|
|
88
|
+
*/
|
|
89
|
+
export function selectPasskeyAccount(input) {
|
|
90
|
+
const cached = memo.get(input.fingerprint);
|
|
91
|
+
if (cached)
|
|
92
|
+
return cached;
|
|
93
|
+
const maxAttempts = input.maxAttempts ?? MAX_PASSKEY_SALT_ATTEMPTS;
|
|
94
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
95
|
+
const candidate = accountWithSaltAttempt(input.account, attempt);
|
|
96
|
+
const address = input.deriveAddress(candidate);
|
|
97
|
+
if (webauthnCredentialsAreAscending(input.credentials, address)) {
|
|
98
|
+
if (memo.size >= MEMO_LIMIT)
|
|
99
|
+
memo.clear();
|
|
100
|
+
memo.set(input.fingerprint, candidate);
|
|
101
|
+
return candidate;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
throw new PasskeyConfigurationNotInstallableError(`no account salt in ${maxAttempts} attempts installs these ${input.credentials.length} passkeys. Deploy with fewer passkeys and add the rest with \`passkeys.addOwner\``);
|
|
105
|
+
}
|
|
@@ -15,7 +15,6 @@ declare function enable(validators: (OwnableValidatorConfig | WebauthnValidatorC
|
|
|
15
15
|
declare function changeThreshold(newThreshold: number): CalldataInput;
|
|
16
16
|
/**
|
|
17
17
|
* Disable multi-factor authentication
|
|
18
|
-
* @param rhinestoneAccount Account to disable multi-factor authentication on
|
|
19
18
|
* @returns Calls to disable multi-factor authentication
|
|
20
19
|
*/
|
|
21
20
|
declare function disable(): LazyCallInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mfa.d.ts","sourceRoot":"","sources":["../../../actions/mfa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,GAAG,EAAiB,MAAM,MAAM,CAAA;AAClE,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,mBAAmB,CAAA;AA6C1B;;;;;GAKG;AACH,iBAAS,MAAM,CACb,UAAU,EAAE,CAAC,sBAAsB,GAAG,uBAAuB,GAAG,IAAI,CAAC,EAAE,EACvE,SAAS,SAAI,GACZ,aAAa,CAOf;AAED;;;;GAIG;AACH,iBAAS,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAkB5D;AAED
|
|
1
|
+
{"version":3,"file":"mfa.d.ts","sourceRoot":"","sources":["../../../actions/mfa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,GAAG,EAAiB,MAAM,MAAM,CAAA;AAClE,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,mBAAmB,CAAA;AA6C1B;;;;;GAKG;AACH,iBAAS,MAAM,CACb,UAAU,EAAE,CAAC,sBAAsB,GAAG,uBAAuB,GAAG,IAAI,CAAC,EAAE,EACvE,SAAS,SAAI,GACZ,aAAa,CAOf;AAED;;;;GAIG;AACH,iBAAS,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAkB5D;AAED;;;GAGG;AACH,iBAAS,OAAO,IAAI,aAAa,CAOhC;AAED;;;;;GAKG;AACH,iBAAS,eAAe,CACtB,EAAE,EAAE,GAAG,GAAG,MAAM,EAChB,SAAS,EAAE,sBAAsB,GAAG,uBAAuB,GAC1D,aAAa,CA+Bf;AAED;;;;;GAKG;AACH,iBAAS,kBAAkB,CACzB,EAAE,EAAE,GAAG,GAAG,MAAM,EAChB,SAAS,EAAE,sBAAsB,GAAG,uBAAuB,GAC1D,aAAa,CA2Bf;AAED,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAA"}
|
package/dist/src/actions/mfa.js
CHANGED
|
@@ -61,7 +61,6 @@ function changeThreshold(newThreshold) {
|
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
63
|
* Disable multi-factor authentication
|
|
64
|
-
* @param rhinestoneAccount Account to disable multi-factor authentication on
|
|
65
64
|
* @returns Calls to disable multi-factor authentication
|
|
66
65
|
*/
|
|
67
66
|
function disable() {
|
|
@@ -2,8 +2,7 @@ import type { CalldataInput, LazyCallInput } from '../config/account.js';
|
|
|
2
2
|
import { type WebauthnCredential } from '../modules/validators/webauthn.js';
|
|
3
3
|
/**
|
|
4
4
|
* Enable passkeys authentication
|
|
5
|
-
* @param
|
|
6
|
-
* @param authenticatorId Authenticator ID for the passkey
|
|
5
|
+
* @param credential WebAuthn credential to enable
|
|
7
6
|
* @returns Calls to enable passkeys authentication
|
|
8
7
|
*/
|
|
9
8
|
declare function enable(credential: WebauthnCredential): LazyCallInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkeys.d.ts","sourceRoot":"","sources":["../../../actions/passkeys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAA;AAWvC
|
|
1
|
+
{"version":3,"file":"passkeys.d.ts","sourceRoot":"","sources":["../../../actions/passkeys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAA;AAWvC;;;;GAIG;AACH,iBAAS,MAAM,CAAC,UAAU,EAAE,kBAAkB,GAAG,aAAa,CAU7D;AAED;;;GAGG;AACH,iBAAS,OAAO,IAAI,aAAa,CAgBhC;AAED;;;;;;GAMG;AACH,iBAAS,QAAQ,CACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,uBAAuB,EAAE,OAAO,GAC/B,aAAa,CAOf;AAED;;;;;GAKG;AACH,iBAAS,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAEpE;AAED;;;;GAIG;AACH,iBAAS,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CAE5D;AAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA"}
|
|
@@ -3,8 +3,7 @@ import { resolveModuleInstallation, resolveModuleUninstallation, } from './runti
|
|
|
3
3
|
import { addWebauthnCredential, changeWebauthnThreshold, removeWebauthnCredential, } from './webauthn.js';
|
|
4
4
|
/**
|
|
5
5
|
* Enable passkeys authentication
|
|
6
|
-
* @param
|
|
7
|
-
* @param authenticatorId Authenticator ID for the passkey
|
|
6
|
+
* @param credential WebAuthn credential to enable
|
|
8
7
|
* @returns Calls to enable passkeys authentication
|
|
9
8
|
*/
|
|
10
9
|
function enable(credential) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct-signing.d.ts","sourceRoot":"","sources":["../../../api/direct-signing.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"direct-signing.d.ts","sourceRoot":"","sources":["../../../api/direct-signing.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,GAAG,EAIR,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,MAAM,CAAA;AACb,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAIxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAA;AAa1F,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,kBAAkB,CAAA;AAEzB,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAA;IAC5C,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAA;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAA;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAA;CAC5C;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,mBAAmB,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GACjE,OAAO,CAAC;IACT,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAA;CACvC,CAAC,CAwDD;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAA;CAAE,GACvE,OAAO,CAAC;IACT,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAA;CACvC,CAAC,CA0DD"}
|