@zerodev/sdk 4.0.2-passkey.1 → 4.0.3

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 (53) hide show
  1. package/dist/cjs/kernel-zerodev/account.d.ts +0 -1
  2. package/dist/cjs/kernel-zerodev/account.js +0 -30
  3. package/dist/cjs/kernel-zerodev/account.js.map +1 -1
  4. package/dist/cjs/kernel-zerodev/constants.d.ts +6 -2
  5. package/dist/cjs/kernel-zerodev/constants.js +24 -3
  6. package/dist/cjs/kernel-zerodev/constants.js.map +1 -1
  7. package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js +1 -1
  8. package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js.map +1 -1
  9. package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js +6 -1
  10. package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -1
  11. package/dist/cjs/kernel-zerodev/owner/passkey/utils.js +1 -1
  12. package/dist/cjs/kernel-zerodev/owner/passkey/utils.js.map +1 -1
  13. package/dist/cjs/kernel-zerodev/utils.d.ts +1 -0
  14. package/dist/cjs/kernel-zerodev/utils.js +19 -1
  15. package/dist/cjs/kernel-zerodev/utils.js.map +1 -1
  16. package/dist/cjs/kernel-zerodev/validator/base.d.ts +1 -1
  17. package/dist/cjs/kernel-zerodev/validator/base.js +1 -10
  18. package/dist/cjs/kernel-zerodev/validator/base.js.map +1 -1
  19. package/dist/esm/kernel-zerodev/account.d.ts +0 -1
  20. package/dist/esm/kernel-zerodev/account.js +1 -31
  21. package/dist/esm/kernel-zerodev/account.js.map +1 -1
  22. package/dist/esm/kernel-zerodev/constants.d.ts +6 -2
  23. package/dist/esm/kernel-zerodev/constants.js +23 -2
  24. package/dist/esm/kernel-zerodev/constants.js.map +1 -1
  25. package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js +1 -1
  26. package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js.map +1 -1
  27. package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js +6 -2
  28. package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -1
  29. package/dist/esm/kernel-zerodev/owner/passkey/utils.js +1 -1
  30. package/dist/esm/kernel-zerodev/owner/passkey/utils.js.map +1 -1
  31. package/dist/esm/kernel-zerodev/utils.d.ts +1 -0
  32. package/dist/esm/kernel-zerodev/utils.js +18 -1
  33. package/dist/esm/kernel-zerodev/utils.js.map +1 -1
  34. package/dist/esm/kernel-zerodev/validator/base.d.ts +1 -1
  35. package/dist/esm/kernel-zerodev/validator/base.js +2 -11
  36. package/dist/esm/kernel-zerodev/validator/base.js.map +1 -1
  37. package/dist/types/kernel-zerodev/account.d.ts +0 -1
  38. package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
  39. package/dist/types/kernel-zerodev/constants.d.ts +6 -2
  40. package/dist/types/kernel-zerodev/constants.d.ts.map +1 -1
  41. package/dist/types/kernel-zerodev/owner/getRPCProviderOwner.d.ts.map +1 -1
  42. package/dist/types/kernel-zerodev/utils.d.ts +1 -0
  43. package/dist/types/kernel-zerodev/utils.d.ts.map +1 -1
  44. package/dist/types/kernel-zerodev/validator/base.d.ts +1 -1
  45. package/dist/types/kernel-zerodev/validator/base.d.ts.map +1 -1
  46. package/package.json +4 -4
  47. package/src/kernel-zerodev/account.ts +0 -33
  48. package/src/kernel-zerodev/constants.ts +26 -2
  49. package/src/kernel-zerodev/owner/getCustodialOwner.ts +1 -1
  50. package/src/kernel-zerodev/owner/getRPCProviderOwner.ts +6 -8
  51. package/src/kernel-zerodev/owner/passkey/utils.ts +1 -1
  52. package/src/kernel-zerodev/utils.ts +17 -0
  53. package/src/kernel-zerodev/validator/base.ts +3 -12
@@ -10,8 +10,6 @@ import {
10
10
  type Transport,
11
11
  pad,
12
12
  toHex,
13
- getContract,
14
- type PublicClient,
15
13
  } from "viem";
16
14
  import { parseAbiParameters } from "abitype";
17
15
  import { KernelBaseValidator, ValidatorMode } from "./validator/base.js";
@@ -104,37 +102,6 @@ export class KernelSmartContractAccount<
104
102
  return instance;
105
103
  }
106
104
 
107
- async getAddress(): Promise<Address> {
108
- if (!this.validator) {
109
- throw new Error("Validator not connected");
110
- }
111
- if (!this.accountAddress) {
112
- try {
113
- const initializeData = encodeFunctionData({
114
- abi: KernelAccountAbi,
115
- functionName: "initialize",
116
- args: [
117
- this.validator.getAddress(),
118
- await this.validator.getEnableData(),
119
- ],
120
- });
121
- const kernelFactory = getContract({
122
- abi: KernelFactoryAbi,
123
- address: KERNEL_FACTORY_ADDRESS,
124
- publicClient: this.rpcProvider as PublicClient,
125
- });
126
- return await kernelFactory.read.getAccountAddress([
127
- initializeData,
128
- this.index,
129
- ]);
130
- } catch (error) {
131
- throw new Error(`getCounterFactualAddress failed: ${error}`);
132
- }
133
- }
134
-
135
- return this.accountAddress;
136
- }
137
-
138
105
  connectValidator(validator: KernelBaseValidator): this {
139
106
  defineReadOnly(this, "validator", validator);
140
107
  return this;
@@ -14,8 +14,8 @@ export const API_URL = "https://prod-api.zerodev.app";
14
14
  export const ECDSA_VALIDATOR_ADDRESS =
15
15
  "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390";
16
16
  export const KERNEL_FACTORY_ADDRESS =
17
- "0x85DF6Dc686FBDcAc7da61651D116fc71B2246B50";
18
- export const KERNEL_IMPL_ADDRESS = "0xD2063bE7C610eb55492C05385743edDbf5b6B951";
17
+ "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3";
18
+ export const KERNEL_IMPL_ADDRESS = "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb";
19
19
  export const KILL_SWITCH_VALIDATOR_ADDRESS =
20
20
  "0x2db0DbfDf90Dbe2859158Aa71db1FcDCb3E579c8";
21
21
  export const KILL_SWITCH_ACTION = "0xf5aa34DD2cba311947e143183ED325A4A8C674Af";
@@ -69,3 +69,27 @@ export const ERC20_APPROVAL_AMOUNT: { [key: string]: bigint } = {
69
69
  export const minPriorityFeePerBidDefaults = new Map<number, bigint>([
70
70
  [polygon.id, 30_000_000_000n],
71
71
  ]);
72
+
73
+ export const INFURA_API_KEY = "f36f7f706a58477884ce6fe89165666c";
74
+ export const CHAIN_ID_TO_NODE: { [key: number]: string } = {
75
+ 1: `https://mainnet.infura.io/v3/${INFURA_API_KEY}`,
76
+ 5: `https://goerli.infura.io/v3/${INFURA_API_KEY}`,
77
+ 137: `https://polygon-mainnet.infura.io/v3/${INFURA_API_KEY}`,
78
+ 80001: `https://polygon-mumbai.infura.io/v3/${INFURA_API_KEY}`,
79
+ 10: `https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}`,
80
+ 420: `https://optimism-goerli.infura.io/v3/${INFURA_API_KEY}`,
81
+ 42161: `https://arbitrum-mainnet.infura.io/v3/${INFURA_API_KEY}`,
82
+ // 42161: 'https://evocative-stylish-dinghy.arbitrum-mainnet.discover.quiknode.pro/80b526d14fa9fd9a8b0db1e65554acaf00c6a1ab/',
83
+ 421613: `https://arbitrum-goerli.infura.io/v3/${INFURA_API_KEY}`,
84
+ 43114: `https://avalanche-mainnet.infura.io/v3/${INFURA_API_KEY}`,
85
+ 43113: `https://avalanche-fuji.infura.io/v3/${INFURA_API_KEY}`,
86
+ 1313161554: `https://aurora-mainnet.infura.io/v3/${INFURA_API_KEY}`,
87
+ 1313161555: `https://aurora-testnet.infura.io/v3/${INFURA_API_KEY}`,
88
+ 56: "https://wandering-quaint-reel.bsc.quiknode.pro/508c3d245c14adb8689ed4073d29aa5795dfa24e/",
89
+ 97: "https://sly-indulgent-paper.bsc-testnet.quiknode.pro/ab7e00c229f5967334160958e40fd6a4d893fb93/",
90
+ 8453: "https://twilight-red-tree.base-mainnet.quiknode.pro/dc6eb27bf0f917df215922488dd97f4de7d9b08e/",
91
+ 84531:
92
+ "https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596/",
93
+ 100: "https://thrilling-fluent-film.xdai.quiknode.pro/305955cffb9868cdd95b5e3dc9775f20678ad9ac/",
94
+ 10200: "https://nd-810-853-201.p2pify.com/e828b09f0d43591de96c297b3f36fffd",
95
+ };
@@ -56,7 +56,7 @@ export async function getCustodialOwner(
56
56
  const turnkeySigner = new TurnkeySigner({
57
57
  apiPublicKey: publicKey,
58
58
  apiPrivateKey: privateKey,
59
- baseUrl: "https://coordinator-beta.turnkey.io",
59
+ baseUrl: "https://api.turnkey.com",
60
60
  organizationId: keyId,
61
61
  privateKeyId: response.data.walletId,
62
62
  });
@@ -1,7 +1,7 @@
1
1
  import type { SignTypedDataParams, SmartAccountSigner } from "@alchemy/aa-core";
2
2
  import { Web3Provider, type ExternalProvider } from "@ethersproject/providers";
3
- import { type TypedDataField } from "@ethersproject/abstract-signer";
4
- import type { Hex } from "viem";
3
+ import { hashTypedData, type Hex } from "viem";
4
+ import { fixSignedData } from "../utils.js";
5
5
 
6
6
  export function getRPCProviderOwner(web3Provider: any): SmartAccountSigner {
7
7
  const provider = new Web3Provider(web3Provider as ExternalProvider);
@@ -12,11 +12,9 @@ export function getRPCProviderOwner(web3Provider: any): SmartAccountSigner {
12
12
  Promise.resolve((await signer.getAddress()) as `0x${string}`),
13
13
  signMessage: async (msg: Uint8Array | string) =>
14
14
  (await signer.signMessage(msg)) as `0x${string}`,
15
- signTypedData: async (params: SignTypedDataParams) =>
16
- (await signer._signTypedData(
17
- params.domain!,
18
- params.types as unknown as Record<string, TypedDataField[]>,
19
- params.message
20
- )) as Hex,
15
+ signTypedData: async (params: SignTypedDataParams) => {
16
+ const hash = hashTypedData(params);
17
+ return fixSignedData((await signer.signMessage(hash)) as Hex);
18
+ },
21
19
  };
22
20
  }
@@ -7,7 +7,7 @@ import type { SignTypedDataParams } from "@alchemy/aa-core";
7
7
  import { hashTypedData } from "viem";
8
8
 
9
9
  browserInit({
10
- baseUrl: "https://coordinator-beta.turnkey.io",
10
+ baseUrl: "https://api.turnkey.com",
11
11
  });
12
12
 
13
13
  export const publicKey = "public-key";
@@ -5,6 +5,7 @@ import {
5
5
  type Hex,
6
6
  type WalletClient,
7
7
  toHex,
8
+ isHex,
8
9
  } from "viem";
9
10
  import type {
10
11
  SignTypedDataParams,
@@ -13,6 +14,7 @@ import type {
13
14
  } from "@alchemy/aa-core";
14
15
  import { Signer, type TypedDataField } from "@ethersproject/abstract-signer";
15
16
  import { Wallet } from "@ethersproject/wallet";
17
+ import { splitSignature, joinSignature } from "@ethersproject/bytes";
16
18
  import type { SupportedGasToken } from "./paymaster/types.js";
17
19
  import { gasTokenChainAddresses } from "./constants.js";
18
20
 
@@ -104,3 +106,18 @@ export const randomHexString = (length: number): Hex =>
104
106
  Math.floor(Math.random() * 16).toString(16)
105
107
  ).join("")
106
108
  );
109
+
110
+ export const fixSignedData = (sig: Hex): Hex => {
111
+ let signature = sig;
112
+ if (!isHex(signature)) {
113
+ signature = `0x${signature}`;
114
+ if (!isHex(signature)) {
115
+ throw new Error("Invalid signed data " + sig);
116
+ }
117
+ }
118
+ let { r, s, v } = splitSignature(signature);
119
+ if (v === 0) v = 27;
120
+ if (v === 1) v = 28;
121
+ const joined = joinSignature({ r, s, v });
122
+ return joined as Hex;
123
+ };
@@ -19,6 +19,7 @@ import {
19
19
  import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
20
20
  import {
21
21
  BUNDLER_URL,
22
+ CHAIN_ID_TO_NODE,
22
23
  ECDSA_VALIDATOR_ADDRESS,
23
24
  ENTRYPOINT_ADDRESS,
24
25
  } from "../constants.js";
@@ -61,7 +62,7 @@ export abstract class KernelBaseValidator {
61
62
  protected selector?: string;
62
63
  protected rpcUrl?: string;
63
64
  protected bundlerProvider?: PaymasterAndBundlerProviders;
64
- protected publicClient?: PublicClient<Transport, Chain>;
65
+ publicClient?: PublicClient<Transport, Chain>;
65
66
 
66
67
  constructor(params: KernelBaseValidatorParams) {
67
68
  this.projectId = params.projectId;
@@ -77,17 +78,7 @@ export abstract class KernelBaseValidator {
77
78
  this.rpcUrl = params.rpcUrl ?? BUNDLER_URL;
78
79
  this.bundlerProvider = params.bundlerProvider;
79
80
  this.publicClient = createPublicClient({
80
- transport: http(this.rpcUrl, {
81
- fetchOptions: {
82
- headers:
83
- this.rpcUrl === BUNDLER_URL
84
- ? {
85
- projectId: this.projectId,
86
- bundlerProvider: this.bundlerProvider,
87
- }
88
- : {},
89
- },
90
- }),
81
+ transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),
91
82
  chain: this.chain ?? polygonMumbai,
92
83
  });
93
84
  }