@zerodev/sdk 4.0.2-passkey.0 → 4.0.2

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 +4 -1
  10. package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -1
  11. package/dist/cjs/kernel-zerodev/owner/passkey/utils.js +2 -2
  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 +4 -1
  28. package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -1
  29. package/dist/esm/kernel-zerodev/owner/passkey/utils.js +2 -2
  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 +5 -5
  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 +10 -6
  51. package/src/kernel-zerodev/owner/passkey/utils.ts +2 -2
  52. package/src/kernel-zerodev/utils.ts +17 -0
  53. package/src/kernel-zerodev/validator/base.ts +3 -12
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerodev/sdk",
3
- "version": "4.0.2-passkey.0",
3
+ "version": "4.0.2",
4
4
  "description": "A collection of ERC-4337 compliant smart contract account interfaces",
5
5
  "author": "ZeroDev",
6
6
  "license": "MIT",
@@ -47,7 +47,7 @@
47
47
  "devDependencies": {
48
48
  "@alchemy/aa-core": "^0.1.0-alpha.23",
49
49
  "@alchemy/aa-ethers": "^0.1.0-alpha.23",
50
- "@turnkey/ethers": "^0.16.2",
50
+ "@turnkey/ethers": "^0.16.5",
51
51
  "typescript": "^5.0.4",
52
52
  "typescript-template": "*",
53
53
  "vitest": "^0.31.0"
@@ -62,12 +62,12 @@
62
62
  },
63
63
  "repository": {
64
64
  "type": "git",
65
- "url": "git+https://github.com/zerodevapp/aa-sdk.git"
65
+ "url": "git+https://github.com/zerodevapp/sdk.git"
66
66
  },
67
67
  "bugs": {
68
- "url": "https://github.com/zerodevapp/aa-sdk/issues"
68
+ "url": "https://github.com/zerodevapp/sdk/issues"
69
69
  },
70
- "homepage": "https://github.com/zerodevapp/aa-sdk/blob/zd-provider/packages/accounts/src/kernel-zerodev/README.md#readme",
70
+ "homepage": "https://github.com/zerodevapp/sdk/blob/main/README.md#readme",
71
71
  "gitHead": "19ba05a77e4f7a0e04f44f34eaecf675fe2c12f2",
72
72
  "dependencies": {
73
73
  "axios": "^1.4.0",
@@ -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
  });
@@ -2,6 +2,7 @@ import type { SignTypedDataParams, SmartAccountSigner } from "@alchemy/aa-core";
2
2
  import { Web3Provider, type ExternalProvider } from "@ethersproject/providers";
3
3
  import { type TypedDataField } from "@ethersproject/abstract-signer";
4
4
  import type { Hex } from "viem";
5
+ import { fixSignedData } from "../utils.js";
5
6
 
6
7
  export function getRPCProviderOwner(web3Provider: any): SmartAccountSigner {
7
8
  const provider = new Web3Provider(web3Provider as ExternalProvider);
@@ -12,11 +13,14 @@ export function getRPCProviderOwner(web3Provider: any): SmartAccountSigner {
12
13
  Promise.resolve((await signer.getAddress()) as `0x${string}`),
13
14
  signMessage: async (msg: Uint8Array | string) =>
14
15
  (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,
16
+ signTypedData: async (params: SignTypedDataParams) => {
17
+ return fixSignedData(
18
+ (await signer._signTypedData(
19
+ params.domain!,
20
+ params.types as unknown as Record<string, TypedDataField[]>,
21
+ params.message
22
+ )) as Hex
23
+ );
24
+ },
21
25
  };
22
26
  }
@@ -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";
@@ -55,7 +55,7 @@ export const signMessage = async (
55
55
  credentialId: string,
56
56
  apiUrl = API_URL
57
57
  ) => {
58
- const signedRequest = await TurnkeyApi.federatedPostSignRawPayload(
58
+ const signedRequest = await TurnkeyApi.signSignRawPayload(
59
59
  {
60
60
  body: {
61
61
  type: "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD",
@@ -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
  }