@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.
- package/dist/cjs/kernel-zerodev/account.d.ts +0 -1
- package/dist/cjs/kernel-zerodev/account.js +0 -30
- package/dist/cjs/kernel-zerodev/account.js.map +1 -1
- package/dist/cjs/kernel-zerodev/constants.d.ts +6 -2
- package/dist/cjs/kernel-zerodev/constants.js +24 -3
- package/dist/cjs/kernel-zerodev/constants.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js +1 -1
- package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js +6 -1
- package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js.map +1 -1
- package/dist/cjs/kernel-zerodev/utils.d.ts +1 -0
- package/dist/cjs/kernel-zerodev/utils.js +19 -1
- package/dist/cjs/kernel-zerodev/utils.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/base.d.ts +1 -1
- package/dist/cjs/kernel-zerodev/validator/base.js +1 -10
- package/dist/cjs/kernel-zerodev/validator/base.js.map +1 -1
- package/dist/esm/kernel-zerodev/account.d.ts +0 -1
- package/dist/esm/kernel-zerodev/account.js +1 -31
- package/dist/esm/kernel-zerodev/account.js.map +1 -1
- package/dist/esm/kernel-zerodev/constants.d.ts +6 -2
- package/dist/esm/kernel-zerodev/constants.js +23 -2
- package/dist/esm/kernel-zerodev/constants.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js +1 -1
- package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js +6 -2
- package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js.map +1 -1
- package/dist/esm/kernel-zerodev/utils.d.ts +1 -0
- package/dist/esm/kernel-zerodev/utils.js +18 -1
- package/dist/esm/kernel-zerodev/utils.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/base.d.ts +1 -1
- package/dist/esm/kernel-zerodev/validator/base.js +2 -11
- package/dist/esm/kernel-zerodev/validator/base.js.map +1 -1
- package/dist/types/kernel-zerodev/account.d.ts +0 -1
- package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/constants.d.ts +6 -2
- package/dist/types/kernel-zerodev/constants.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/getRPCProviderOwner.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/utils.d.ts +1 -0
- package/dist/types/kernel-zerodev/utils.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/base.d.ts +1 -1
- package/dist/types/kernel-zerodev/validator/base.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/kernel-zerodev/account.ts +0 -33
- package/src/kernel-zerodev/constants.ts +26 -2
- package/src/kernel-zerodev/owner/getCustodialOwner.ts +1 -1
- package/src/kernel-zerodev/owner/getRPCProviderOwner.ts +6 -8
- package/src/kernel-zerodev/owner/passkey/utils.ts +1 -1
- package/src/kernel-zerodev/utils.ts +17 -0
- 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
|
-
"
|
|
18
|
-
export const KERNEL_IMPL_ADDRESS = "
|
|
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://
|
|
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
|
|
4
|
-
import
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
}
|
|
@@ -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
|
-
|
|
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.
|
|
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
|
}
|