@zerodev/sdk 4.0.8 → 4.0.10
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/README.md +125 -3
- package/dist/cjs/index.d.ts +3 -4
- package/dist/cjs/index.js +6 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +2 -2
- package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.js +2 -2
- package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -1
- package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.d.ts +3 -3
- package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.js +3 -3
- package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -1
- package/dist/cjs/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts +158 -0
- package/dist/cjs/kernel-zerodev/abis/SessionKeyValidatorAbi.js +210 -0
- package/dist/cjs/kernel-zerodev/abis/SessionKeyValidatorAbi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.d.ts +237 -39
- package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -1
- package/dist/cjs/kernel-zerodev/account.d.ts +13 -4
- package/dist/cjs/kernel-zerodev/account.js +50 -38
- package/dist/cjs/kernel-zerodev/account.js.map +1 -1
- package/dist/cjs/kernel-zerodev/constants.d.ts +2 -0
- package/dist/cjs/kernel-zerodev/constants.js +3 -1
- package/dist/cjs/kernel-zerodev/constants.js.map +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.d.ts +4 -3
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js +12 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.js +2 -2
- package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js +0 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.d.ts +0 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js +1 -10
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js.map +1 -1
- package/dist/cjs/kernel-zerodev/provider.js +1 -0
- package/dist/cjs/kernel-zerodev/provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/signer/empty-account.d.ts +10 -0
- package/dist/cjs/kernel-zerodev/signer/empty-account.js +43 -0
- package/dist/cjs/kernel-zerodev/signer/empty-account.js.map +1 -0
- package/dist/cjs/kernel-zerodev/utils.d.ts +2 -0
- package/dist/cjs/kernel-zerodev/utils.js +11 -1
- package/dist/cjs/kernel-zerodev/utils.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/base.d.ts +6 -3
- package/dist/cjs/kernel-zerodev/validator/base.js +20 -3
- package/dist/cjs/kernel-zerodev/validator/base.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.d.ts +1 -0
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js +11 -0
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/index.d.ts +2 -1
- package/dist/cjs/kernel-zerodev/validator/index.js +4 -1
- package/dist/cjs/kernel-zerodev/validator/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js +1 -0
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.d.ts +65 -0
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.js +345 -0
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator/types.d.ts +5 -1
- package/dist/cjs/kernel-zerodev/validator/types.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/base.d.ts +5 -4
- package/dist/cjs/kernel-zerodev/validator-provider/base.js +17 -2
- package/dist/cjs/kernel-zerodev/validator-provider/base.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +2 -2
- package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +2 -2
- package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/index.d.ts +2 -1
- package/dist/cjs/kernel-zerodev/validator-provider/index.js +4 -1
- package/dist/cjs/kernel-zerodev/validator-provider/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +2 -2
- package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.d.ts +18 -0
- package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.js +114 -0
- package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator-provider/types.d.ts +5 -0
- package/dist/cjs/kernel-zerodev/validator-provider/types.js.map +1 -1
- package/dist/esm/index.d.ts +3 -4
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +2 -2
- package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js +2 -2
- package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -1
- package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.d.ts +3 -3
- package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js +3 -3
- package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -1
- package/dist/esm/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts +158 -0
- package/dist/esm/kernel-zerodev/abis/SessionKeyValidatorAbi.js +207 -0
- package/dist/esm/kernel-zerodev/abis/SessionKeyValidatorAbi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.d.ts +237 -39
- package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -1
- package/dist/esm/kernel-zerodev/account.d.ts +13 -4
- package/dist/esm/kernel-zerodev/account.js +51 -38
- package/dist/esm/kernel-zerodev/account.js.map +1 -1
- package/dist/esm/kernel-zerodev/constants.d.ts +2 -0
- package/dist/esm/kernel-zerodev/constants.js +2 -0
- package/dist/esm/kernel-zerodev/constants.js.map +1 -1
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -1
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js +2 -2
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.d.ts +4 -3
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js +13 -2
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.js +3 -3
- package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js +1 -2
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/utils.d.ts +0 -1
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js +0 -8
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js.map +1 -1
- package/dist/esm/kernel-zerodev/provider.js +1 -0
- package/dist/esm/kernel-zerodev/provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/signer/empty-account.d.ts +10 -0
- package/dist/esm/kernel-zerodev/signer/empty-account.js +40 -0
- package/dist/esm/kernel-zerodev/signer/empty-account.js.map +1 -0
- package/dist/esm/kernel-zerodev/utils.d.ts +2 -0
- package/dist/esm/kernel-zerodev/utils.js +8 -0
- package/dist/esm/kernel-zerodev/utils.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/base.d.ts +6 -3
- package/dist/esm/kernel-zerodev/validator/base.js +20 -3
- package/dist/esm/kernel-zerodev/validator/base.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.d.ts +1 -0
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js +13 -2
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/index.d.ts +2 -1
- package/dist/esm/kernel-zerodev/validator/index.js +3 -1
- package/dist/esm/kernel-zerodev/validator/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js +2 -1
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/session-key-validator.d.ts +65 -0
- package/dist/esm/kernel-zerodev/validator/session-key-validator.js +341 -0
- package/dist/esm/kernel-zerodev/validator/session-key-validator.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator/types.d.ts +5 -1
- package/dist/esm/kernel-zerodev/validator/types.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/base.d.ts +5 -4
- package/dist/esm/kernel-zerodev/validator-provider/base.js +17 -2
- package/dist/esm/kernel-zerodev/validator-provider/base.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +2 -2
- package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +2 -2
- package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/index.d.ts +2 -1
- package/dist/esm/kernel-zerodev/validator-provider/index.js +3 -1
- package/dist/esm/kernel-zerodev/validator-provider/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +2 -2
- package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.d.ts +18 -0
- package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.js +110 -0
- package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator-provider/types.d.ts +5 -0
- package/dist/esm/kernel-zerodev/validator-provider/types.js.map +1 -1
- package/dist/types/index.d.ts +3 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +2 -2
- package/dist/types/kernel-zerodev/abis/KernelAccountAbi.d.ts +3 -3
- package/dist/types/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts +159 -0
- package/dist/types/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts +237 -39
- package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/account.d.ts +13 -4
- package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/constants.d.ts +2 -0
- package/dist/types/kernel-zerodev/constants.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -1
- package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts +4 -3
- package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/utils.d.ts +0 -1
- package/dist/types/kernel-zerodev/owner/passkey/utils.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/signer/empty-account.d.ts +11 -0
- package/dist/types/kernel-zerodev/signer/empty-account.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/utils.d.ts +2 -0
- package/dist/types/kernel-zerodev/utils.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/base.d.ts +6 -3
- package/dist/types/kernel-zerodev/validator/base.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts +1 -0
- package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/index.d.ts +2 -1
- package/dist/types/kernel-zerodev/validator/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts +66 -0
- package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator/types.d.ts +5 -1
- package/dist/types/kernel-zerodev/validator/types.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/base.d.ts +5 -4
- package/dist/types/kernel-zerodev/validator-provider/base.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +2 -2
- package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +2 -2
- package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/index.d.ts +2 -1
- package/dist/types/kernel-zerodev/validator-provider/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +2 -2
- package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/session-key-provider.d.ts +19 -0
- package/dist/types/kernel-zerodev/validator-provider/session-key-provider.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator-provider/types.d.ts +5 -0
- package/dist/types/kernel-zerodev/validator-provider/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +3 -4
- package/src/kernel-zerodev/abis/ESCDAValidatorAbi.ts +2 -2
- package/src/kernel-zerodev/abis/KernelAccountAbi.ts +3 -3
- package/src/kernel-zerodev/abis/SessionKeyValidatorAbi.ts +206 -0
- package/src/kernel-zerodev/abis/Test_ERC20Abi.ts +1 -1
- package/src/kernel-zerodev/account.ts +58 -50
- package/src/kernel-zerodev/constants.ts +3 -0
- package/src/kernel-zerodev/ethers-provider/account-signer.ts +3 -3
- package/src/kernel-zerodev/ethers-provider/ethers-provider.ts +25 -7
- package/src/kernel-zerodev/owner/passkey/createPasskeyOwner.ts +3 -3
- package/src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts +1 -2
- package/src/kernel-zerodev/owner/passkey/utils.ts +0 -9
- package/src/kernel-zerodev/provider.ts +4 -2
- package/src/kernel-zerodev/signer/empty-account.ts +27 -0
- package/src/kernel-zerodev/utils.ts +10 -0
- package/src/kernel-zerodev/validator/base.ts +32 -6
- package/src/kernel-zerodev/validator/erc165-session-key-validator.ts +20 -1
- package/src/kernel-zerodev/validator/index.ts +8 -1
- package/src/kernel-zerodev/validator/kill-switch-validator.ts +6 -1
- package/src/kernel-zerodev/validator/session-key-validator.ts +483 -0
- package/src/kernel-zerodev/validator/types.ts +14 -1
- package/src/kernel-zerodev/validator-provider/base.ts +24 -13
- package/src/kernel-zerodev/validator-provider/ecdsa-provider.ts +4 -1
- package/src/kernel-zerodev/validator-provider/erc165-session-key-provider.ts +4 -1
- package/src/kernel-zerodev/validator-provider/index.ts +8 -1
- package/src/kernel-zerodev/validator-provider/kill-switch-provider.ts +4 -1
- package/src/kernel-zerodev/validator-provider/session-key-provider.ts +151 -0
- package/src/kernel-zerodev/validator-provider/types.ts +10 -0
|
@@ -8,17 +8,14 @@ import {
|
|
|
8
8
|
type Hex,
|
|
9
9
|
toBytes,
|
|
10
10
|
type Transport,
|
|
11
|
-
pad,
|
|
12
|
-
toHex,
|
|
13
11
|
} from "viem";
|
|
14
12
|
import { parseAbiParameters } from "abitype";
|
|
15
|
-
import { KernelBaseValidator
|
|
13
|
+
import { KernelBaseValidator } from "./validator/base.js";
|
|
16
14
|
import { KernelAccountAbi } from "./abis/KernelAccountAbi.js";
|
|
17
15
|
import { KernelFactoryAbi } from "./abis/KernelFactoryAbi.js";
|
|
18
16
|
import {
|
|
19
17
|
type BaseSmartAccountParams,
|
|
20
18
|
BaseSmartContractAccount,
|
|
21
|
-
type SmartAccountSigner,
|
|
22
19
|
type BatchUserOperationCallData,
|
|
23
20
|
type UserOperationRequest,
|
|
24
21
|
defineReadOnly,
|
|
@@ -38,17 +35,22 @@ import { polygonMumbai } from "viem/chains";
|
|
|
38
35
|
import { getChainId } from "./api/index.js";
|
|
39
36
|
import { createZeroDevPublicErc4337Client } from "./client/create-client.js";
|
|
40
37
|
import type { PaymasterAndBundlerProviders } from "./paymaster/types.js";
|
|
41
|
-
import type { KillSwitchValidator } from "./validator/kill-switch-validator.js";
|
|
42
38
|
|
|
39
|
+
export enum DeploymentState {
|
|
40
|
+
UNDEFINED = "0x0",
|
|
41
|
+
NOT_DEPLOYED = "0x1",
|
|
42
|
+
DEPLOYED = "0x2",
|
|
43
|
+
}
|
|
43
44
|
export interface KernelSmartAccountParams<
|
|
44
45
|
TTransport extends Transport | FallbackTransport = Transport
|
|
45
46
|
> extends Partial<BaseSmartAccountParams<TTransport>> {
|
|
46
47
|
projectId: string;
|
|
47
|
-
owner: SmartAccountSigner;
|
|
48
48
|
factoryAddress?: Address;
|
|
49
49
|
index?: bigint;
|
|
50
50
|
validator?: KernelBaseValidator;
|
|
51
51
|
bundlerProvider?: PaymasterAndBundlerProviders;
|
|
52
|
+
defaultValidator?: KernelBaseValidator;
|
|
53
|
+
initCode?: Hex;
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
export function isKernelAccount(
|
|
@@ -60,10 +62,11 @@ export function isKernelAccount(
|
|
|
60
62
|
export class KernelSmartContractAccount<
|
|
61
63
|
TTransport extends Transport | FallbackTransport = Transport
|
|
62
64
|
> extends BaseSmartContractAccount<TTransport> {
|
|
63
|
-
private owner: SmartAccountSigner;
|
|
64
65
|
private readonly factoryAddress: Address;
|
|
65
66
|
private readonly index: bigint;
|
|
67
|
+
private initCode?: Hex;
|
|
66
68
|
validator?: KernelBaseValidator;
|
|
69
|
+
defaultValidator?: KernelBaseValidator;
|
|
67
70
|
|
|
68
71
|
constructor(params: KernelSmartAccountParams) {
|
|
69
72
|
super({
|
|
@@ -73,9 +76,10 @@ export class KernelSmartContractAccount<
|
|
|
73
76
|
rpcClient: params.rpcClient ?? BUNDLER_URL,
|
|
74
77
|
});
|
|
75
78
|
this.index = params.index ?? 0n;
|
|
76
|
-
this.owner = params.owner;
|
|
77
79
|
this.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;
|
|
78
80
|
this.validator = params.validator;
|
|
81
|
+
this.defaultValidator = params.defaultValidator;
|
|
82
|
+
this.initCode = params.initCode;
|
|
79
83
|
}
|
|
80
84
|
|
|
81
85
|
public static async init(
|
|
@@ -119,52 +123,55 @@ export class KernelSmartContractAccount<
|
|
|
119
123
|
return "0x00000000870fe151d548a1c527c3804866fab30abf28ed17b79d5fc5149f19ca0819fefc3c57f3da4fdf9b10fab3f2f3dca536467ae44943b9dbb8433efe7760ddd72aaa1c";
|
|
120
124
|
}
|
|
121
125
|
|
|
122
|
-
async
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
): Promise<Hex> {
|
|
126
|
-
if (!this.validator) {
|
|
127
|
-
throw new Error("Validator not connected");
|
|
126
|
+
async getInitCode(): Promise<Hex> {
|
|
127
|
+
if (this.deploymentState === DeploymentState.DEPLOYED) {
|
|
128
|
+
return "0x";
|
|
128
129
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
|
|
132
|
-
const validatorMode = await this.validator.resolveValidatorMode(
|
|
133
|
-
kernelAccountAddress,
|
|
134
|
-
calldata
|
|
130
|
+
const contractCode = await this.rpcProvider.getContractCode(
|
|
131
|
+
await this.getAddress()
|
|
135
132
|
);
|
|
136
|
-
if (validatorMode === ValidatorMode.enable) {
|
|
137
|
-
const enableData = await this.validator.getEnableData();
|
|
138
|
-
const enableDataLength = enableData.length / 2 - 1;
|
|
139
|
-
const enableSigLength = 65;
|
|
140
|
-
const staticDummySig = concatHex([
|
|
141
|
-
"0x000000000000000000000000",
|
|
142
|
-
this.validator.getAddress(),
|
|
143
|
-
"0x53dd285022D1512635823952d109dB39467a457E",
|
|
144
|
-
]);
|
|
145
|
-
const pausedUntil = await (
|
|
146
|
-
this.validator as KillSwitchValidator
|
|
147
|
-
).getPausedUntil();
|
|
148
133
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
134
|
+
if ((contractCode?.length ?? 0) > 2) {
|
|
135
|
+
this.deploymentState = DeploymentState.DEPLOYED;
|
|
136
|
+
return "0x";
|
|
137
|
+
} else {
|
|
138
|
+
this.deploymentState = DeploymentState.NOT_DEPLOYED;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return this.initCode ?? this.getAccountInitCode();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
getIndex(): bigint {
|
|
145
|
+
return this.index;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
async approvePlugin() {
|
|
149
|
+
if (!this.validator) {
|
|
150
|
+
throw new Error("Validator not connected");
|
|
151
|
+
}
|
|
152
|
+
if (this.defaultValidator && !this.validator.getEnableSignature()) {
|
|
153
|
+
const { executor, selector, validAfter, validUntil } =
|
|
154
|
+
this.validator.getPluginValidatorData();
|
|
155
|
+
const enableSig = await this.defaultValidator.approveExecutor(
|
|
156
|
+
await this.getAddress(),
|
|
157
|
+
selector,
|
|
158
|
+
executor,
|
|
159
|
+
validUntil,
|
|
160
|
+
validAfter,
|
|
161
|
+
this.validator
|
|
162
|
+
);
|
|
163
|
+
this.validator.setEnableSignature(enableSig);
|
|
159
164
|
}
|
|
160
|
-
return concatHex([validatorMode, dummyECDSASig]);
|
|
161
165
|
}
|
|
162
166
|
|
|
163
167
|
async encodeExecute(target: Hex, value: bigint, data: Hex): Promise<Hex> {
|
|
164
168
|
if (!this.validator) {
|
|
165
169
|
throw new Error("Validator not connected");
|
|
166
170
|
}
|
|
167
|
-
if (
|
|
171
|
+
if (
|
|
172
|
+
target.toLowerCase() === (await this.getAddress()).toLowerCase() &&
|
|
173
|
+
this.validator.shouldDelegateViaFallback()
|
|
174
|
+
) {
|
|
168
175
|
return data;
|
|
169
176
|
} else {
|
|
170
177
|
return this.encodeExecuteAction(target, value, data, 0);
|
|
@@ -196,8 +203,11 @@ export class KernelSmartContractAccount<
|
|
|
196
203
|
|
|
197
204
|
async signWithEip6492(msg: string | Uint8Array): Promise<Hex> {
|
|
198
205
|
try {
|
|
206
|
+
if (!this.validator) {
|
|
207
|
+
throw new Error("Validator not connected");
|
|
208
|
+
}
|
|
199
209
|
const formattedMessage = typeof msg === "string" ? toBytes(msg) : msg;
|
|
200
|
-
let sig = await this.
|
|
210
|
+
let sig = await this.validator.signMessage(
|
|
201
211
|
toBytes(hashMessage({ raw: formattedMessage }))
|
|
202
212
|
);
|
|
203
213
|
// If the account is undeployed, use ERC-6492
|
|
@@ -255,7 +265,8 @@ export class KernelSmartContractAccount<
|
|
|
255
265
|
}
|
|
256
266
|
|
|
257
267
|
protected async getFactoryInitCode(): Promise<Hex> {
|
|
258
|
-
|
|
268
|
+
const validator = this.defaultValidator ?? this.validator;
|
|
269
|
+
if (!validator) {
|
|
259
270
|
throw new Error("Validator not connected");
|
|
260
271
|
}
|
|
261
272
|
try {
|
|
@@ -267,10 +278,7 @@ export class KernelSmartContractAccount<
|
|
|
267
278
|
encodeFunctionData({
|
|
268
279
|
abi: KernelAccountAbi,
|
|
269
280
|
functionName: "initialize",
|
|
270
|
-
args: [
|
|
271
|
-
this.validator.getAddress(),
|
|
272
|
-
await this.validator.getEnableData(),
|
|
273
|
-
],
|
|
281
|
+
args: [validator.getAddress(), await validator.getEnableData()],
|
|
274
282
|
}),
|
|
275
283
|
this.index,
|
|
276
284
|
],
|
|
@@ -24,6 +24,9 @@ export const DUMMY_ECDSA_SIG =
|
|
|
24
24
|
export const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =
|
|
25
25
|
"0xe149290800De29D4b0BF9dB82c508255D81902E6";
|
|
26
26
|
export const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
|
|
27
|
+
export const SESSION_KEY_VALIDATOR_ADDRESS =
|
|
28
|
+
"0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f";
|
|
29
|
+
export const oneAddress = "0x0000000000000000000000000000000000000001";
|
|
27
30
|
|
|
28
31
|
export const gasTokenChainAddresses: IGasTokenAddresses = {
|
|
29
32
|
USDC: {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
BaseSmartContractAccount,
|
|
3
2
|
resolveProperties,
|
|
4
3
|
type AccountMiddlewareFn,
|
|
5
4
|
type FeeDataMiddleware,
|
|
@@ -23,6 +22,7 @@ import {
|
|
|
23
22
|
} from "@ethersproject/providers";
|
|
24
23
|
import { ZeroDevEthersProvider } from "./ethers-provider.js";
|
|
25
24
|
import type { SupportedValidators } from "../validator/types.js";
|
|
25
|
+
import type { KernelSmartContractAccount } from "../account.js";
|
|
26
26
|
|
|
27
27
|
const hexlifyOptional = (value: any): `0x${string}` | undefined => {
|
|
28
28
|
if (value == null) {
|
|
@@ -36,14 +36,14 @@ export class ZeroDevAccountSigner<V extends SupportedValidators>
|
|
|
36
36
|
extends Signer
|
|
37
37
|
implements TypedDataSigner
|
|
38
38
|
{
|
|
39
|
-
private account?:
|
|
39
|
+
private account?: KernelSmartContractAccount;
|
|
40
40
|
|
|
41
41
|
sendUserOperation;
|
|
42
42
|
waitForUserOperationTransaction;
|
|
43
43
|
|
|
44
44
|
constructor(readonly provider: ZeroDevEthersProvider<V>) {
|
|
45
45
|
super();
|
|
46
|
-
this.account = this.provider.accountProvider.
|
|
46
|
+
this.account = this.provider.accountProvider.getAccount();
|
|
47
47
|
|
|
48
48
|
this.sendUserOperation =
|
|
49
49
|
this.provider.accountProvider.sendUserOperation.bind(
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { getChainId } from "../api/index.js";
|
|
2
2
|
import {
|
|
3
|
-
SmartAccountProvider,
|
|
4
3
|
getChain,
|
|
5
|
-
type HttpTransport,
|
|
6
4
|
BaseSmartContractAccount,
|
|
7
5
|
defineReadOnly,
|
|
8
6
|
type AccountMiddlewareFn,
|
|
@@ -14,22 +12,34 @@ import {
|
|
|
14
12
|
import { ZeroDevAccountSigner } from "./account-signer.js";
|
|
15
13
|
import { JsonRpcProvider } from "@ethersproject/providers";
|
|
16
14
|
import type { SupportedValidators } from "../validator/types.js";
|
|
17
|
-
import type {
|
|
15
|
+
import type {
|
|
16
|
+
ValidatorProviderParamsMap,
|
|
17
|
+
ValidatorProviderTypeMap,
|
|
18
|
+
} from "../validator-provider/types.js";
|
|
18
19
|
import { ValidatorProviders } from "../validator-provider/index.js";
|
|
19
20
|
import { withZeroDevPaymasterAndData } from "../middleware/paymaster.js";
|
|
20
21
|
|
|
21
22
|
export class ZeroDevEthersProvider<
|
|
22
23
|
V extends SupportedValidators
|
|
23
24
|
> extends JsonRpcProvider {
|
|
24
|
-
readonly accountProvider:
|
|
25
|
+
readonly accountProvider: ValidatorProviderTypeMap[V];
|
|
25
26
|
constructor(validatorType: V, params: ValidatorProviderParamsMap[V]) {
|
|
26
27
|
super();
|
|
27
28
|
let accountProvider = new ValidatorProviders[validatorType](params);
|
|
28
29
|
if (params.usePaymaster === undefined || params.usePaymaster) {
|
|
30
|
+
let paymasterConfig = params.opts?.paymasterConfig ?? {
|
|
31
|
+
policy: "VERIFYING_PAYMASTER",
|
|
32
|
+
};
|
|
33
|
+
paymasterConfig = {
|
|
34
|
+
...paymasterConfig,
|
|
35
|
+
paymasterProvider:
|
|
36
|
+
params.opts?.paymasterConfig?.paymasterProvider ??
|
|
37
|
+
params.bundlerProvider,
|
|
38
|
+
};
|
|
29
39
|
accountProvider = withZeroDevPaymasterAndData(
|
|
30
40
|
accountProvider,
|
|
31
|
-
|
|
32
|
-
) as
|
|
41
|
+
paymasterConfig
|
|
42
|
+
) as ValidatorProviderTypeMap[V];
|
|
33
43
|
}
|
|
34
44
|
this.accountProvider = accountProvider;
|
|
35
45
|
}
|
|
@@ -57,6 +67,10 @@ export class ZeroDevEthersProvider<
|
|
|
57
67
|
return instance;
|
|
58
68
|
}
|
|
59
69
|
|
|
70
|
+
getAccountProvider(): ValidatorProviderTypeMap[V] {
|
|
71
|
+
return this.accountProvider;
|
|
72
|
+
}
|
|
73
|
+
|
|
60
74
|
/**
|
|
61
75
|
* Rewrites the send method to use the account provider's EIP-1193
|
|
62
76
|
* compliant request method
|
|
@@ -78,7 +92,11 @@ export class ZeroDevEthersProvider<
|
|
|
78
92
|
connectToAccount(
|
|
79
93
|
fn: (rpcClient: PublicErc4337Client) => BaseSmartContractAccount
|
|
80
94
|
): ZeroDevAccountSigner<V> {
|
|
81
|
-
defineReadOnly(
|
|
95
|
+
defineReadOnly(
|
|
96
|
+
this,
|
|
97
|
+
"accountProvider",
|
|
98
|
+
this.accountProvider.connect(fn) as ValidatorProviderTypeMap[V]
|
|
99
|
+
);
|
|
82
100
|
return this.getAccountSigner();
|
|
83
101
|
}
|
|
84
102
|
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
base64UrlEncode,
|
|
6
6
|
es256,
|
|
7
7
|
generateRandomBuffer,
|
|
8
|
-
getCredentials,
|
|
9
8
|
publicKey,
|
|
10
9
|
signMessage,
|
|
11
10
|
signTypedData,
|
|
@@ -26,6 +25,7 @@ export async function createPasskeyOwner({
|
|
|
26
25
|
//@ts-expect-error
|
|
27
26
|
if (typeof window !== "undefined") {
|
|
28
27
|
const challenge = generateRandomBuffer();
|
|
28
|
+
const authenticatorUserId = generateRandomBuffer();
|
|
29
29
|
try {
|
|
30
30
|
const attestation = await getWebAuthnAttestation({
|
|
31
31
|
publicKey: {
|
|
@@ -39,7 +39,7 @@ export async function createPasskeyOwner({
|
|
|
39
39
|
residentKey: "required", // or 'preferred', 'discouraged'
|
|
40
40
|
userVerification: "required",
|
|
41
41
|
},
|
|
42
|
-
excludeCredentials: await getCredentials(projectId),
|
|
42
|
+
// excludeCredentials: await getCredentials(projectId),
|
|
43
43
|
extensions: { credProps: true },
|
|
44
44
|
challenge,
|
|
45
45
|
pubKeyCredParams: [
|
|
@@ -49,7 +49,7 @@ export async function createPasskeyOwner({
|
|
|
49
49
|
},
|
|
50
50
|
],
|
|
51
51
|
user: {
|
|
52
|
-
id:
|
|
52
|
+
id: authenticatorUserId,
|
|
53
53
|
name,
|
|
54
54
|
displayName: name,
|
|
55
55
|
},
|
|
@@ -4,7 +4,6 @@ import type { SignTypedDataParams, SmartAccountSigner } from "@alchemy/aa-core";
|
|
|
4
4
|
import {
|
|
5
5
|
base64UrlEncode,
|
|
6
6
|
generateRandomBuffer,
|
|
7
|
-
getCredentials,
|
|
8
7
|
signMessage,
|
|
9
8
|
signTypedData,
|
|
10
9
|
} from "./utils.js";
|
|
@@ -27,7 +26,7 @@ export async function getPasskeyOwner({
|
|
|
27
26
|
//@ts-expect-error
|
|
28
27
|
rpId: window.location.hostname,
|
|
29
28
|
userVerification: "required",
|
|
30
|
-
allowCredentials: await getCredentials(projectId),
|
|
29
|
+
// allowCredentials: await getCredentials(projectId),
|
|
31
30
|
},
|
|
32
31
|
})
|
|
33
32
|
);
|
|
@@ -119,15 +119,6 @@ export const signTypedData = async (
|
|
|
119
119
|
);
|
|
120
120
|
};
|
|
121
121
|
|
|
122
|
-
export const getCredentials = async (projectId: string, apiUrl = API_URL) => {
|
|
123
|
-
const response = await axios.get(`${apiUrl}/projects/${projectId}/wallets`);
|
|
124
|
-
const credentials = response.data;
|
|
125
|
-
return credentials.map((credential: string) => ({
|
|
126
|
-
id: base64URLStringToBuffer(credential),
|
|
127
|
-
type: "public-key",
|
|
128
|
-
}));
|
|
129
|
-
};
|
|
130
|
-
|
|
131
122
|
// https://github.com/MasterKale/SimpleWebAuthn/blob/master/packages/browser/src/helpers/base64URLStringToBuffer.ts#L8
|
|
132
123
|
export function base64URLStringToBuffer(base64URLString: string): ArrayBuffer {
|
|
133
124
|
// Convert from Base64URL to Base64
|
|
@@ -56,8 +56,8 @@ export type ZeroDevProviderConfig = {
|
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
export enum Operation {
|
|
59
|
-
Call,
|
|
60
|
-
DelegateCall,
|
|
59
|
+
Call = 0,
|
|
60
|
+
DelegateCall = 1,
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
type UserOpDataOperationTypes<T> = T extends UserOperationCallData
|
|
@@ -214,6 +214,8 @@ export class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
|
|
|
214
214
|
);
|
|
215
215
|
}
|
|
216
216
|
|
|
217
|
+
this.account.approvePlugin();
|
|
218
|
+
|
|
217
219
|
request.signature = await this.account.validator.getSignature(request);
|
|
218
220
|
try {
|
|
219
221
|
hash = await this.rpcClient.sendUserOperation(
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { SignTypedDataParams, SmartAccountSigner } from "@alchemy/aa-core";
|
|
2
|
+
import { type Hex } from "viem";
|
|
3
|
+
|
|
4
|
+
export class EmptyAccountSigner implements SmartAccountSigner {
|
|
5
|
+
private owner: Hex;
|
|
6
|
+
constructor(owner: Hex) {
|
|
7
|
+
this.owner = owner;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
readonly signMessage: (msg: string | Uint8Array) => Promise<`0x${string}`> = (
|
|
11
|
+
_msg
|
|
12
|
+
) => {
|
|
13
|
+
throw Error("EmptyAccountSigner: method not implemented");
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
readonly signTypedData = (_params: SignTypedDataParams) => {
|
|
17
|
+
throw Error("EmptyAccountSigner: method not implemented");
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
readonly getAddress: () => Promise<`0x${string}`> = async () => {
|
|
21
|
+
return this.owner;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
static addressToAccountSigner(ownerAddress: Hex): EmptyAccountSigner {
|
|
25
|
+
return new EmptyAccountSigner(ownerAddress);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -46,6 +46,16 @@ export const encodeMultiSend = (
|
|
|
46
46
|
return ("0x" + _txs.map((tx) => encodeCall(tx)).join("")) as Hex;
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
+
export function base64ToBytes(base64: string) {
|
|
50
|
+
const binString = atob(base64);
|
|
51
|
+
return Uint8Array.from(binString, (m) => m.codePointAt(0) as number);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function bytesToBase64(bytes: Uint8Array) {
|
|
55
|
+
const binString = Array.from(bytes, (x) => String.fromCodePoint(x)).join("");
|
|
56
|
+
return btoa(binString);
|
|
57
|
+
}
|
|
58
|
+
|
|
49
59
|
export function getGasTokenAddress(
|
|
50
60
|
gasToken: SupportedGasToken,
|
|
51
61
|
chainId: number
|
|
@@ -43,11 +43,18 @@ export interface KernelBaseValidatorParams {
|
|
|
43
43
|
validUntil?: number;
|
|
44
44
|
validAfter?: number;
|
|
45
45
|
executor?: Address;
|
|
46
|
-
selector?:
|
|
46
|
+
selector?: Hex;
|
|
47
47
|
rpcUrl?: string;
|
|
48
48
|
bundlerProvider?: PaymasterAndBundlerProviders;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
export type ValidatorPluginData = Required<
|
|
52
|
+
Pick<
|
|
53
|
+
KernelBaseValidatorParams,
|
|
54
|
+
"executor" | "selector" | "validAfter" | "validUntil"
|
|
55
|
+
>
|
|
56
|
+
>;
|
|
57
|
+
|
|
51
58
|
//Kernel wallet implementation separates out validation and execution phase. It allows you to have
|
|
52
59
|
// custom wrapper logic for the validation phase in addition to signature of choice.
|
|
53
60
|
export abstract class KernelBaseValidator {
|
|
@@ -60,7 +67,7 @@ export abstract class KernelBaseValidator {
|
|
|
60
67
|
protected validUntil: number;
|
|
61
68
|
protected validAfter: number;
|
|
62
69
|
protected executor?: Address;
|
|
63
|
-
protected selector?:
|
|
70
|
+
protected selector?: Hex;
|
|
64
71
|
protected rpcUrl?: string;
|
|
65
72
|
protected bundlerProvider?: PaymasterAndBundlerProviders;
|
|
66
73
|
publicClient?: PublicClient<Transport, Chain>;
|
|
@@ -98,13 +105,29 @@ export abstract class KernelBaseValidator {
|
|
|
98
105
|
|
|
99
106
|
abstract signer(): Promise<SmartAccountSigner>;
|
|
100
107
|
|
|
101
|
-
abstract getDummyUserOpSignature(): Promise<Hex>;
|
|
108
|
+
abstract getDummyUserOpSignature(callData?: Hex): Promise<Hex>;
|
|
102
109
|
|
|
103
110
|
abstract isPluginEnabled(
|
|
104
111
|
kernelAccountAddress: Address,
|
|
105
112
|
selector: Hex
|
|
106
113
|
): Promise<boolean>;
|
|
107
114
|
|
|
115
|
+
shouldDelegateViaFallback(): boolean {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
getPluginValidatorData(): ValidatorPluginData {
|
|
120
|
+
if (!this.selector || !this.executor) {
|
|
121
|
+
throw Error("Plugin Validator data params uninitialised");
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
selector: this.selector,
|
|
125
|
+
executor: this.executor,
|
|
126
|
+
validAfter: this.validAfter,
|
|
127
|
+
validUntil: this.validUntil,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
108
131
|
async getDynamicDummySignature(
|
|
109
132
|
kernelAccountAddress: Address,
|
|
110
133
|
calldata: Hex
|
|
@@ -122,7 +145,7 @@ export abstract class KernelBaseValidator {
|
|
|
122
145
|
const staticDummySig = concatHex([
|
|
123
146
|
"0x000000000000000000000000",
|
|
124
147
|
this.getAddress(),
|
|
125
|
-
|
|
148
|
+
this.executor!,
|
|
126
149
|
]);
|
|
127
150
|
|
|
128
151
|
return concatHex([
|
|
@@ -132,10 +155,13 @@ export abstract class KernelBaseValidator {
|
|
|
132
155
|
enableData,
|
|
133
156
|
pad(toHex(enableSigLength), { size: 32 }),
|
|
134
157
|
dummyECDSASig,
|
|
135
|
-
await this.getDummyUserOpSignature(),
|
|
158
|
+
await this.getDummyUserOpSignature(calldata),
|
|
136
159
|
]);
|
|
137
160
|
}
|
|
138
|
-
return concatHex([
|
|
161
|
+
return concatHex([
|
|
162
|
+
validatorMode,
|
|
163
|
+
await this.getDummyUserOpSignature(calldata),
|
|
164
|
+
]);
|
|
139
165
|
}
|
|
140
166
|
|
|
141
167
|
setEnableSignature(enableSignature: Hex) {
|
|
@@ -4,13 +4,19 @@ import {
|
|
|
4
4
|
type Hex,
|
|
5
5
|
type SmartAccountSigner,
|
|
6
6
|
type UserOperationRequest,
|
|
7
|
+
getChain,
|
|
7
8
|
type SignTypedDataParams,
|
|
8
9
|
} from "@alchemy/aa-core";
|
|
9
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
KernelBaseValidator,
|
|
12
|
+
ValidatorMode,
|
|
13
|
+
type KernelBaseValidatorParams,
|
|
14
|
+
} from "./base.js";
|
|
10
15
|
import { encodeFunctionData, toBytes, concat, pad, toHex } from "viem";
|
|
11
16
|
import { ERC165SessionKeyValidatorAbi } from "../abis/ERC165SessionKeyValidatorAbi.js";
|
|
12
17
|
import { DUMMY_ECDSA_SIG } from "../constants.js";
|
|
13
18
|
import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
|
|
19
|
+
import { getChainId } from "../api/index.js";
|
|
14
20
|
import { fixSignedData } from "../utils.js";
|
|
15
21
|
|
|
16
22
|
export interface ERC165SessionKeyValidatorParams
|
|
@@ -35,6 +41,19 @@ export class ERC165SessionKeyValidator extends KernelBaseValidator {
|
|
|
35
41
|
super(params);
|
|
36
42
|
this.sessionKey = params.sessionKey;
|
|
37
43
|
this.sessionKeyData = params.sessionKeyData;
|
|
44
|
+
this.mode = params.mode ?? ValidatorMode.plugin;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public static async init(
|
|
48
|
+
params: ERC165SessionKeyValidatorParams
|
|
49
|
+
): Promise<ERC165SessionKeyValidator> {
|
|
50
|
+
const chainId = await getChainId(params.projectId);
|
|
51
|
+
if (!chainId) {
|
|
52
|
+
throw new Error("ChainId not found");
|
|
53
|
+
}
|
|
54
|
+
const chain = getChain(chainId);
|
|
55
|
+
const instance = new ERC165SessionKeyValidator({ ...params, chain });
|
|
56
|
+
return instance;
|
|
38
57
|
}
|
|
39
58
|
|
|
40
59
|
async signer(): Promise<SmartAccountSigner> {
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { ECDSAValidator } from "./ecdsa-validator.js";
|
|
2
2
|
import { ERC165SessionKeyValidator } from "./erc165-session-key-validator.js";
|
|
3
3
|
import { KillSwitchValidator } from "./kill-switch-validator.js";
|
|
4
|
+
import { SessionKeyValidator } from "./session-key-validator.js";
|
|
4
5
|
import type { ValidatorMap } from "./types.js";
|
|
5
6
|
|
|
6
7
|
export const Validators: ValidatorMap = {
|
|
7
8
|
ECDSA: ECDSAValidator,
|
|
8
9
|
KILL_SWITCH: KillSwitchValidator,
|
|
9
10
|
ERC165_SESSION_KEY: ERC165SessionKeyValidator,
|
|
11
|
+
SESSION_KEY: SessionKeyValidator,
|
|
10
12
|
};
|
|
11
13
|
|
|
12
|
-
export {
|
|
14
|
+
export {
|
|
15
|
+
ECDSAValidator,
|
|
16
|
+
KillSwitchValidator,
|
|
17
|
+
ERC165SessionKeyValidator,
|
|
18
|
+
SessionKeyValidator,
|
|
19
|
+
};
|
|
@@ -7,7 +7,11 @@ import {
|
|
|
7
7
|
type UserOperationRequest,
|
|
8
8
|
type SignTypedDataParams,
|
|
9
9
|
} from "@alchemy/aa-core";
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
KernelBaseValidator,
|
|
12
|
+
ValidatorMode,
|
|
13
|
+
type KernelBaseValidatorParams,
|
|
14
|
+
} from "./base.js";
|
|
11
15
|
import {
|
|
12
16
|
concat,
|
|
13
17
|
concatHex,
|
|
@@ -37,6 +41,7 @@ export class KillSwitchValidator extends KernelBaseValidator {
|
|
|
37
41
|
super(params);
|
|
38
42
|
this.guardian = params.guardian;
|
|
39
43
|
this.delaySeconds = params.delaySeconds;
|
|
44
|
+
this.mode = params.mode ?? ValidatorMode.plugin;
|
|
40
45
|
}
|
|
41
46
|
|
|
42
47
|
public static async init(
|