@zerodev/sdk 4.0.4 → 4.0.6
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/index.d.ts +1 -0
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/account.d.ts +2 -1
- package/dist/cjs/kernel-zerodev/account.js +6 -0
- package/dist/cjs/kernel-zerodev/account.js.map +1 -1
- package/dist/cjs/kernel-zerodev/constants.js +1 -2
- package/dist/cjs/kernel-zerodev/constants.js.map +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.d.ts +28 -0
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js +134 -0
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js.map +1 -0
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.d.ts +3 -3
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js +2 -2
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/base.d.ts +2 -1
- package/dist/cjs/kernel-zerodev/validator/base.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.d.ts +2 -1
- package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js +4 -0
- package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.d.ts +2 -1
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js +4 -0
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.d.ts +2 -1
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js +4 -0
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/account.d.ts +2 -1
- package/dist/esm/kernel-zerodev/account.js +6 -0
- package/dist/esm/kernel-zerodev/account.js.map +1 -1
- package/dist/esm/kernel-zerodev/constants.js +1 -2
- package/dist/esm/kernel-zerodev/constants.js.map +1 -1
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.d.ts +28 -0
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js +132 -0
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js.map +1 -0
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.d.ts +3 -3
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js +2 -2
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/base.d.ts +2 -1
- package/dist/esm/kernel-zerodev/validator/base.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/ecdsa-validator.d.ts +2 -1
- package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js +4 -0
- package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.d.ts +2 -1
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js +4 -0
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.d.ts +2 -1
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js +4 -0
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/account.d.ts +2 -1
- package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/constants.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts +29 -0
- package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts +5 -5
- package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/base.d.ts +2 -1
- package/dist/types/kernel-zerodev/validator/base.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/ecdsa-validator.d.ts +2 -1
- package/dist/types/kernel-zerodev/validator/ecdsa-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts +2 -1
- package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts +2 -1
- package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/kernel-zerodev/account.ts +8 -0
- package/src/kernel-zerodev/constants.ts +1 -2
- package/src/kernel-zerodev/ethers-provider/account-signer.ts +165 -0
- package/src/kernel-zerodev/ethers-provider/ethers-provider.ts +6 -6
- package/src/kernel-zerodev/validator/base.ts +4 -1
- package/src/kernel-zerodev/validator/ecdsa-validator.ts +6 -0
- package/src/kernel-zerodev/validator/erc165-session-key-validator.ts +6 -0
- package/src/kernel-zerodev/validator/kill-switch-validator.ts +6 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Address, type Hex, type SmartAccountSigner, type UserOperationRequest } from "@alchemy/aa-core";
|
|
1
|
+
import { type Address, type Hex, type SmartAccountSigner, type UserOperationRequest, type SignTypedDataParams } from "@alchemy/aa-core";
|
|
2
2
|
import { KernelBaseValidator, type KernelBaseValidatorParams } from "./base.js";
|
|
3
3
|
export interface ERC165SessionKeyValidatorParams extends KernelBaseValidatorParams {
|
|
4
4
|
sessionKey: SmartAccountSigner;
|
|
@@ -22,6 +22,7 @@ export declare class ERC165SessionKeyValidator extends KernelBaseValidator {
|
|
|
22
22
|
encodeEnable(sessionKeyEnableData: Hex): Hex;
|
|
23
23
|
encodeDisable(sessionKey: Hex): Hex;
|
|
24
24
|
signMessage(message: string | Uint8Array): Promise<Hex>;
|
|
25
|
+
signTypedData(params: SignTypedDataParams): Promise<Hex>;
|
|
25
26
|
signUserOp(userOp: UserOperationRequest): Promise<Hex>;
|
|
26
27
|
}
|
|
27
28
|
export {};
|
|
@@ -7,6 +7,7 @@ const viem_1 = require("viem");
|
|
|
7
7
|
const ERC165SessionKeyValidatorAbi_js_1 = require("../abis/ERC165SessionKeyValidatorAbi.js");
|
|
8
8
|
const constants_js_1 = require("../constants.js");
|
|
9
9
|
const KernelAccountAbi_js_1 = require("../abis/KernelAccountAbi.js");
|
|
10
|
+
const utils_js_1 = require("../utils.js");
|
|
10
11
|
class ERC165SessionKeyValidator extends base_js_1.KernelBaseValidator {
|
|
11
12
|
constructor(params) {
|
|
12
13
|
super(params);
|
|
@@ -87,6 +88,9 @@ class ERC165SessionKeyValidator extends base_js_1.KernelBaseValidator {
|
|
|
87
88
|
async signMessage(message) {
|
|
88
89
|
return await this.sessionKey.signMessage(message);
|
|
89
90
|
}
|
|
91
|
+
async signTypedData(params) {
|
|
92
|
+
return (0, utils_js_1.fixSignedData)(await this.sessionKey.signTypedData(params));
|
|
93
|
+
}
|
|
90
94
|
async signUserOp(userOp) {
|
|
91
95
|
if (!this.chain) {
|
|
92
96
|
throw new Error("Validator uninitialized");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erc165-session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/erc165-session-key-validator.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"erc165-session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/erc165-session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport { KernelBaseValidator, type KernelBaseValidatorParams } from \"./base.js\";\nimport { encodeFunctionData, toBytes, concat, pad, toHex } from \"viem\";\nimport { ERC165SessionKeyValidatorAbi } from \"../abis/ERC165SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData } from \"../utils.js\";\n\nexport interface ERC165SessionKeyValidatorParams\n extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\ninterface SessionKeyData {\n selector: Hex;\n erc165InterfaceId: Hex;\n validUntil: number;\n validAfter: number;\n addressOffset: number;\n}\n\nexport class ERC165SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n\n constructor(params: ERC165SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = params.sessionKeyData;\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getEnableData(): Promise<Hex> {\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.sessionKeyData.erc165InterfaceId, { size: 4 }),\n pad(this.sessionKeyData.selector, { size: 4 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.addressOffset), { size: 4 }),\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: ERC165SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionKeys\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concat([\n await this.sessionKey.getAddress(),\n pad(enableData[2], { size: 4 }),\n pad(enableData[1], { size: 4 }),\n pad(toHex(enableData[3]), { size: 6 }),\n pad(toHex(enableData[4]), { size: 6 }),\n pad(toHex(enableData[5]), { size: 4 }),\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] &&\n enableDataHex.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n return DUMMY_ECDSA_SIG;\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: ERC165SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: ERC165SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.sessionKey.signMessage(formattedMessage);\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Address, type Hex, type SmartAccountSigner, type UserOperationRequest } from "@alchemy/aa-core";
|
|
1
|
+
import { type Address, type Hex, type SmartAccountSigner, type UserOperationRequest, type SignTypedDataParams } from "@alchemy/aa-core";
|
|
2
2
|
import { KernelBaseValidator, type KernelBaseValidatorParams } from "./base.js";
|
|
3
3
|
export interface KillSwitchValidatorParams extends KernelBaseValidatorParams {
|
|
4
4
|
guardian: SmartAccountSigner;
|
|
@@ -17,5 +17,6 @@ export declare class KillSwitchValidator extends KernelBaseValidator {
|
|
|
17
17
|
isPluginEnabled(kernelAccountAddress: Address, selector: Hex): Promise<boolean>;
|
|
18
18
|
getDummyUserOpSignature(): Promise<Hex>;
|
|
19
19
|
signMessage(message: string | Uint8Array): Promise<Hex>;
|
|
20
|
+
signTypedData(params: SignTypedDataParams): Promise<Hex>;
|
|
20
21
|
signUserOp(userOp: UserOperationRequest): Promise<Hex>;
|
|
21
22
|
}
|
|
@@ -8,6 +8,7 @@ const KillSwitchValidatorAbi_js_1 = require("../abis/KillSwitchValidatorAbi.js")
|
|
|
8
8
|
const index_js_1 = require("../api/index.js");
|
|
9
9
|
const constants_js_1 = require("../constants.js");
|
|
10
10
|
const KernelAccountAbi_js_1 = require("../abis/KernelAccountAbi.js");
|
|
11
|
+
const utils_js_1 = require("../utils.js");
|
|
11
12
|
class KillSwitchValidator extends base_js_1.KernelBaseValidator {
|
|
12
13
|
constructor(params) {
|
|
13
14
|
super(params);
|
|
@@ -89,6 +90,9 @@ class KillSwitchValidator extends base_js_1.KernelBaseValidator {
|
|
|
89
90
|
async signMessage(message) {
|
|
90
91
|
return await this.guardian.signMessage(message);
|
|
91
92
|
}
|
|
93
|
+
async signTypedData(params) {
|
|
94
|
+
return (0, utils_js_1.fixSignedData)(await this.guardian.signTypedData(params));
|
|
95
|
+
}
|
|
92
96
|
async signUserOp(userOp) {
|
|
93
97
|
const pausedUntil = this.getPausedUntil();
|
|
94
98
|
if (!this.chain) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kill-switch-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/kill-switch-validator.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"kill-switch-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/kill-switch-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getChain,\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport { KernelBaseValidator, type KernelBaseValidatorParams } from \"./base.js\";\nimport {\n concat,\n concatHex,\n encodeFunctionData,\n getContract,\n keccak256,\n pad,\n toBytes,\n toHex,\n} from \"viem\";\nimport { KillSwitchValidatorAbi } from \"../abis/KillSwitchValidatorAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData } from \"../utils.js\";\n\nexport interface KillSwitchValidatorParams extends KernelBaseValidatorParams {\n guardian: SmartAccountSigner;\n delaySeconds: number;\n}\n\nexport class KillSwitchValidator extends KernelBaseValidator {\n protected guardian: SmartAccountSigner;\n protected delaySeconds: number;\n\n constructor(params: KillSwitchValidatorParams) {\n super(params);\n this.guardian = params.guardian;\n this.delaySeconds = params.delaySeconds;\n }\n\n public static async init(\n params: KillSwitchValidatorParams\n ): Promise<KillSwitchValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new KillSwitchValidator({ ...params, chain });\n return instance;\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.guardian);\n }\n\n async getEnableData(): Promise<Hex> {\n return await (await this.signer()).getAddress();\n }\n\n getPausedUntil(): number {\n return Math.floor(Date.now() / 1000) + this.delaySeconds;\n }\n\n encodeEnable(newGuardian: Hex): Hex {\n return encodeFunctionData({\n abi: KillSwitchValidatorAbi,\n functionName: \"enable\",\n args: [newGuardian],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: KillSwitchValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const kernel = getContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n publicClient: this.publicClient,\n });\n const execDetail = await kernel.read.getExecution([selector]);\n const enableData = await this.publicClient.readContract({\n abi: KillSwitchValidatorAbi,\n address: this.validatorAddress,\n functionName: \"killSwitchValidatorStorage\",\n args: [kernelAccountAddress],\n });\n const pausedUntil = Math.floor(Date.now() / 1000) + this.delaySeconds;\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] === (await this.getEnableData()) &&\n enableData[3] === (await kernel.read.getDisabledMode()) &&\n enableData[2] === pausedUntil &&\n enableData[1].toLowerCase() ===\n (await kernel.read.getDefaultValidator()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n return concatHex([pad(\"0xffffffffffff\", { size: 6 }), DUMMY_ECDSA_SIG]);\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.guardian.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.guardian.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n const pausedUntil = this.getPausedUntil();\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n ) as Hex;\n\n const extendedHash = keccak256(\n concat([pad(toHex(pausedUntil), { size: 6 }), hash])\n );\n const signature = concat([\n pad(toHex(pausedUntil), { size: 6 }),\n await this.guardian.signMessage(toBytes(extendedHash)),\n ]);\n return signature;\n }\n}\n"]}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -17,5 +17,6 @@ export { ZeroDevProvider } from "./kernel-zerodev/provider.js";
|
|
|
17
17
|
export * from "./kernel-zerodev/utils.js";
|
|
18
18
|
export { getChainId } from "./kernel-zerodev/api/index.js";
|
|
19
19
|
export { ZeroDevEthersProvider } from "./kernel-zerodev/ethers-provider/ethers-provider.js";
|
|
20
|
+
export { ZeroDevAccountSigner } from "./kernel-zerodev/ethers-provider/account-signer.js";
|
|
20
21
|
export * as constants from "./kernel-zerodev/constants.js";
|
|
21
22
|
export * from "./kernel-zerodev/owner/index.js";
|
package/dist/esm/index.js
CHANGED
|
@@ -8,6 +8,7 @@ export { ZeroDevProvider } from "./kernel-zerodev/provider.js";
|
|
|
8
8
|
export * from "./kernel-zerodev/utils.js";
|
|
9
9
|
export { getChainId } from "./kernel-zerodev/api/index.js";
|
|
10
10
|
export { ZeroDevEthersProvider } from "./kernel-zerodev/ethers-provider/ethers-provider.js";
|
|
11
|
+
export { ZeroDevAccountSigner } from "./kernel-zerodev/ethers-provider/account-signer.js";
|
|
11
12
|
export * as constants from "./kernel-zerodev/constants.js";
|
|
12
13
|
export * from "./kernel-zerodev/owner/index.js";
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gCAAgC,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AAQpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAOhF,cAAc,8CAA8C,CAAC;AAI7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gCAAgC,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AAQpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAOhF,cAAc,8CAA8C,CAAC;AAI7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE1F,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC;AAG3D,cAAc,iCAAiC,CAAC","sourcesContent":["// Add you exports here, make sure to export types separately from impls and use the `type` keyword when exporting them\n// Don't use wildcard exports, instead use named exports\n\n//kernel exports\nexport * from \"./kernel-zerodev/abis/index.js\";\n\n// Validator exports\nexport {\n ValidatorMode,\n KernelBaseValidator,\n} from \"./kernel-zerodev/validator/base.js\";\nexport * from \"./kernel-zerodev/validator/index.js\";\nexport type * from \"./kernel-zerodev/validator/types.js\";\nexport type { ECDSAValidatorParams } from \"./kernel-zerodev/validator/ecdsa-validator.js\";\nexport type { KillSwitchValidatorParams } from \"./kernel-zerodev/validator/kill-switch-validator.js\";\nexport type { ERC165SessionKeyValidatorParams } from \"./kernel-zerodev/validator/erc165-session-key-validator.js\";\nexport type { KernelBaseValidatorParams } from \"./kernel-zerodev/validator/base.js\";\n\n// Validator Provider exports\nexport { ValidatorProvider } from \"./kernel-zerodev/validator-provider/base.js\";\nexport type {\n ValidatorProviderParams,\n ValidatorProviderParamsOpts,\n ExtendedValidatorProviderParams,\n} from \"./kernel-zerodev/validator-provider/base.js\";\nexport type * from \"./kernel-zerodev/validator-provider/types.js\";\nexport * from \"./kernel-zerodev/validator-provider/index.js\";\n\n// Core exports\nexport type * from \"./kernel-zerodev/paymaster/types.js\";\nexport { KernelSmartContractAccount } from \"./kernel-zerodev/account.js\";\nexport type { KernelSmartAccountParams } from \"./kernel-zerodev/account.js\";\nexport { ZeroDevProvider } from \"./kernel-zerodev/provider.js\";\n\n// Utils exports\nexport * from \"./kernel-zerodev/utils.js\";\nexport { getChainId } from \"./kernel-zerodev/api/index.js\";\nexport { ZeroDevEthersProvider } from \"./kernel-zerodev/ethers-provider/ethers-provider.js\";\nexport { ZeroDevAccountSigner } from \"./kernel-zerodev/ethers-provider/account-signer.js\";\n\nexport * as constants from \"./kernel-zerodev/constants.js\";\n\n// Owner exports\nexport * from \"./kernel-zerodev/owner/index.js\";\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Address } from "abitype";
|
|
2
2
|
import { type FallbackTransport, type Hex, type Transport } from "viem";
|
|
3
3
|
import { KernelBaseValidator } from "./validator/base.js";
|
|
4
|
-
import { type BaseSmartAccountParams, BaseSmartContractAccount, type SmartAccountSigner, type BatchUserOperationCallData, type UserOperationRequest } from "@alchemy/aa-core";
|
|
4
|
+
import { type BaseSmartAccountParams, BaseSmartContractAccount, type SmartAccountSigner, type BatchUserOperationCallData, type UserOperationRequest, type SignTypedDataParams } from "@alchemy/aa-core";
|
|
5
5
|
import type { PaymasterAndBundlerProviders } from "./paymaster/types.js";
|
|
6
6
|
export interface KernelSmartAccountParams<TTransport extends Transport | FallbackTransport = Transport> extends Partial<BaseSmartAccountParams<TTransport>> {
|
|
7
7
|
projectId: string;
|
|
@@ -28,6 +28,7 @@ export declare class KernelSmartContractAccount<TTransport extends Transport | F
|
|
|
28
28
|
encodeExecuteDelegate(target: Hex, value: bigint, data: Hex): Promise<Hex>;
|
|
29
29
|
signWithEip6492(msg: string | Uint8Array): Promise<Hex>;
|
|
30
30
|
signMessage(msg: Uint8Array | string): Promise<Hex>;
|
|
31
|
+
signTypedData(params: SignTypedDataParams): Promise<Hex>;
|
|
31
32
|
signUserOp(userOp: UserOperationRequest): Promise<Hex>;
|
|
32
33
|
protected encodeExecuteAction(target: Hex, value: bigint, data: Hex, code: number): Hex;
|
|
33
34
|
protected getAccountInitCode(): Promise<Hex>;
|
|
@@ -157,6 +157,12 @@ export class KernelSmartContractAccount extends BaseSmartContractAccount {
|
|
|
157
157
|
const formattedMessage = typeof msg === "string" ? toBytes(msg) : msg;
|
|
158
158
|
return await this.validator.signMessage(formattedMessage);
|
|
159
159
|
}
|
|
160
|
+
async signTypedData(params) {
|
|
161
|
+
if (!this.validator) {
|
|
162
|
+
throw new Error("Validator not connected");
|
|
163
|
+
}
|
|
164
|
+
return await this.validator.signTypedData(params);
|
|
165
|
+
}
|
|
160
166
|
signUserOp(userOp) {
|
|
161
167
|
if (!this.validator) {
|
|
162
168
|
throw new Error("Validator not connected");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/account.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Address } from \"abitype\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n pad,\n toHex,\n} from \"viem\";\nimport { parseAbiParameters } from \"abitype\";\nimport { KernelBaseValidator, ValidatorMode } from \"./validator/base.js\";\nimport { KernelAccountAbi } from \"./abis/KernelAccountAbi.js\";\nimport { KernelFactoryAbi } from \"./abis/KernelFactoryAbi.js\";\nimport {\n type BaseSmartAccountParams,\n BaseSmartContractAccount,\n type SmartAccountSigner,\n type BatchUserOperationCallData,\n type UserOperationRequest,\n defineReadOnly,\n getChain,\n} from \"@alchemy/aa-core\";\nimport {\n BUNDLER_URL,\n ENTRYPOINT_ADDRESS,\n KERNEL_FACTORY_ADDRESS,\n KERNEL_IMPL_ADDRESS,\n MULTISEND_ADDR,\n} from \"./constants.js\";\nimport { encodeMultiSend } from \"./utils.js\";\nimport { MultiSendAbi } from \"./abis/MultiSendAbi.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { getChainId } from \"./api/index.js\";\nimport { createZeroDevPublicErc4337Client } from \"./client/create-client.js\";\nimport type { PaymasterAndBundlerProviders } from \"./paymaster/types.js\";\nimport type { KillSwitchValidator } from \"./validator/kill-switch-validator.js\";\n\nexport interface KernelSmartAccountParams<\n TTransport extends Transport | FallbackTransport = Transport\n> extends Partial<BaseSmartAccountParams<TTransport>> {\n projectId: string;\n owner: SmartAccountSigner;\n factoryAddress?: Address;\n index?: bigint;\n validator?: KernelBaseValidator;\n bundlerProvider?: PaymasterAndBundlerProviders;\n}\n\nexport function isKernelAccount(\n account: any\n): account is KernelSmartContractAccount {\n return account && account.connectValidator !== undefined;\n}\n\nexport class KernelSmartContractAccount<\n TTransport extends Transport | FallbackTransport = Transport\n> extends BaseSmartContractAccount<TTransport> {\n private owner: SmartAccountSigner;\n private readonly factoryAddress: Address;\n private readonly index: bigint;\n validator?: KernelBaseValidator;\n\n constructor(params: KernelSmartAccountParams) {\n super({\n ...params,\n entryPointAddress: params.entryPointAddress ?? ENTRYPOINT_ADDRESS,\n chain: params.chain ?? polygonMumbai,\n rpcClient: params.rpcClient ?? BUNDLER_URL,\n });\n this.index = params.index ?? 0n;\n this.owner = params.owner;\n this.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;\n this.validator = params.validator;\n }\n\n public static async init(\n params: KernelSmartAccountParams\n ): Promise<KernelSmartContractAccount> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const rpcClient =\n typeof params.rpcClient === \"string\"\n ? createZeroDevPublicErc4337Client({\n chain,\n rpcUrl: params.rpcClient ?? BUNDLER_URL,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n })\n : params.rpcClient;\n const instance = new KernelSmartContractAccount({\n ...params,\n chain,\n rpcClient,\n });\n return instance;\n }\n\n connectValidator(validator: KernelBaseValidator): this {\n defineReadOnly(this, \"validator\", validator);\n return this;\n }\n\n getValidator(): KernelBaseValidator {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator;\n }\n\n getDummySignature(): Hex {\n return \"0x00000000870fe151d548a1c527c3804866fab30abf28ed17b79d5fc5149f19ca0819fefc3c57f3da4fdf9b10fab3f2f3dca536467ae44943b9dbb8433efe7760ddd72aaa1c\";\n }\n\n async getDynamicDummySignature(\n kernelAccountAddress: Address,\n calldata: Hex\n ): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n\n const dummyECDSASig =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\n const validatorMode = await this.validator.resolveValidatorMode(\n kernelAccountAddress,\n calldata\n );\n if (validatorMode === ValidatorMode.enable) {\n const enableData = await this.validator.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSigLength = 65;\n const staticDummySig = concatHex([\n \"0x000000000000000000000000\",\n this.validator.getAddress(),\n \"0x53dd285022D1512635823952d109dB39467a457E\",\n ]);\n const pausedUntil = await (\n this.validator as KillSwitchValidator\n ).getPausedUntil();\n\n return concatHex([\n ValidatorMode.enable,\n staticDummySig,\n pad(toHex(enableDataLength), { size: 32 }),\n enableData,\n pad(toHex(enableSigLength), { size: 32 }),\n dummyECDSASig,\n pad(toHex(pausedUntil), { size: 6 }),\n dummyECDSASig,\n ]);\n }\n return concatHex([validatorMode, dummyECDSASig]);\n }\n\n async encodeExecute(target: Hex, value: bigint, data: Hex): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (target.toLowerCase() === this.accountAddress?.toLowerCase()) {\n return data;\n } else {\n return this.encodeExecuteAction(target, value, data, 0);\n }\n }\n\n async encodeBatchExecute(\n _txs: BatchUserOperationCallData\n ): Promise<`0x${string}`> {\n const multiSendCalldata = encodeFunctionData({\n abi: MultiSendAbi,\n functionName: \"multiSend\",\n args: [encodeMultiSend(_txs)],\n });\n return await this.encodeExecuteDelegate(\n MULTISEND_ADDR,\n BigInt(0),\n multiSendCalldata\n );\n }\n\n async encodeExecuteDelegate(\n target: Hex,\n value: bigint,\n data: Hex\n ): Promise<Hex> {\n return this.encodeExecuteAction(target, value, data, 1);\n }\n\n async signWithEip6492(msg: string | Uint8Array): Promise<Hex> {\n try {\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n let sig = await this.owner.signMessage(\n toBytes(hashMessage({ raw: formattedMessage }))\n );\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n sig = (encodeAbiParameters(\n parseAbiParameters(\"address, bytes, bytes\"),\n [this.factoryAddress, await this.getFactoryInitCode(), sig]\n ) +\n \"6492649264926492649264926492649264926492649264926492649264926492\") as Hex; // magic suffix\n }\n\n return sig;\n } catch (err: any) {\n console.error(\"Got Error - \", err.message);\n throw new Error(\"Message Signing with EIP6492 failed\");\n }\n }\n\n async signMessage(msg: Uint8Array | string): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n return await this.validator.signMessage(formattedMessage);\n }\n\n signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator.signUserOp(userOp);\n }\n\n protected encodeExecuteAction(\n target: Hex,\n value: bigint,\n data: Hex,\n code: number\n ): Hex {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"execute\",\n args: [target, value, data, code],\n });\n }\n protected async getAccountInitCode(): Promise<Hex> {\n return concatHex([this.factoryAddress, await this.getFactoryInitCode()]);\n }\n\n protected async getFactoryInitCode(): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n try {\n return encodeFunctionData({\n abi: KernelFactoryAbi,\n functionName: \"createAccount\",\n args: [\n KERNEL_IMPL_ADDRESS,\n encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"initialize\",\n args: [\n this.validator.getAddress(),\n await this.validator.getEnableData(),\n ],\n }),\n this.index,\n ],\n });\n } catch (err: any) {\n console.error(\"err occurred:\", err.message);\n throw new Error(\"Factory Code generation failed\");\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/account.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Address } from \"abitype\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n pad,\n toHex,\n} from \"viem\";\nimport { parseAbiParameters } from \"abitype\";\nimport { KernelBaseValidator, ValidatorMode } from \"./validator/base.js\";\nimport { KernelAccountAbi } from \"./abis/KernelAccountAbi.js\";\nimport { KernelFactoryAbi } from \"./abis/KernelFactoryAbi.js\";\nimport {\n type BaseSmartAccountParams,\n BaseSmartContractAccount,\n type SmartAccountSigner,\n type BatchUserOperationCallData,\n type UserOperationRequest,\n defineReadOnly,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n BUNDLER_URL,\n ENTRYPOINT_ADDRESS,\n KERNEL_FACTORY_ADDRESS,\n KERNEL_IMPL_ADDRESS,\n MULTISEND_ADDR,\n} from \"./constants.js\";\nimport { encodeMultiSend } from \"./utils.js\";\nimport { MultiSendAbi } from \"./abis/MultiSendAbi.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { getChainId } from \"./api/index.js\";\nimport { createZeroDevPublicErc4337Client } from \"./client/create-client.js\";\nimport type { PaymasterAndBundlerProviders } from \"./paymaster/types.js\";\nimport type { KillSwitchValidator } from \"./validator/kill-switch-validator.js\";\n\nexport interface KernelSmartAccountParams<\n TTransport extends Transport | FallbackTransport = Transport\n> extends Partial<BaseSmartAccountParams<TTransport>> {\n projectId: string;\n owner: SmartAccountSigner;\n factoryAddress?: Address;\n index?: bigint;\n validator?: KernelBaseValidator;\n bundlerProvider?: PaymasterAndBundlerProviders;\n}\n\nexport function isKernelAccount(\n account: any\n): account is KernelSmartContractAccount {\n return account && account.connectValidator !== undefined;\n}\n\nexport class KernelSmartContractAccount<\n TTransport extends Transport | FallbackTransport = Transport\n> extends BaseSmartContractAccount<TTransport> {\n private owner: SmartAccountSigner;\n private readonly factoryAddress: Address;\n private readonly index: bigint;\n validator?: KernelBaseValidator;\n\n constructor(params: KernelSmartAccountParams) {\n super({\n ...params,\n entryPointAddress: params.entryPointAddress ?? ENTRYPOINT_ADDRESS,\n chain: params.chain ?? polygonMumbai,\n rpcClient: params.rpcClient ?? BUNDLER_URL,\n });\n this.index = params.index ?? 0n;\n this.owner = params.owner;\n this.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;\n this.validator = params.validator;\n }\n\n public static async init(\n params: KernelSmartAccountParams\n ): Promise<KernelSmartContractAccount> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const rpcClient =\n typeof params.rpcClient === \"string\"\n ? createZeroDevPublicErc4337Client({\n chain,\n rpcUrl: params.rpcClient ?? BUNDLER_URL,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n })\n : params.rpcClient;\n const instance = new KernelSmartContractAccount({\n ...params,\n chain,\n rpcClient,\n });\n return instance;\n }\n\n connectValidator(validator: KernelBaseValidator): this {\n defineReadOnly(this, \"validator\", validator);\n return this;\n }\n\n getValidator(): KernelBaseValidator {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator;\n }\n\n getDummySignature(): Hex {\n return \"0x00000000870fe151d548a1c527c3804866fab30abf28ed17b79d5fc5149f19ca0819fefc3c57f3da4fdf9b10fab3f2f3dca536467ae44943b9dbb8433efe7760ddd72aaa1c\";\n }\n\n async getDynamicDummySignature(\n kernelAccountAddress: Address,\n calldata: Hex\n ): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n\n const dummyECDSASig =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\n const validatorMode = await this.validator.resolveValidatorMode(\n kernelAccountAddress,\n calldata\n );\n if (validatorMode === ValidatorMode.enable) {\n const enableData = await this.validator.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSigLength = 65;\n const staticDummySig = concatHex([\n \"0x000000000000000000000000\",\n this.validator.getAddress(),\n \"0x53dd285022D1512635823952d109dB39467a457E\",\n ]);\n const pausedUntil = await (\n this.validator as KillSwitchValidator\n ).getPausedUntil();\n\n return concatHex([\n ValidatorMode.enable,\n staticDummySig,\n pad(toHex(enableDataLength), { size: 32 }),\n enableData,\n pad(toHex(enableSigLength), { size: 32 }),\n dummyECDSASig,\n pad(toHex(pausedUntil), { size: 6 }),\n dummyECDSASig,\n ]);\n }\n return concatHex([validatorMode, dummyECDSASig]);\n }\n\n async encodeExecute(target: Hex, value: bigint, data: Hex): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (target.toLowerCase() === this.accountAddress?.toLowerCase()) {\n return data;\n } else {\n return this.encodeExecuteAction(target, value, data, 0);\n }\n }\n\n async encodeBatchExecute(\n _txs: BatchUserOperationCallData\n ): Promise<`0x${string}`> {\n const multiSendCalldata = encodeFunctionData({\n abi: MultiSendAbi,\n functionName: \"multiSend\",\n args: [encodeMultiSend(_txs)],\n });\n return await this.encodeExecuteDelegate(\n MULTISEND_ADDR,\n BigInt(0),\n multiSendCalldata\n );\n }\n\n async encodeExecuteDelegate(\n target: Hex,\n value: bigint,\n data: Hex\n ): Promise<Hex> {\n return this.encodeExecuteAction(target, value, data, 1);\n }\n\n async signWithEip6492(msg: string | Uint8Array): Promise<Hex> {\n try {\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n let sig = await this.owner.signMessage(\n toBytes(hashMessage({ raw: formattedMessage }))\n );\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n sig = (encodeAbiParameters(\n parseAbiParameters(\"address, bytes, bytes\"),\n [this.factoryAddress, await this.getFactoryInitCode(), sig]\n ) +\n \"6492649264926492649264926492649264926492649264926492649264926492\") as Hex; // magic suffix\n }\n\n return sig;\n } catch (err: any) {\n console.error(\"Got Error - \", err.message);\n throw new Error(\"Message Signing with EIP6492 failed\");\n }\n }\n\n async signMessage(msg: Uint8Array | string): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n return await this.validator.signMessage(formattedMessage);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return await this.validator.signTypedData(params);\n }\n\n signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator.signUserOp(userOp);\n }\n\n protected encodeExecuteAction(\n target: Hex,\n value: bigint,\n data: Hex,\n code: number\n ): Hex {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"execute\",\n args: [target, value, data, code],\n });\n }\n protected async getAccountInitCode(): Promise<Hex> {\n return concatHex([this.factoryAddress, await this.getFactoryInitCode()]);\n }\n\n protected async getFactoryInitCode(): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n try {\n return encodeFunctionData({\n abi: KernelFactoryAbi,\n functionName: \"createAccount\",\n args: [\n KERNEL_IMPL_ADDRESS,\n encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"initialize\",\n args: [\n this.validator.getAddress(),\n await this.validator.getEnableData(),\n ],\n }),\n this.index,\n ],\n });\n } catch (err: any) {\n console.error(\"err occurred:\", err.message);\n throw new Error(\"Factory Code generation failed\");\n }\n }\n}\n"]}
|
|
@@ -53,8 +53,7 @@ export const CHAIN_ID_TO_NODE = {
|
|
|
53
53
|
43113: `https://avalanche-fuji.infura.io/v3/${INFURA_API_KEY}`,
|
|
54
54
|
1313161554: `https://aurora-mainnet.infura.io/v3/${INFURA_API_KEY}`,
|
|
55
55
|
1313161555: `https://aurora-testnet.infura.io/v3/${INFURA_API_KEY}`,
|
|
56
|
-
56: "https://
|
|
57
|
-
97: "https://sly-indulgent-paper.bsc-testnet.quiknode.pro/ab7e00c229f5967334160958e40fd6a4d893fb93/",
|
|
56
|
+
56: "https://neat-greatest-layer.bsc.quiknode.pro/9405a499ceee314e5f2f68c9d47518d3537fce6a/",
|
|
58
57
|
8453: "https://twilight-red-tree.base-mainnet.quiknode.pro/dc6eb27bf0f917df215922488dd97f4de7d9b08e/",
|
|
59
58
|
84531: "https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596/",
|
|
60
59
|
100: "https://thrilling-fluent-film.xdai.quiknode.pro/305955cffb9868cdd95b5e3dc9775f20678ad9ac/",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,MAAM,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAQ,CAAC;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG,wCAAwC,CAAC;AACpE,MAAM,CAAC,MAAM,aAAa,GAAG,qCAAqC,CAAC;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAQ,4CAA4C,CAAC;AAChF,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAC/D,MAAM,CAAC,MAAM,OAAO,GAAG,8BAA8B,CAAC;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAClC,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GACjC,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,4CAA4C,CAAC;AAChF,MAAM,CAAC,MAAM,6BAA6B,GACxC,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,4CAA4C,CAAC;AAC/E,MAAM,CAAC,MAAM,eAAe,GAC1B,sIAAsI,CAAC;AACzI,MAAM,CAAC,MAAM,oCAAoC,GAC/C,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,4CAA4C,CAAC;AAEzE,MAAM,CAAC,MAAM,sBAAsB,GAAuB;IACxD,IAAI,EAAE;QACJ,CAAC,EAAE,4CAA4C;QAE/C,GAAG,EAAE,4CAA4C;QAGjD,KAAK,EAAE,4CAA4C;QAEnD,KAAK,EAAE,4CAA4C;KAIpD;IACD,IAAI,EAAE;QACJ,CAAC,EAAE,4CAA4C;KAChD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAA8B;IAE9D,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAGzD,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAGzD,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAG1D,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAG5D,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAG5D,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC;IAE/D,4CAA4C,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;CACpE,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAiB;IAClE,CAAC,OAAO,CAAC,EAAE,EAAE,YAAe,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,kCAAkC,CAAC;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD,CAAC,EAAE,gCAAgC,cAAc,EAAE;IACnD,CAAC,EAAE,+BAA+B,cAAc,EAAE;IAClD,GAAG,EAAE,wCAAwC,cAAc,EAAE;IAC7D,KAAK,EAAE,uCAAuC,cAAc,EAAE;IAC9D,EAAE,EAAE,yCAAyC,cAAc,EAAE;IAC7D,GAAG,EAAE,wCAAwC,cAAc,EAAE;IAC7D,KAAK,EAAE,yCAAyC,cAAc,EAAE;IAEhE,MAAM,EAAE,wCAAwC,cAAc,EAAE;IAChE,KAAK,EAAE,0CAA0C,cAAc,EAAE;IACjE,KAAK,EAAE,uCAAuC,cAAc,EAAE;IAC9D,UAAU,EAAE,uCAAuC,cAAc,EAAE;IACnE,UAAU,EAAE,uCAAuC,cAAc,EAAE;IACnE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseUnits, type Hex } from \"viem\";\nimport type { IGasTokenAddresses } from \"./paymaster/types.js\";\nimport { polygon } from \"viem/chains\";\n\nexport const DEFAULT_SEND_TX_MAX_RETRIES = 3;\nexport const DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 1_80_000; // 3 minutes\nexport const BUNDLER_URL = \"https://v0-6-meta-bundler.onrender.com\";\nexport const PAYMASTER_URL = \"https://v0-6-paymaster.onrender.com\";\nexport const ENTRYPOINT_ADDRESS: Hex =\n \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\";\nexport const MULTISEND_ADDR: Hex = \"0x8ae01fcf7c655655ff2c6ef907b8b4718ab4e17c\";\nexport const BACKEND_URL = \"https://backend-vikp.onrender.com\";\nexport const API_URL = \"https://prod-api.zerodev.app\";\nexport const ECDSA_VALIDATOR_ADDRESS =\n \"0xd9AB5096a832b9ce79914329DAEE236f8Eea0390\";\nexport const KERNEL_FACTORY_ADDRESS =\n \"0x5de4839a76cf55d0c90e2061ef4386d962E15ae3\";\nexport const KERNEL_IMPL_ADDRESS = \"0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb\";\nexport const KILL_SWITCH_VALIDATOR_ADDRESS =\n \"0x2db0DbfDf90Dbe2859158Aa71db1FcDCb3E579c8\";\nexport const KILL_SWITCH_ACTION = \"0xf5aa34DD2cba311947e143183ED325A4A8C674Af\";\nexport const DUMMY_ECDSA_SIG =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\nexport const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =\n \"0xe149290800De29D4b0BF9dB82c508255D81902E6\";\nexport const TOKEN_ACTION = \"0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1\";\n\nexport const gasTokenChainAddresses: IGasTokenAddresses = {\n USDC: {\n 1: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n // 5: \"0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557\",\n 137: \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n // 80001: \"\",\n // 420: \"0x7F5c764cBc14f9669B88837ca1490cCa17c31607\",\n 42161: \"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\n // 421613: \"\",\n 43114: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n // 43113: \"\",\n // 56: \"\",\n // 97: \"\"\n },\n PEPE: {\n 1: \"0x6982508145454Ce325dDbE47a25d4ec3d2311933\",\n },\n};\n\nexport const ERC20_APPROVAL_AMOUNT: { [key: string]: bigint } = {\n // ETH\n [gasTokenChainAddresses[\"USDC\"][1]]: parseUnits(\"100\", 6),\n\n // Goerli\n [gasTokenChainAddresses[\"USDC\"][5]]: parseUnits(\"100\", 6),\n\n // Polygon\n [gasTokenChainAddresses[\"USDC\"][137]]: parseUnits(\"10\", 6),\n\n // Arbitrum\n [gasTokenChainAddresses[\"USDC\"][42161]]: parseUnits(\"10\", 6),\n\n // Avalanche\n [gasTokenChainAddresses[\"USDC\"][43114]]: parseUnits(\"10\", 6),\n\n // ETH\n [gasTokenChainAddresses[\"PEPE\"][1]]: parseUnits(\"50000000\", 18),\n\n \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\": parseUnits(\"100\", 18),\n};\n\nexport const minPriorityFeePerBidDefaults = new Map<number, bigint>([\n [polygon.id, 30_000_000_000n],\n]);\n\nexport const INFURA_API_KEY = \"f36f7f706a58477884ce6fe89165666c\";\nexport const CHAIN_ID_TO_NODE: { [key: number]: string } = {\n 1: `https://mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 5: `https://goerli.infura.io/v3/${INFURA_API_KEY}`,\n 137: `https://polygon-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 80001: `https://polygon-mumbai.infura.io/v3/${INFURA_API_KEY}`,\n 10: `https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 420: `https://optimism-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 42161: `https://arbitrum-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n // 42161: 'https://evocative-stylish-dinghy.arbitrum-mainnet.discover.quiknode.pro/80b526d14fa9fd9a8b0db1e65554acaf00c6a1ab/',\n 421613: `https://arbitrum-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 43114: `https://avalanche-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 43113: `https://avalanche-fuji.infura.io/v3/${INFURA_API_KEY}`,\n 1313161554: `https://aurora-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 1313161555: `https://aurora-testnet.infura.io/v3/${INFURA_API_KEY}`,\n 56: \"https://neat-greatest-layer.bsc.quiknode.pro/9405a499ceee314e5f2f68c9d47518d3537fce6a/\",\n 8453: \"https://twilight-red-tree.base-mainnet.quiknode.pro/dc6eb27bf0f917df215922488dd97f4de7d9b08e/\",\n 84531:\n \"https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596/\",\n 100: \"https://thrilling-fluent-film.xdai.quiknode.pro/305955cffb9868cdd95b5e3dc9775f20678ad9ac/\",\n 10200: \"https://nd-810-853-201.p2pify.com/e828b09f0d43591de96c297b3f36fffd\",\n};\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type AccountMiddlewareFn, type FeeDataMiddleware, type GasEstimatorMiddleware, type PaymasterAndDataMiddleware, type PublicErc4337Client, type SignTypedDataParams } from "@alchemy/aa-core";
|
|
2
|
+
import { Signer, type TypedDataSigner, type TypedDataDomain, type TypedDataField } from "@ethersproject/abstract-signer";
|
|
3
|
+
import type { Deferrable } from "@ethersproject/properties";
|
|
4
|
+
import { type TransactionRequest, type TransactionResponse } from "@ethersproject/providers";
|
|
5
|
+
import { ZeroDevEthersProvider } from "./ethers-provider.js";
|
|
6
|
+
import type { SupportedValidators } from "../validator/types.js";
|
|
7
|
+
export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends Signer implements TypedDataSigner {
|
|
8
|
+
readonly provider: ZeroDevEthersProvider<V>;
|
|
9
|
+
private account?;
|
|
10
|
+
sendUserOperation: (data: import("@alchemy/aa-core").UserOperationCallData | import("@alchemy/aa-core").BatchUserOperationCallData, overrides?: import("@alchemy/aa-core").UserOperationOverrides | undefined) => Promise<import("@alchemy/aa-core").SendUserOperationResult>;
|
|
11
|
+
waitForUserOperationTransaction: (hash: `0x${string}`) => Promise<`0x${string}`>;
|
|
12
|
+
constructor(provider: ZeroDevEthersProvider<V>);
|
|
13
|
+
getAddress(): Promise<string>;
|
|
14
|
+
signMessage(message: string | Uint8Array): Promise<string>;
|
|
15
|
+
signTypedData(params: SignTypedDataParams): Promise<string>;
|
|
16
|
+
_signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
|
|
17
|
+
withPaymasterMiddleware: (overrides: {
|
|
18
|
+
dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
|
|
19
|
+
paymasterDataMiddleware?: PaymasterAndDataMiddleware;
|
|
20
|
+
}) => this;
|
|
21
|
+
withGasEstimator: (override: GasEstimatorMiddleware) => this;
|
|
22
|
+
withFeeDataGetter: (override: FeeDataMiddleware) => this;
|
|
23
|
+
withCustomMiddleware: (override: AccountMiddlewareFn) => this;
|
|
24
|
+
sendTransaction(transaction: Deferrable<TransactionRequest>): Promise<TransactionResponse>;
|
|
25
|
+
signTransaction(_transaction: Deferrable<TransactionRequest>): Promise<string>;
|
|
26
|
+
getPublicErc4337Client(): PublicErc4337Client;
|
|
27
|
+
connect(provider: ZeroDevEthersProvider<V>): ZeroDevAccountSigner<V>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { BaseSmartContractAccount, resolveProperties, } from "@alchemy/aa-core";
|
|
2
|
+
import { Signer, } from "@ethersproject/abstract-signer";
|
|
3
|
+
import { hexlify } from "@ethersproject/bytes";
|
|
4
|
+
import { _TypedDataEncoder } from "@ethersproject/hash";
|
|
5
|
+
import {} from "@ethersproject/providers";
|
|
6
|
+
import { ZeroDevEthersProvider } from "./ethers-provider.js";
|
|
7
|
+
const hexlifyOptional = (value) => {
|
|
8
|
+
if (value == null) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
return hexlify(value);
|
|
12
|
+
};
|
|
13
|
+
export class ZeroDevAccountSigner extends Signer {
|
|
14
|
+
constructor(provider) {
|
|
15
|
+
super();
|
|
16
|
+
Object.defineProperty(this, "provider", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: provider
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(this, "account", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: void 0
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(this, "sendUserOperation", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: void 0
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(this, "waitForUserOperationTransaction", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
writable: true,
|
|
38
|
+
value: void 0
|
|
39
|
+
});
|
|
40
|
+
Object.defineProperty(this, "withPaymasterMiddleware", {
|
|
41
|
+
enumerable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
writable: true,
|
|
44
|
+
value: (overrides) => {
|
|
45
|
+
this.provider.withPaymasterMiddleware(overrides);
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
Object.defineProperty(this, "withGasEstimator", {
|
|
50
|
+
enumerable: true,
|
|
51
|
+
configurable: true,
|
|
52
|
+
writable: true,
|
|
53
|
+
value: (override) => {
|
|
54
|
+
this.provider.withGasEstimator(override);
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
Object.defineProperty(this, "withFeeDataGetter", {
|
|
59
|
+
enumerable: true,
|
|
60
|
+
configurable: true,
|
|
61
|
+
writable: true,
|
|
62
|
+
value: (override) => {
|
|
63
|
+
this.provider.withFeeDataGetter(override);
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
Object.defineProperty(this, "withCustomMiddleware", {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
configurable: true,
|
|
70
|
+
writable: true,
|
|
71
|
+
value: (override) => {
|
|
72
|
+
this.provider.withCustomMiddleware(override);
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
this.account = this.provider.accountProvider.account;
|
|
77
|
+
this.sendUserOperation =
|
|
78
|
+
this.provider.accountProvider.sendUserOperation.bind(this.provider.accountProvider);
|
|
79
|
+
this.waitForUserOperationTransaction =
|
|
80
|
+
this.provider.accountProvider.waitForUserOperationTransaction.bind(this.provider.accountProvider);
|
|
81
|
+
}
|
|
82
|
+
getAddress() {
|
|
83
|
+
if (!this.account) {
|
|
84
|
+
throw new Error("connect the signer to a provider that has a connected account");
|
|
85
|
+
}
|
|
86
|
+
return this.account.getAddress();
|
|
87
|
+
}
|
|
88
|
+
signMessage(message) {
|
|
89
|
+
if (!this.account) {
|
|
90
|
+
throw new Error("connect the signer to a provider that has a connected account");
|
|
91
|
+
}
|
|
92
|
+
return this.account.signMessage(message);
|
|
93
|
+
}
|
|
94
|
+
signTypedData(params) {
|
|
95
|
+
if (!this.account) {
|
|
96
|
+
throw new Error("connect the signer to a provider that has a connected account");
|
|
97
|
+
}
|
|
98
|
+
if (params.types) {
|
|
99
|
+
delete params.types["EIP712Domain"];
|
|
100
|
+
}
|
|
101
|
+
return this.account.signTypedData(params);
|
|
102
|
+
}
|
|
103
|
+
_signTypedData(domain, types, value) {
|
|
104
|
+
if (!this.account) {
|
|
105
|
+
throw new Error("connect the signer to a provider that has a connected account");
|
|
106
|
+
}
|
|
107
|
+
const params = _TypedDataEncoder.getPayload(domain, types, value);
|
|
108
|
+
if (params.types) {
|
|
109
|
+
delete params.types["EIP712Domain"];
|
|
110
|
+
}
|
|
111
|
+
return this.signTypedData(params);
|
|
112
|
+
}
|
|
113
|
+
async sendTransaction(transaction) {
|
|
114
|
+
const resolved = await resolveProperties(transaction);
|
|
115
|
+
const txHash = await this.provider.accountProvider.sendTransaction({
|
|
116
|
+
from: (await this.getAddress()),
|
|
117
|
+
to: resolved.to,
|
|
118
|
+
data: hexlifyOptional(resolved.data),
|
|
119
|
+
});
|
|
120
|
+
return this.provider.getTransaction(txHash);
|
|
121
|
+
}
|
|
122
|
+
signTransaction(_transaction) {
|
|
123
|
+
throw new Error("Transaction signing is not supported, use sendUserOperation instead");
|
|
124
|
+
}
|
|
125
|
+
getPublicErc4337Client() {
|
|
126
|
+
return this.provider.getPublicErc4337Client();
|
|
127
|
+
}
|
|
128
|
+
connect(provider) {
|
|
129
|
+
return new ZeroDevAccountSigner(provider);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=account-signer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-signer.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BaseSmartContractAccount,\n resolveProperties,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n Signer,\n type TypedDataSigner,\n type TypedDataDomain,\n type TypedDataField,\n} from \"@ethersproject/abstract-signer\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { _TypedDataEncoder } from \"@ethersproject/hash\";\nimport type { Deferrable } from \"@ethersproject/properties\";\nimport {\n type TransactionRequest,\n type TransactionResponse,\n} from \"@ethersproject/providers\";\nimport { ZeroDevEthersProvider } from \"./ethers-provider.js\";\nimport type { SupportedValidators } from \"../validator/types.js\";\n\nconst hexlifyOptional = (value: any): `0x${string}` | undefined => {\n if (value == null) {\n return undefined;\n }\n\n return hexlify(value) as `0x${string}`;\n};\n\nexport class ZeroDevAccountSigner<V extends SupportedValidators>\n extends Signer\n implements TypedDataSigner\n{\n private account?: BaseSmartContractAccount;\n\n sendUserOperation;\n waitForUserOperationTransaction;\n\n constructor(readonly provider: ZeroDevEthersProvider<V>) {\n super();\n this.account = this.provider.accountProvider.account;\n\n this.sendUserOperation =\n this.provider.accountProvider.sendUserOperation.bind(\n this.provider.accountProvider\n );\n this.waitForUserOperationTransaction =\n this.provider.accountProvider.waitForUserOperationTransaction.bind(\n this.provider.accountProvider\n );\n }\n\n getAddress(): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.getAddress();\n }\n\n signMessage(message: string | Uint8Array): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.signMessage(message);\n }\n\n signTypedData(params: SignTypedDataParams): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.account.signTypedData(params);\n }\n\n _signTypedData(\n domain: TypedDataDomain,\n types: Record<string, Array<TypedDataField>>,\n value: Record<string, any>\n ): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n const params = _TypedDataEncoder.getPayload(\n domain,\n types,\n value\n ) as SignTypedDataParams;\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.signTypedData(params);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.provider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.provider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.provider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.provider.withCustomMiddleware(override);\n return this;\n };\n\n async sendTransaction(\n transaction: Deferrable<TransactionRequest>\n ): Promise<TransactionResponse> {\n const resolved = await resolveProperties(transaction);\n const txHash = await this.provider.accountProvider.sendTransaction({\n // TODO: need to support gas fields as well\n from: (await this.getAddress()) as `0x${string}`,\n to: resolved.to as `0x${string}` | undefined,\n data: hexlifyOptional(resolved.data),\n });\n\n return this.provider.getTransaction(txHash);\n }\n\n signTransaction(\n _transaction: Deferrable<TransactionRequest>\n ): Promise<string> {\n throw new Error(\n \"Transaction signing is not supported, use sendUserOperation instead\"\n );\n }\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.provider.getPublicErc4337Client();\n }\n\n connect(provider: ZeroDevEthersProvider<V>): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(provider);\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SmartAccountProvider, type HttpTransport, BaseSmartContractAccount, type AccountMiddlewareFn, type FeeDataMiddleware, type GasEstimatorMiddleware, type PaymasterAndDataMiddleware, type PublicErc4337Client } from "@alchemy/aa-core";
|
|
2
|
-
import {
|
|
2
|
+
import { ZeroDevAccountSigner } from "./account-signer.js";
|
|
3
3
|
import { JsonRpcProvider } from "@ethersproject/providers";
|
|
4
4
|
import type { SupportedValidators } from "../validator/types.js";
|
|
5
5
|
import type { ValidatorProviderParamsMap } from "../validator-provider/types.js";
|
|
@@ -8,8 +8,8 @@ export declare class ZeroDevEthersProvider<V extends SupportedValidators> extend
|
|
|
8
8
|
constructor(validatorType: V, params: ValidatorProviderParamsMap[V]);
|
|
9
9
|
static init<V extends SupportedValidators>(validatorType: V, params: ValidatorProviderParamsMap[V]): Promise<ZeroDevEthersProvider<V>>;
|
|
10
10
|
send(method: string, params: any[]): Promise<any>;
|
|
11
|
-
connectToAccount(fn: (rpcClient: PublicErc4337Client) => BaseSmartContractAccount):
|
|
12
|
-
getAccountSigner():
|
|
11
|
+
connectToAccount(fn: (rpcClient: PublicErc4337Client) => BaseSmartContractAccount): ZeroDevAccountSigner<V>;
|
|
12
|
+
getAccountSigner(): ZeroDevAccountSigner<V>;
|
|
13
13
|
withPaymasterMiddleware: (overrides: {
|
|
14
14
|
dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
|
|
15
15
|
paymasterDataMiddleware?: PaymasterAndDataMiddleware;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getChainId } from "../api/index.js";
|
|
2
2
|
import { SmartAccountProvider, getChain, BaseSmartContractAccount, defineReadOnly, } from "@alchemy/aa-core";
|
|
3
|
-
import {
|
|
3
|
+
import { ZeroDevAccountSigner } from "./account-signer.js";
|
|
4
4
|
import { JsonRpcProvider } from "@ethersproject/providers";
|
|
5
5
|
import { ValidatorProviders } from "../validator-provider/index.js";
|
|
6
6
|
import { withZeroDevPaymasterAndData } from "../middleware/paymaster.js";
|
|
@@ -81,7 +81,7 @@ export class ZeroDevEthersProvider extends JsonRpcProvider {
|
|
|
81
81
|
return this.getAccountSigner();
|
|
82
82
|
}
|
|
83
83
|
getAccountSigner() {
|
|
84
|
-
return new
|
|
84
|
+
return new ZeroDevAccountSigner(this);
|
|
85
85
|
}
|
|
86
86
|
getPublicErc4337Client() {
|
|
87
87
|
return this.accountProvider.rpcClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethers-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/ethers-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,oBAAoB,EACpB,QAAQ,EAER,wBAAwB,EACxB,cAAc,GAMf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ethers-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/ethers-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { getChainId } from \"../api/index.js\";\nimport {\n SmartAccountProvider,\n getChain,\n type HttpTransport,\n BaseSmartContractAccount,\n defineReadOnly,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n} from \"@alchemy/aa-core\";\nimport { ZeroDevAccountSigner } from \"./account-signer.js\";\nimport { JsonRpcProvider } from \"@ethersproject/providers\";\nimport type { SupportedValidators } from \"../validator/types.js\";\nimport type { ValidatorProviderParamsMap } from \"../validator-provider/types.js\";\nimport { ValidatorProviders } from \"../validator-provider/index.js\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\n\nexport class ZeroDevEthersProvider<\n V extends SupportedValidators\n> extends JsonRpcProvider {\n readonly accountProvider: SmartAccountProvider<HttpTransport>;\n constructor(validatorType: V, params: ValidatorProviderParamsMap[V]) {\n super();\n let accountProvider = new ValidatorProviders[validatorType](params);\n if (params.usePaymaster === undefined || params.usePaymaster) {\n accountProvider = withZeroDevPaymasterAndData(\n accountProvider,\n params.opts?.paymasterConfig ?? { policy: \"VERIFYING_PAYMASTER\" }\n ) as typeof accountProvider;\n }\n this.accountProvider = accountProvider;\n }\n\n public static async init<V extends SupportedValidators>(\n validatorType: V,\n params: ValidatorProviderParamsMap[V]\n ): Promise<ZeroDevEthersProvider<V>> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new ZeroDevEthersProvider(validatorType, {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n },\n });\n\n return instance;\n }\n\n /**\n * Rewrites the send method to use the account provider's EIP-1193\n * compliant request method\n *\n * @param method - the RPC method to call\n * @param params - the params required by the RPC method\n * @returns the result of the RPC call\n */\n send(method: string, params: any[]): Promise<any> {\n return this.accountProvider.request({ method, params });\n }\n\n /**\n * Connects the Provider to an Account and returns a Signer\n *\n * @param fn - a function that takes the account provider's rpcClient and returns a BaseSmartContractAccount\n * @returns an {@link ZeroDevAccountSigner} that can be used to sign and send user operations\n */\n connectToAccount(\n fn: (rpcClient: PublicErc4337Client) => BaseSmartContractAccount\n ): ZeroDevAccountSigner<V> {\n defineReadOnly(this, \"accountProvider\", this.accountProvider.connect(fn));\n return this.getAccountSigner();\n }\n\n /**\n * @returns an {@link ZeroDevAccountSigner} using this as the underlying provider\n */\n getAccountSigner(): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(this);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.accountProvider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.accountProvider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.accountProvider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.accountProvider.withCustomMiddleware(override);\n return this;\n };\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.accountProvider.rpcClient;\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type SmartAccountSigner, type UserOperationRequest } from "@alchemy/aa-core";
|
|
1
|
+
import { type SignTypedDataParams, type SmartAccountSigner, type UserOperationRequest } from "@alchemy/aa-core";
|
|
2
2
|
import { type Chain, type Hex, type Address, type PublicClient, type Transport } from "viem";
|
|
3
3
|
import type { PaymasterAndBundlerProviders } from "../paymaster/types.js";
|
|
4
4
|
export declare enum ValidatorMode {
|
|
@@ -39,6 +39,7 @@ export declare abstract class KernelBaseValidator {
|
|
|
39
39
|
abstract encodeDisable(enableData: Hex): Hex;
|
|
40
40
|
abstract getEnableData(): Promise<Hex>;
|
|
41
41
|
abstract signMessage(message: Uint8Array | string | Hex): Promise<Hex>;
|
|
42
|
+
abstract signTypedData(params: SignTypedDataParams): Promise<Hex>;
|
|
42
43
|
abstract signUserOp(userOp: UserOperationRequest): Promise<Hex>;
|
|
43
44
|
abstract signer(): Promise<SmartAccountSigner>;
|
|
44
45
|
abstract getDummyUserOpSignature(): Promise<Hex>;
|