@rhinestone/sdk 0.10.3 → 0.11.1

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.
Files changed (37) hide show
  1. package/dist/src/accounts/index.d.ts +3 -3
  2. package/dist/src/accounts/index.d.ts.map +1 -1
  3. package/dist/src/accounts/index.js +46 -4
  4. package/dist/src/accounts/kernel.d.ts +19 -0
  5. package/dist/src/accounts/kernel.d.ts.map +1 -0
  6. package/dist/src/accounts/kernel.js +221 -0
  7. package/dist/src/accounts/kernel.test.d.ts +2 -0
  8. package/dist/src/accounts/kernel.test.d.ts.map +1 -0
  9. package/dist/src/accounts/kernel.test.js +86 -0
  10. package/dist/src/accounts/nexus.d.ts +4 -2
  11. package/dist/src/accounts/nexus.d.ts.map +1 -1
  12. package/dist/src/accounts/nexus.js +22 -10
  13. package/dist/src/accounts/nexus.test.js +36 -4
  14. package/dist/src/accounts/safe.d.ts +4 -2
  15. package/dist/src/accounts/safe.d.ts.map +1 -1
  16. package/dist/src/accounts/safe.js +14 -2
  17. package/dist/src/accounts/safe.test.js +36 -4
  18. package/dist/src/accounts/utils.d.ts +5 -0
  19. package/dist/src/accounts/utils.d.ts.map +1 -1
  20. package/dist/src/execution/index.d.ts.map +1 -1
  21. package/dist/src/execution/index.js +4 -4
  22. package/dist/src/execution/smart-session.d.ts.map +1 -1
  23. package/dist/src/execution/smart-session.js +7 -2
  24. package/dist/src/execution/utils.d.ts +4 -3
  25. package/dist/src/execution/utils.d.ts.map +1 -1
  26. package/dist/src/execution/utils.js +25 -39
  27. package/dist/src/modules/index.d.ts +2 -1
  28. package/dist/src/modules/index.d.ts.map +1 -1
  29. package/dist/src/modules/index.js +4 -1
  30. package/dist/src/modules/registry.d.ts +9 -0
  31. package/dist/src/modules/registry.d.ts.map +1 -0
  32. package/dist/src/modules/registry.js +60 -0
  33. package/dist/src/orchestrator/registry.d.ts.map +1 -1
  34. package/dist/src/orchestrator/registry.js +1 -0
  35. package/dist/src/types.d.ts +1 -1
  36. package/dist/src/types.d.ts.map +1 -1
  37. package/package.json +1 -1
@@ -1,21 +1,21 @@
1
1
  import { type Chain, type Hex, type PublicClient } from 'viem';
2
2
  import type { OwnerSet, RhinestoneAccountConfig, Session } from '../types';
3
+ import { ValidatorConfig } from './utils';
3
4
  declare function getDeployArgs(config: RhinestoneAccountConfig): {
4
5
  factory: `0x${string}`;
5
6
  factoryData: `0x${string}`;
6
7
  salt: `0x${string}`;
7
- hashedInitcode: `0x${string}`;
8
8
  implementation: `0x${string}`;
9
9
  initializationCallData: null;
10
10
  } | {
11
11
  factory: `0x${string}`;
12
12
  factoryData: `0x${string}`;
13
13
  salt: `0x${string}`;
14
- hashedInitcode: `0x${string}`;
15
14
  implementation: `0x${string}`;
16
15
  initializationCallData: `0x${string}`;
17
16
  };
18
17
  declare function getAddress(config: RhinestoneAccountConfig): `0x${string}`;
18
+ declare function getPackedSignature(config: RhinestoneAccountConfig, owners: OwnerSet, chain: Chain, validator: ValidatorConfig, hash: Hex, transformSignature?: (signature: Hex) => Hex): Promise<`0x${string}`>;
19
19
  declare function isDeployed(chain: Chain, config: RhinestoneAccountConfig): Promise<boolean>;
20
20
  declare function deploy(config: RhinestoneAccountConfig, chain: Chain, session?: Session): Promise<void>;
21
21
  declare function deploySource(chain: Chain, config: RhinestoneAccountConfig): Promise<void>;
@@ -24,5 +24,5 @@ declare function getBundleInitCode(config: RhinestoneAccountConfig): `0x${string
24
24
  declare function getSmartAccount(config: RhinestoneAccountConfig, client: PublicClient, chain: Chain): Promise<import("viem/account-abstraction").SmartAccount<import("viem/account-abstraction").SmartAccountImplementation<import("viem").Abi, "0.7">>>;
25
25
  declare function getSmartSessionSmartAccount(config: RhinestoneAccountConfig, client: PublicClient, chain: Chain, session: Session): Promise<import("viem/account-abstraction").SmartAccount<import("viem/account-abstraction").SmartAccountImplementation<import("viem").Abi, "0.7">>>;
26
26
  declare function sign(validators: OwnerSet, chain: Chain, hash: Hex): Promise<`0x${string}`>;
27
- export { getDeployArgs, getBundleInitCode, getAddress, isDeployed, deploy, deploySource, deployTarget, getSmartAccount, getSmartSessionSmartAccount, sign, };
27
+ export { getDeployArgs, getBundleInitCode, getAddress, isDeployed, deploy, deploySource, deployTarget, getSmartAccount, getSmartSessionSmartAccount, getPackedSignature, sign, };
28
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../accounts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EAKV,KAAK,GAAG,EAGR,KAAK,YAAY,EAIlB,MAAM,MAAM,CAAA;AAWb,OAAO,KAAK,EAEV,QAAQ,EACR,uBAAuB,EACvB,OAAO,EACR,MAAM,UAAU,CAAA;AAiBjB,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;;;;;;;;;EAUrD;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,uBAAuB,iBAgBlD;AAED,iBAAe,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,oBAiBtE;AAED,iBAAe,MAAM,CACnB,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,OAAO,iBAMlB;AAED,iBAAe,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,iBAMxE;AAED,iBAAe,YAAY,CACzB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,EAAE,OAAO,iBASlB;AAUD,iBAAS,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,6BAUzD;AAgID,iBAAe,eAAe,CAC5B,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,KAAK,sJA0Bb;AAED,iBAAe,2BAA2B,CACxC,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,sJA8BjB;AAED,iBAAe,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,0BAYhE;AAgED,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,2BAA2B,EAC3B,IAAI,GACL,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../accounts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EAKV,KAAK,GAAG,EAER,KAAK,YAAY,EAGlB,MAAM,MAAM,CAAA;AAWb,OAAO,KAAK,EAEV,QAAQ,EACR,uBAAuB,EACvB,OAAO,EACR,MAAM,UAAU,CAAA;AA4BjB,OAAO,EAAoB,eAAe,EAAE,MAAM,SAAS,CAAA;AAE3D,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;;;;;;;EAarD;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,uBAAuB,iBAmBlD;AAGD,iBAAe,kBAAkB,CAC/B,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,GAAG,EACT,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,0BA2BvE;AAED,iBAAe,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,oBAiBtE;AAED,iBAAe,MAAM,CACnB,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,OAAO,iBAMlB;AAED,iBAAe,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,iBAMxE;AAED,iBAAe,YAAY,CACzB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,EAAE,OAAO,iBASlB;AAUD,iBAAS,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,6BAUzD;AAgID,iBAAe,eAAe,CAC5B,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,KAAK,sJAmCb;AAED,iBAAe,2BAA2B,CACxC,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,sJAuCjB;AAED,iBAAe,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,0BAYhE;AAsED,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,2BAA2B,EAC3B,kBAAkB,EAClB,IAAI,GACL,CAAA"}
@@ -9,11 +9,13 @@ exports.deploySource = deploySource;
9
9
  exports.deployTarget = deployTarget;
10
10
  exports.getSmartAccount = getSmartAccount;
11
11
  exports.getSmartSessionSmartAccount = getSmartSessionSmartAccount;
12
+ exports.getPackedSignature = getPackedSignature;
12
13
  exports.sign = sign;
13
14
  const viem_1 = require("viem");
14
15
  const smart_session_1 = require("../execution/smart-session");
15
16
  const modules_1 = require("../modules");
16
17
  const validators_1 = require("../modules/validators");
18
+ const kernel_1 = require("./kernel");
17
19
  const nexus_1 = require("./nexus");
18
20
  const safe_1 = require("./safe");
19
21
  const utils_1 = require("./utils");
@@ -26,6 +28,9 @@ function getDeployArgs(config) {
26
28
  case 'nexus': {
27
29
  return (0, nexus_1.getDeployArgs)(config);
28
30
  }
31
+ case 'kernel': {
32
+ return (0, kernel_1.getDeployArgs)(config);
33
+ }
29
34
  }
30
35
  }
31
36
  function getAddress(config) {
@@ -35,10 +40,35 @@ function getAddress(config) {
35
40
  }
36
41
  return config.eoa.address;
37
42
  }
38
- const { factory, salt, hashedInitcode } = getDeployArgs(config);
39
- const hash = (0, viem_1.keccak256)((0, viem_1.encodePacked)(['bytes1', 'address', 'bytes32', 'bytes'], ['0xff', factory, salt, hashedInitcode]));
40
- const address = (0, viem_1.slice)(hash, 12, 32);
41
- return address;
43
+ const account = getAccount(config);
44
+ switch (account.type) {
45
+ case 'safe': {
46
+ return (0, safe_1.getAddress)(config);
47
+ }
48
+ case 'nexus': {
49
+ return (0, nexus_1.getAddress)(config);
50
+ }
51
+ case 'kernel': {
52
+ return (0, kernel_1.getAddress)(config);
53
+ }
54
+ }
55
+ }
56
+ // Signs and packs a signature to be EIP-1271 compatibleAdd commentMore actions
57
+ async function getPackedSignature(config, owners, chain, validator, hash, transformSignature = (signature) => signature) {
58
+ const signFn = (hash) => sign(owners, chain, hash);
59
+ const account = getAccount(config);
60
+ const address = getAddress(config);
61
+ switch (account.type) {
62
+ case 'safe': {
63
+ return (0, safe_1.getPackedSignature)(signFn, hash, validator, transformSignature);
64
+ }
65
+ case 'nexus': {
66
+ return (0, nexus_1.getPackedSignature)(signFn, hash, validator, transformSignature);
67
+ }
68
+ case 'kernel': {
69
+ return (0, kernel_1.getPackedSignature)(signFn, hash, validator, address, transformSignature);
70
+ }
71
+ }
42
72
  }
43
73
  async function isDeployed(chain, config) {
44
74
  const publicClient = (0, viem_1.createPublicClient)({
@@ -213,6 +243,9 @@ async function getSmartAccount(config, client, chain) {
213
243
  case 'nexus': {
214
244
  return (0, nexus_1.getSmartAccount)(client, address, config.owners, ownerValidator.address, signFn);
215
245
  }
246
+ case 'kernel': {
247
+ return (0, kernel_1.getSmartAccount)(client, address, config.owners, ownerValidator.address, signFn);
248
+ }
216
249
  }
217
250
  }
218
251
  async function getSmartSessionSmartAccount(config, client, chain, session) {
@@ -230,6 +263,9 @@ async function getSmartSessionSmartAccount(config, client, chain, session) {
230
263
  case 'nexus': {
231
264
  return (0, nexus_1.getSessionSmartAccount)(client, address, session, smartSessionValidator.address, signFn);
232
265
  }
266
+ case 'kernel': {
267
+ return (0, kernel_1.getSessionSmartAccount)(client, address, session, smartSessionValidator.address, signFn);
268
+ }
233
269
  }
234
270
  }
235
271
  async function sign(validators, chain, hash) {
@@ -271,6 +307,9 @@ async function get7702SmartAccount(config, client) {
271
307
  case 'nexus': {
272
308
  return (0, nexus_1.get7702SmartAccount)(config.eoa, client);
273
309
  }
310
+ case 'kernel': {
311
+ return (0, kernel_1.get7702SmartAccount)();
312
+ }
274
313
  }
275
314
  }
276
315
  async function get7702InitCalls(config) {
@@ -282,6 +321,9 @@ async function get7702InitCalls(config) {
282
321
  case 'nexus': {
283
322
  return (0, nexus_1.get7702InitCalls)(config);
284
323
  }
324
+ case 'kernel': {
325
+ return (0, kernel_1.get7702InitCalls)();
326
+ }
285
327
  }
286
328
  }
287
329
  function is7702(config) {
@@ -0,0 +1,19 @@
1
+ import { Abi, Address, Hex, PublicClient } from 'viem';
2
+ import { SmartAccount, SmartAccountImplementation } from 'viem/account-abstraction';
3
+ import { OwnerSet, RhinestoneAccountConfig, Session } from '../types';
4
+ import { ValidatorConfig } from './utils';
5
+ declare function getDeployArgs(config: RhinestoneAccountConfig): {
6
+ factory: `0x${string}`;
7
+ factoryData: `0x${string}`;
8
+ salt: "0x0000000000000000000000000000000000000000000000000000000000000000";
9
+ implementation: `0x${string}`;
10
+ initializationCallData: `0x${string}`;
11
+ };
12
+ declare function getAddress(config: RhinestoneAccountConfig): `0x${string}`;
13
+ declare function get7702InitCalls(): never;
14
+ declare function get7702SmartAccount(): never;
15
+ declare function getPackedSignature(signFn: (message: Hex) => Promise<Hex>, hash: Hex, validator: ValidatorConfig, accountAddress: Address, transformSignature?: (signature: Hex) => Hex): Promise<`0x${string}`>;
16
+ declare function getSmartAccount(client: PublicClient, address: Address, owners: OwnerSet, validatorAddress: Address, sign: (hash: Hex) => Promise<Hex>): Promise<SmartAccount<SmartAccountImplementation<Abi, "0.7">>>;
17
+ declare function getSessionSmartAccount(client: PublicClient, address: Address, session: Session, validatorAddress: Address, sign: (hash: Hex) => Promise<Hex>): Promise<SmartAccount<SmartAccountImplementation<Abi, "0.7">>>;
18
+ export { getAddress, getDeployArgs, getSmartAccount, getSessionSmartAccount, get7702InitCalls, get7702SmartAccount, getPackedSignature, };
19
+ //# sourceMappingURL=kernel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../../accounts/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,OAAO,EAQP,GAAG,EAEH,YAAY,EAMb,MAAM,MAAM,CAAA;AACb,OAAO,EAIL,YAAY,EACZ,0BAA0B,EAE3B,MAAM,0BAA0B,CAAA;AASjC,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACrE,OAAO,EAAoC,eAAe,EAAE,MAAM,SAAS,CAAA;AAgB3E,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;EAsGrD;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,uBAAuB,iBASlD;AAED,iBAAS,gBAAgB,IAAI,KAAK,CAEjC;AAED,iBAAS,mBAAmB,IAAI,KAAK,CAEpC;AAED,iBAAe,kBAAkB,CAC/B,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACtC,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,eAAe,EAC1B,cAAc,EAAE,OAAO,EACvB,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,0BAevE;AAwBD,iBAAe,eAAe,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,QAAQ,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAYlC;AAED,iBAAe,sBAAsB,CACnC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAwBlC;AA+ED,OAAO,EACL,UAAU,EACV,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,CAAA"}
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAddress = getAddress;
4
+ exports.getDeployArgs = getDeployArgs;
5
+ exports.getSmartAccount = getSmartAccount;
6
+ exports.getSessionSmartAccount = getSessionSmartAccount;
7
+ exports.get7702InitCalls = get7702InitCalls;
8
+ exports.get7702SmartAccount = get7702SmartAccount;
9
+ exports.getPackedSignature = getPackedSignature;
10
+ const viem_1 = require("viem");
11
+ const account_abstraction_1 = require("viem/account-abstraction");
12
+ const modules_1 = require("../modules");
13
+ const validators_1 = require("../modules/validators");
14
+ const utils_1 = require("./utils");
15
+ const KERNEL_META_FACTORY_ADDRESS = '0xd703aae79538628d27099b8c4f621be4ccd142d5';
16
+ const KERNEL_IMPLEMENTATION_ADDRESS = '0xd6CEDDe84be40893d153Be9d467CD6aD37875b28';
17
+ const KERNEL_FACTORY_ADDRESS = '0x2577507b78c2008ff367261cb6285d44ba5ef2e9';
18
+ const KERNEL_BYTECODE = '0x603d3d8160223d3973d6cedde84be40893d153be9d467cd6ad37875b2860095155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f3';
19
+ const KERNEL_VERSION = '0.3.3';
20
+ function getDeployArgs(config) {
21
+ const salt = viem_1.zeroHash;
22
+ const moduleSetup = (0, modules_1.getSetup)(config);
23
+ const rootValidator = (0, viem_1.concat)(['0x01', moduleSetup.validators[0].address]);
24
+ const hook = viem_1.zeroAddress;
25
+ const validatorData = moduleSetup.validators[0].initData;
26
+ const hookData = '0x';
27
+ const hookInstalled = '0x0000000000000000000000000000000000000001';
28
+ const spareValidators = moduleSetup.validators.slice(1);
29
+ const initConfig = [];
30
+ // Install spare validators
31
+ for (const module of spareValidators) {
32
+ const data = (0, viem_1.encodeAbiParameters)([{ type: 'bytes' }, { type: 'bytes' }, { type: 'bytes' }], [module.initData, '0x', '0x']);
33
+ const initData = (0, viem_1.concat)([hookInstalled, data]);
34
+ initConfig.push((0, viem_1.encodeFunctionData)({
35
+ abi: (0, viem_1.parseAbi)(['function installModule(uint256,address,bytes)']),
36
+ functionName: 'installModule',
37
+ args: [module.type, module.address, initData],
38
+ }));
39
+ const validatorId = (0, viem_1.concat)(['0x01', module.address]);
40
+ initConfig.push((0, viem_1.encodeFunctionData)({
41
+ abi: (0, viem_1.parseAbi)(['function grantAccess(bytes21,bytes4,bool)']),
42
+ functionName: 'grantAccess',
43
+ args: [validatorId, '0xe9ae5c53', true],
44
+ }));
45
+ }
46
+ // Install executors
47
+ for (const module of moduleSetup.executors) {
48
+ const data = (0, viem_1.encodeAbiParameters)([{ type: 'bytes' }, { type: 'bytes' }], [module.initData, '0x']);
49
+ const initData = (0, viem_1.concat)([viem_1.zeroAddress, data]);
50
+ initConfig.push((0, viem_1.encodeFunctionData)({
51
+ abi: (0, viem_1.parseAbi)(['function installModule(uint256,address,bytes)']),
52
+ functionName: 'installModule',
53
+ args: [module.type, module.address, initData],
54
+ }));
55
+ }
56
+ // Install fallbacks
57
+ for (const module of moduleSetup.fallbacks) {
58
+ const [selector, flags, selectorData] = (0, viem_1.decodeAbiParameters)([
59
+ { name: 'selector', type: 'bytes4' },
60
+ { name: 'flags', type: 'bytes1' },
61
+ { name: 'data', type: 'bytes' },
62
+ ], module.initData);
63
+ const data = (0, viem_1.encodeAbiParameters)([{ type: 'bytes' }, { type: 'bytes' }], [(0, viem_1.concat)([flags, selectorData]), '0x']);
64
+ const initData = (0, viem_1.concat)([selector, hookInstalled, data]);
65
+ initConfig.push((0, viem_1.encodeFunctionData)({
66
+ abi: (0, viem_1.parseAbi)(['function installModule(uint256,address,bytes)']),
67
+ functionName: 'installModule',
68
+ args: [module.type, module.address, initData],
69
+ }));
70
+ }
71
+ // Install hooks
72
+ for (const module of moduleSetup.hooks) {
73
+ initConfig.push((0, viem_1.encodeFunctionData)({
74
+ abi: (0, viem_1.parseAbi)(['function installModule(uint256,address,bytes)']),
75
+ functionName: 'installModule',
76
+ args: [module.type, module.address, module.initData],
77
+ }));
78
+ }
79
+ const initializationCallData = (0, viem_1.encodeFunctionData)({
80
+ abi: (0, viem_1.parseAbi)(['function initialize(bytes21,address,bytes,bytes,bytes[])']),
81
+ functionName: 'initialize',
82
+ args: [rootValidator, hook, validatorData, hookData, initConfig],
83
+ });
84
+ const factoryData = (0, viem_1.encodeFunctionData)({
85
+ abi: (0, viem_1.parseAbi)(['function deployWithFactory(address,bytes,bytes32)']),
86
+ functionName: 'deployWithFactory',
87
+ args: [KERNEL_FACTORY_ADDRESS, initializationCallData, salt],
88
+ });
89
+ return {
90
+ factory: KERNEL_META_FACTORY_ADDRESS,
91
+ factoryData,
92
+ salt,
93
+ implementation: KERNEL_IMPLEMENTATION_ADDRESS,
94
+ initializationCallData,
95
+ };
96
+ }
97
+ function getAddress(config) {
98
+ const { salt, initializationCallData } = getDeployArgs(config);
99
+ const actualSalt = (0, viem_1.keccak256)((0, viem_1.concat)([initializationCallData, salt]));
100
+ return (0, viem_1.getContractAddress)({
101
+ from: KERNEL_FACTORY_ADDRESS,
102
+ opcode: 'CREATE2',
103
+ bytecode: KERNEL_BYTECODE,
104
+ salt: actualSalt,
105
+ });
106
+ }
107
+ function get7702InitCalls() {
108
+ throw new Error('EIP-7702 is not yet supported for Kernel accounts');
109
+ }
110
+ function get7702SmartAccount() {
111
+ throw new Error('EIP-7702 is not yet supported for Kernel accounts');
112
+ }
113
+ async function getPackedSignature(signFn, hash, validator, accountAddress, transformSignature = (signature) => signature) {
114
+ const vId = validator.isRoot ? '0x00' : (0, viem_1.concat)(['0x01', validator.address]);
115
+ const signature = validator.isRoot
116
+ ? await signFn(wrapMessageHash(hash, accountAddress))
117
+ : await signFn(hash);
118
+ const magicValueSigReplayable = (0, viem_1.keccak256)((0, viem_1.toHex)('kernel.replayable.signature'));
119
+ const packedSig = (0, viem_1.concat)([
120
+ vId,
121
+ magicValueSigReplayable,
122
+ transformSignature(signature),
123
+ ]);
124
+ return packedSig;
125
+ }
126
+ function wrapMessageHash(messageHash, accountAddress) {
127
+ const _domainSeparator = (0, viem_1.domainSeparator)({
128
+ domain: {
129
+ name: 'Kernel',
130
+ version: KERNEL_VERSION,
131
+ chainId: 0,
132
+ verifyingContract: accountAddress,
133
+ },
134
+ });
135
+ const kernelTypeHash = (0, viem_1.keccak256)((0, viem_1.stringToHex)('Kernel(bytes32 hash)'));
136
+ const wrappedMessageHash = (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([{ type: 'bytes32' }, { type: 'bytes32' }], [kernelTypeHash, messageHash]));
137
+ const digest = (0, viem_1.keccak256)((0, viem_1.concatHex)(['0x1901', _domainSeparator, wrappedMessageHash]));
138
+ return digest;
139
+ }
140
+ async function getSmartAccount(client, address, owners, validatorAddress, sign) {
141
+ return getBaseSmartAccount(address, client, validatorAddress, 'root', async () => {
142
+ return (0, validators_1.getMockSignature)(owners);
143
+ }, sign);
144
+ }
145
+ async function getSessionSmartAccount(client, address, session, validatorAddress, sign) {
146
+ return await getBaseSmartAccount(address, client, validatorAddress, 'validator', async () => {
147
+ const dummyOpSignature = (0, validators_1.getMockSignature)(session.owners);
148
+ return (0, validators_1.encodeSmartSessionSignature)(validators_1.SMART_SESSION_MODE_USE, (0, validators_1.getPermissionId)(session), dummyOpSignature);
149
+ }, async (hash) => {
150
+ const signature = await sign(hash);
151
+ return (0, validators_1.encodeSmartSessionSignature)(validators_1.SMART_SESSION_MODE_USE, (0, validators_1.getPermissionId)(session), signature);
152
+ });
153
+ }
154
+ async function getBaseSmartAccount(address, client, validatorAddress, validatorType, getStubSignature, signUserOperation) {
155
+ return await (0, account_abstraction_1.toSmartAccount)({
156
+ client,
157
+ entryPoint: {
158
+ abi: account_abstraction_1.entryPoint07Abi,
159
+ address: account_abstraction_1.entryPoint07Address,
160
+ version: '0.7',
161
+ },
162
+ async decodeCalls() {
163
+ throw new Error('Not implemented');
164
+ },
165
+ async encodeCalls(calls) {
166
+ return (0, utils_1.encode7579Calls)({
167
+ mode: {
168
+ type: calls.length > 1 ? 'batchcall' : 'call',
169
+ revertOnError: false,
170
+ selector: '0x',
171
+ context: '0x',
172
+ },
173
+ callData: calls,
174
+ });
175
+ },
176
+ async getAddress() {
177
+ return address;
178
+ },
179
+ async getFactoryArgs() {
180
+ return {};
181
+ },
182
+ async getNonce() {
183
+ // Default mode
184
+ const mode = '0x00';
185
+ const type = validatorType === 'root' ? '0x00' : '0x01';
186
+ const identifier = validatorAddress;
187
+ const nonceKey = '0x0000';
188
+ const key = (0, viem_1.concat)([mode, type, identifier, nonceKey]);
189
+ return (0, utils_1.getAccountNonce)(client, {
190
+ address,
191
+ entryPointAddress: account_abstraction_1.entryPoint07Address,
192
+ key: BigInt(key),
193
+ });
194
+ },
195
+ async getStubSignature() {
196
+ return getStubSignature();
197
+ },
198
+ async signMessage() {
199
+ throw new Error('Not implemented');
200
+ },
201
+ async signTypedData() {
202
+ throw new Error('Not implemented');
203
+ },
204
+ async signUserOperation(parameters) {
205
+ const { chainId = client.chain?.id, ...userOperation } = parameters;
206
+ if (!chainId)
207
+ throw new Error('Chain id not found');
208
+ const hash = (0, account_abstraction_1.getUserOperationHash)({
209
+ userOperation: {
210
+ ...userOperation,
211
+ sender: userOperation.sender ?? (await this.getAddress()),
212
+ signature: '0x',
213
+ },
214
+ entryPointAddress: account_abstraction_1.entryPoint07Address,
215
+ entryPointVersion: '0.7',
216
+ chainId: chainId,
217
+ });
218
+ return await signUserOperation(hash);
219
+ },
220
+ });
221
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=kernel.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.test.d.ts","sourceRoot":"","sources":["../../../accounts/kernel.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const viem_1 = require("viem");
4
+ const vitest_1 = require("vitest");
5
+ const consts_1 = require("../../test/consts");
6
+ const kernel_1 = require("./kernel");
7
+ (0, vitest_1.describe)('Accounts: Kernel', () => {
8
+ (0, vitest_1.describe)('Deploy Args', () => {
9
+ (0, vitest_1.test)('ECDSA owners', () => {
10
+ const { factory, factoryData, salt, implementation, initializationCallData, } = (0, kernel_1.getDeployArgs)({
11
+ owners: {
12
+ type: 'ecdsa',
13
+ accounts: [consts_1.accountA, consts_1.accountB],
14
+ },
15
+ rhinestoneApiKey: consts_1.MOCK_API_KEY,
16
+ });
17
+ (0, vitest_1.expect)(factory).toEqual('0xd703aae79538628d27099b8c4f621be4ccd142d5');
18
+ (0, vitest_1.expect)(factoryData).toEqual('0xc5265d5d0000000000000000000000002577507b78c2008ff367261cb6285d44ba5ef2e90000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c43c3b752b012483DA3A338895199E5e538530213157e931Bf060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006092086a3dc0020cd604a68fcf5d430007d51bb7000000000000000000000000f6c02c78ded62973b43bfa523b247da09948693600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000001249517e29f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000043ff16d5776c7f0f65ec485c17ca0400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001249517e29f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000e5a37279a001301a837a91b5de1d5e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001249517e29f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000f6ed8be424d673c63eeff8b926742000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001449517e29f00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000e5a37279a001301a837a91b5de1d5e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000b83a5be8cb00000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');
19
+ (0, vitest_1.expect)(salt).toEqual('0x0000000000000000000000000000000000000000000000000000000000000000');
20
+ (0, vitest_1.expect)(implementation).toEqual('0xd6CEDDe84be40893d153Be9d467CD6aD37875b28');
21
+ (0, vitest_1.expect)(initializationCallData).toEqual('0x3c3b752b012483DA3A338895199E5e538530213157e931Bf060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006092086a3dc0020cd604a68fcf5d430007d51bb7000000000000000000000000f6c02c78ded62973b43bfa523b247da09948693600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000001249517e29f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000043ff16d5776c7f0f65ec485c17ca0400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001249517e29f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000e5a37279a001301a837a91b5de1d5e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001249517e29f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000f6ed8be424d673c63eeff8b926742000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001449517e29f00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000e5a37279a001301a837a91b5de1d5e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000b83a5be8cb000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');
22
+ });
23
+ (0, vitest_1.test)('Passkey owner', () => {
24
+ const { factory, factoryData, salt, implementation, initializationCallData, } = (0, kernel_1.getDeployArgs)({
25
+ owners: {
26
+ type: 'passkey',
27
+ account: consts_1.passkeyAccount,
28
+ },
29
+ rhinestoneApiKey: consts_1.MOCK_API_KEY,
30
+ });
31
+ (0, vitest_1.expect)(factory).toEqual('0xd703aae79538628d27099b8c4f621be4ccd142d5');
32
+ (0, vitest_1.expect)(factoryData).toEqual('0xc5265d5d0000000000000000000000002577507b78c2008ff367261cb6285d44ba5ef2e90000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007843c3b752b012f167e55d42584f65e2e30a748f41ee75a3114140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000060580a9af0569ad3905b26a703201b358aa0904236642ebe79b22a19d00d3737637d46f725a5427ae45a9569259bf67e1e16b187d7b3ad1ed70138c4f0409677d19c9a01073b202db2ed56e604ad11db557d8c3ad75181619597f21b830f2da82a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000001249517e29f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000043ff16d5776c7f0f65ec485c17ca0400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001249517e29f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000e5a37279a001301a837a91b5de1d5e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001249517e29f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000f6ed8be424d673c63eeff8b926742000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001449517e29f00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000e5a37279a001301a837a91b5de1d5e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000b83a5be8cb00000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');
33
+ (0, vitest_1.expect)(salt).toEqual('0x0000000000000000000000000000000000000000000000000000000000000000');
34
+ (0, vitest_1.expect)(implementation).toEqual('0xd6CEDDe84be40893d153Be9d467CD6aD37875b28');
35
+ (0, vitest_1.expect)(initializationCallData).toEqual('0x3c3b752b012f167e55d42584f65e2e30a748f41ee75a3114140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000060580a9af0569ad3905b26a703201b358aa0904236642ebe79b22a19d00d3737637d46f725a5427ae45a9569259bf67e1e16b187d7b3ad1ed70138c4f0409677d19c9a01073b202db2ed56e604ad11db557d8c3ad75181619597f21b830f2da82a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000001249517e29f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000043ff16d5776c7f0f65ec485c17ca0400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001249517e29f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000e5a37279a001301a837a91b5de1d5e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001249517e29f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000f6ed8be424d673c63eeff8b926742000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001449517e29f00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000e5a37279a001301a837a91b5de1d5e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000b83a5be8cb000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');
36
+ });
37
+ });
38
+ (0, vitest_1.describe)('Get Address', () => {
39
+ (0, vitest_1.test)('ECDSA owners', () => {
40
+ const address = (0, kernel_1.getAddress)({
41
+ owners: {
42
+ type: 'ecdsa',
43
+ accounts: [consts_1.accountA, consts_1.accountB],
44
+ },
45
+ rhinestoneApiKey: consts_1.MOCK_API_KEY,
46
+ });
47
+ (0, vitest_1.expect)(address).toEqual('0x4136efCf5ec08dca0129341FbeEe55c21549c271');
48
+ });
49
+ (0, vitest_1.test)('Passkey owner', () => {
50
+ const address = (0, kernel_1.getAddress)({
51
+ owners: {
52
+ type: 'passkey',
53
+ account: consts_1.passkeyAccount,
54
+ },
55
+ rhinestoneApiKey: consts_1.MOCK_API_KEY,
56
+ });
57
+ (0, vitest_1.expect)(address).toEqual('0x2a39d4Ba4F2747041529024acF21aA0D43ABfc43');
58
+ });
59
+ });
60
+ (0, vitest_1.describe)('Get Packed Signature', () => {
61
+ (0, vitest_1.describe)('Mock signature', () => {
62
+ (0, vitest_1.test)('Root validator', async () => {
63
+ const hash = (0, viem_1.keccak256)('0xabcd');
64
+ const mockSignature = '0x1234';
65
+ const accountAddress = '0xa80ed905adbd7cba128aaf64a1fa33a530b9b0aa';
66
+ const validator = {
67
+ address: '0xe35b75e5ec3c04e9cefa8e581fbee859f56edeb4',
68
+ isRoot: true,
69
+ };
70
+ const signature = await (0, kernel_1.getPackedSignature)(async (_) => mockSignature, hash, validator, accountAddress);
71
+ (0, vitest_1.expect)(signature).toEqual('0x000555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a1234');
72
+ });
73
+ (0, vitest_1.test)('Non-root validator', async () => {
74
+ const hash = (0, viem_1.keccak256)('0xabcd');
75
+ const mockSignature = '0x1234';
76
+ const accountAddress = '0xa80ed905adbd7cba128aaf64a1fa33a530b9b0aa';
77
+ const validator = {
78
+ address: '0xe35b75e5ec3c04e9cefa8e581fbee859f56edeb4',
79
+ isRoot: false,
80
+ };
81
+ const signature = await (0, kernel_1.getPackedSignature)(async (_) => mockSignature, hash, validator, accountAddress);
82
+ (0, vitest_1.expect)(signature).toEqual('0x01e35b75e5ec3c04e9cefa8e581fbee859f56edeb40555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a1234');
83
+ });
84
+ });
85
+ });
86
+ });
@@ -1,14 +1,16 @@
1
1
  import type { Abi, Account, Address, Hex, PublicClient } from 'viem';
2
2
  import { type SmartAccount, type SmartAccountImplementation } from 'viem/account-abstraction';
3
3
  import type { OwnerSet, RhinestoneAccountConfig, Session } from '../types';
4
+ import { ValidatorConfig } from './utils';
4
5
  declare function getDeployArgs(config: RhinestoneAccountConfig): {
5
6
  factory: `0x${string}`;
6
7
  factoryData: `0x${string}`;
7
8
  salt: `0x${string}`;
8
- hashedInitcode: `0x${string}`;
9
9
  implementation: `0x${string}`;
10
10
  initializationCallData: `0x${string}`;
11
11
  };
12
+ declare function getAddress(config: RhinestoneAccountConfig): `0x${string}`;
13
+ declare function getPackedSignature(signFn: (message: Hex) => Promise<Hex>, hash: Hex, validator: ValidatorConfig, transformSignature?: (signature: Hex) => Hex): Promise<`0x${string}`>;
12
14
  declare function getSmartAccount(client: PublicClient, address: Address, owners: OwnerSet, validatorAddress: Address, sign: (hash: Hex) => Promise<Hex>): Promise<SmartAccount<SmartAccountImplementation<Abi, "0.7">>>;
13
15
  declare function getSessionSmartAccount(client: PublicClient, address: Address, session: Session, validatorAddress: Address, sign: (hash: Hex) => Promise<Hex>): Promise<SmartAccount<SmartAccountImplementation<Abi, "0.7">>>;
14
16
  declare function get7702SmartAccount(account: Account, client: PublicClient): Promise<SmartAccount<SmartAccountImplementation<Abi, "0.7">>>;
@@ -16,5 +18,5 @@ declare function get7702InitCalls(config: RhinestoneAccountConfig): {
16
18
  to: `0x${string}`;
17
19
  data: `0x${string}`;
18
20
  }[];
19
- export { getDeployArgs, getSmartAccount, getSessionSmartAccount, get7702SmartAccount, get7702InitCalls, };
21
+ export { getAddress, getPackedSignature, getDeployArgs, getSmartAccount, getSessionSmartAccount, get7702SmartAccount, get7702InitCalls, };
20
22
  //# sourceMappingURL=nexus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nexus.d.ts","sourceRoot":"","sources":["../../../accounts/nexus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAUpE,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAEhC,MAAM,0BAA0B,CAAA;AASjC,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAa1E,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;;EA8ErD;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,QAAQ,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAWlC;AAED,iBAAe,sBAAsB,CACnC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAuBlC;AAED,iBAAe,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,iEAkBxE;AAgFD,iBAAS,gBAAgB,CAAC,MAAM,EAAE,uBAAuB;;;IAqDxD;AAED,OAAO,EACL,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,GACjB,CAAA"}
1
+ {"version":3,"file":"nexus.d.ts","sourceRoot":"","sources":["../../../accounts/nexus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAYpE,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAEhC,MAAM,0BAA0B,CAAA;AASjC,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAE1E,OAAO,EAAoC,eAAe,EAAE,MAAM,SAAS,CAAA;AAc3E,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;EA6DrD;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,uBAAuB,iBA4BlD;AAED,iBAAe,kBAAkB,CAC/B,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACtC,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,eAAe,EAC1B,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,0BAQvE;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,QAAQ,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAWlC;AAED,iBAAe,sBAAsB,CACnC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAuBlC;AAED,iBAAe,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,iEAkBxE;AAgFD,iBAAS,gBAAgB,CAAC,MAAM,EAAE,uBAAuB;;;IAqDxD;AAED,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,GACjB,CAAA"}
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAddress = getAddress;
4
+ exports.getPackedSignature = getPackedSignature;
3
5
  exports.getDeployArgs = getDeployArgs;
4
6
  exports.getSmartAccount = getSmartAccount;
5
7
  exports.getSessionSmartAccount = getSessionSmartAccount;
@@ -14,6 +16,7 @@ const NEXUS_IMPLEMENTATION_ADDRESS = '0x000000004f43c49e93c970e84001853a70923b03
14
16
  const NEXUS_FACTORY_ADDRESS = '0x000000001D1D5004a02bAfAb9de2D6CE5b7B13de';
15
17
  const NEXUS_BOOTSTRAP_ADDRESS = '0x00000000D3254452a909E4eeD47455Af7E27C289';
16
18
  const K1_MEE_VALIDATOR_ADDRESS = '0x00000000d12897ddadc2044614a9677b191a2d95';
19
+ const NEXUS_CREATION_CODE = '0x60806040526102aa803803806100148161018c565b92833981016040828203126101885781516001600160a01b03811692909190838303610188576020810151906001600160401b03821161018857019281601f8501121561018857835161006e610069826101c5565b61018c565b9481865260208601936020838301011161018857815f926020809301865e8601015260017f90b772c2cb8a51aa7a8a65fc23543c6d022d5b3f8e2b92eed79fba7eef8293005d823b15610176577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561015e575f8091610146945190845af43d15610156573d91610137610069846101c5565b9283523d5f602085013e6101e0565b505b604051606b908161023f8239f35b6060916101e0565b50505034156101485763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101b157604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116101b157601f01601f191660200190565b9061020457508051156101f557805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610235575b610215575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561020d56fe60806040523615605c575f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156058573d5ff35b3d5ffd5b00fea164736f6c634300081b000a';
17
20
  function getDeployArgs(config) {
18
21
  const salt = (0, viem_1.keccak256)('0x');
19
22
  const moduleSetup = (0, modules_1.getSetup)(config);
@@ -58,12 +61,21 @@ function getDeployArgs(config) {
58
61
  functionName: 'createAccount',
59
62
  args: [initData, salt],
60
63
  });
61
- const creationCode = '0x60806040526102aa803803806100148161018c565b92833981016040828203126101885781516001600160a01b03811692909190838303610188576020810151906001600160401b03821161018857019281601f8501121561018857835161006e610069826101c5565b61018c565b9481865260208601936020838301011161018857815f926020809301865e8601015260017f90b772c2cb8a51aa7a8a65fc23543c6d022d5b3f8e2b92eed79fba7eef8293005d823b15610176577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561015e575f8091610146945190845af43d15610156573d91610137610069846101c5565b9283523d5f602085013e6101e0565b505b604051606b908161023f8239f35b6060916101e0565b50505034156101485763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101b157604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116101b157601f01601f191660200190565b9061020457508051156101f557805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610235575b610215575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561020d56fe60806040523615605c575f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156058573d5ff35b3d5ffd5b00fea164736f6c634300081b000a';
62
64
  const initializationCallData = (0, viem_1.encodeFunctionData)({
63
65
  abi: (0, viem_1.parseAbi)(['function initializeAccount(bytes)']),
64
66
  functionName: 'initializeAccount',
65
67
  args: [initData],
66
68
  });
69
+ return {
70
+ factory: NEXUS_FACTORY_ADDRESS,
71
+ factoryData,
72
+ salt,
73
+ implementation: NEXUS_IMPLEMENTATION_ADDRESS,
74
+ initializationCallData,
75
+ };
76
+ }
77
+ function getAddress(config) {
78
+ const { factory, salt, initializationCallData } = getDeployArgs(config);
67
79
  const accountInitData = (0, viem_1.encodeAbiParameters)([
68
80
  {
69
81
  name: 'address',
@@ -74,15 +86,15 @@ function getDeployArgs(config) {
74
86
  type: 'bytes',
75
87
  },
76
88
  ], [NEXUS_IMPLEMENTATION_ADDRESS, initializationCallData]);
77
- const hashedInitcode = (0, viem_1.keccak256)((0, viem_1.concat)([creationCode, accountInitData]));
78
- return {
79
- factory: NEXUS_FACTORY_ADDRESS,
80
- factoryData,
81
- salt,
82
- hashedInitcode,
83
- implementation: NEXUS_IMPLEMENTATION_ADDRESS,
84
- initializationCallData,
85
- };
89
+ const hashedInitcode = (0, viem_1.keccak256)((0, viem_1.concat)([NEXUS_CREATION_CODE, accountInitData]));
90
+ const hash = (0, viem_1.keccak256)((0, viem_1.encodePacked)(['bytes1', 'address', 'bytes32', 'bytes'], ['0xff', factory, salt, hashedInitcode]));
91
+ const address = (0, viem_1.slice)(hash, 12, 32);
92
+ return address;
93
+ }
94
+ async function getPackedSignature(signFn, hash, validator, transformSignature = (signature) => signature) {
95
+ const signature = await signFn(hash);
96
+ const packedSig = (0, viem_1.encodePacked)(['address', 'bytes'], [validator.address, transformSignature(signature)]);
97
+ return packedSig;
86
98
  }
87
99
  async function getSmartAccount(client, address, owners, validatorAddress, sign) {
88
100
  return getBaseSmartAccount(address, client, validatorAddress, async () => {