@zerodev/sdk 4.3.3 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/kernel-zerodev/account.js +1 -1
- package/dist/cjs/kernel-zerodev/account.js.map +1 -1
- package/dist/cjs/kernel-zerodev/constants.d.ts +1 -1
- 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/ethers-provider.js +4 -2
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/middleware/gas-estimator.js +11 -5
- package/dist/cjs/kernel-zerodev/middleware/gas-estimator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.d.ts +2 -2
- package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js +48 -93
- package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js +2 -2
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js.map +1 -1
- package/dist/cjs/kernel-zerodev/paymaster/types.d.ts +1 -1
- package/dist/cjs/kernel-zerodev/paymaster/types.js.map +1 -1
- package/dist/cjs/kernel-zerodev/provider.js +19 -9
- package/dist/cjs/kernel-zerodev/provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/utils/custom-chains.d.ts +58 -0
- package/dist/cjs/kernel-zerodev/utils/custom-chains.js +57 -0
- package/dist/cjs/kernel-zerodev/utils/custom-chains.js.map +1 -0
- package/dist/cjs/kernel-zerodev/utils.d.ts +2 -0
- package/dist/cjs/kernel-zerodev/utils.js +35 -1
- package/dist/cjs/kernel-zerodev/utils.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js +1 -1
- package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js +1 -1
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js +1 -1
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/recovery-validator.js +1 -2
- package/dist/cjs/kernel-zerodev/validator/recovery-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.js +1 -1
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/base.js +2 -1
- package/dist/cjs/kernel-zerodev/validator-provider/base.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js +3 -3
- package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js +3 -3
- package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js +3 -3
- package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/recovery-provider.js +2 -3
- package/dist/cjs/kernel-zerodev/validator-provider/recovery-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.js +2 -2
- package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/account.js +2 -2
- package/dist/esm/kernel-zerodev/account.js.map +1 -1
- package/dist/esm/kernel-zerodev/constants.d.ts +1 -1
- package/dist/esm/kernel-zerodev/constants.js +3 -1
- package/dist/esm/kernel-zerodev/constants.js.map +1 -1
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js +4 -2
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/middleware/gas-estimator.js +11 -5
- package/dist/esm/kernel-zerodev/middleware/gas-estimator.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/getCustodialOwner.d.ts +2 -2
- package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js +48 -70
- package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js +2 -2
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js.map +1 -1
- package/dist/esm/kernel-zerodev/paymaster/types.d.ts +1 -1
- package/dist/esm/kernel-zerodev/paymaster/types.js.map +1 -1
- package/dist/esm/kernel-zerodev/provider.js +19 -9
- package/dist/esm/kernel-zerodev/provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/utils/custom-chains.d.ts +58 -0
- package/dist/esm/kernel-zerodev/utils/custom-chains.js +54 -0
- package/dist/esm/kernel-zerodev/utils/custom-chains.js.map +1 -0
- package/dist/esm/kernel-zerodev/utils.d.ts +2 -0
- package/dist/esm/kernel-zerodev/utils.js +10 -0
- package/dist/esm/kernel-zerodev/utils.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js +2 -2
- package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js +2 -2
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js +2 -2
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/recovery-validator.js +2 -2
- package/dist/esm/kernel-zerodev/validator/recovery-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/session-key-validator.js +2 -2
- package/dist/esm/kernel-zerodev/validator/session-key-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/base.js +2 -1
- package/dist/esm/kernel-zerodev/validator-provider/base.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/recovery-provider.js +2 -2
- package/dist/esm/kernel-zerodev/validator-provider/recovery-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.js +2 -2
- package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.js.map +1 -1
- package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/constants.d.ts +1 -1
- package/dist/types/kernel-zerodev/constants.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/middleware/gas-estimator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/getCustodialOwner.d.ts +2 -2
- package/dist/types/kernel-zerodev/owner/getCustodialOwner.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/paymaster/types.d.ts +1 -1
- package/dist/types/kernel-zerodev/paymaster/types.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/utils/custom-chains.d.ts +59 -0
- package/dist/types/kernel-zerodev/utils/custom-chains.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/ecdsa-validator.d.ts.map +1 -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.map +1 -1
- package/dist/types/kernel-zerodev/validator/recovery-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/base.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/recovery-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/session-key-provider.d.ts.map +1 -1
- package/package.json +2 -3
- package/src/kernel-zerodev/__tests__/config/index.ts +1 -0
- package/src/kernel-zerodev/account.ts +1 -2
- package/src/kernel-zerodev/constants.ts +4 -1
- package/src/kernel-zerodev/ethers-provider/ethers-provider.ts +3 -2
- package/src/kernel-zerodev/middleware/gas-estimator.ts +13 -7
- package/src/kernel-zerodev/owner/getCustodialOwner.ts +63 -175
- package/src/kernel-zerodev/owner/passkey/utils.ts +2 -2
- package/src/kernel-zerodev/paymaster/types.ts +5 -1
- package/src/kernel-zerodev/provider.ts +22 -9
- package/src/kernel-zerodev/utils/custom-chains.ts +55 -0
- package/src/kernel-zerodev/utils.ts +21 -0
- package/src/kernel-zerodev/validator/ecdsa-validator.ts +1 -2
- package/src/kernel-zerodev/validator/erc165-session-key-validator.ts +1 -2
- package/src/kernel-zerodev/validator/kill-switch-validator.ts +1 -2
- package/src/kernel-zerodev/validator/recovery-validator.ts +1 -2
- package/src/kernel-zerodev/validator/session-key-validator.ts +1 -2
- package/src/kernel-zerodev/validator-provider/base.ts +2 -1
- package/src/kernel-zerodev/validator-provider/ecdsa-provider.ts +1 -1
- package/src/kernel-zerodev/validator-provider/erc165-session-key-provider.ts +1 -1
- package/src/kernel-zerodev/validator-provider/kill-switch-provider.ts +1 -1
- package/src/kernel-zerodev/validator-provider/recovery-provider.ts +2 -6
- package/src/kernel-zerodev/validator-provider/session-key-provider.ts +1 -2
|
@@ -70,7 +70,7 @@ class KernelSmartContractAccount extends aa_core_1.BaseSmartContractAccount {
|
|
|
70
70
|
if (!chainId) {
|
|
71
71
|
throw new Error("ChainId not found");
|
|
72
72
|
}
|
|
73
|
-
const chain = (0,
|
|
73
|
+
const chain = (0, utils_js_1.getChain)(chainId);
|
|
74
74
|
const rpcClient = typeof params.rpcClient === "string"
|
|
75
75
|
? (0, create_client_js_1.createZeroDevPublicErc4337Client)({
|
|
76
76
|
chain,
|
|
@@ -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 encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n} from \"viem\";\nimport { KernelBaseValidator } from \"./validator/base.js\";\nimport { KernelAccountAbi } from \"./abis/KernelAccountAbi.js\";\nimport { KernelFactoryAbi } from \"./abis/KernelFactoryAbi.js\";\nimport {\n type BaseSmartAccountParams,\n BaseSmartContractAccount,\n type BatchUserOperationCallData,\n type UserOperationRequest,\n defineReadOnly,\n getChain,\n type SignTypedDataParams,\n wrapWith6492,\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\";\n\nexport enum DeploymentState {\n UNDEFINED = \"0x0\",\n NOT_DEPLOYED = \"0x1\",\n DEPLOYED = \"0x2\",\n}\nexport interface KernelSmartAccountParams<\n TTransport extends Transport | FallbackTransport = Transport\n> extends Partial<BaseSmartAccountParams<TTransport>> {\n projectId: string;\n factoryAddress?: Address;\n index?: bigint;\n validator?: KernelBaseValidator;\n bundlerProvider?: PaymasterAndBundlerProviders;\n defaultValidator?: KernelBaseValidator;\n initCode?: Hex;\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 readonly factoryAddress: Address;\n private readonly index: bigint;\n private initCode?: Hex;\n validator?: KernelBaseValidator;\n defaultValidator?: 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.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;\n this.validator = params.validator;\n this.defaultValidator = params.defaultValidator;\n this.initCode = params.initCode;\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 getInitCode(): Promise<Hex> {\n if (this.deploymentState === DeploymentState.DEPLOYED) {\n return \"0x\";\n }\n const contractCode = await this.rpcProvider.getContractCode(\n await this.getAddress()\n );\n\n if ((contractCode?.length ?? 0) > 2) {\n this.deploymentState = DeploymentState.DEPLOYED;\n return \"0x\";\n } else {\n this.deploymentState = DeploymentState.NOT_DEPLOYED;\n }\n\n return this.initCode ?? this.getAccountInitCode();\n }\n\n getIndex(): bigint {\n return this.index;\n }\n\n async approvePlugin() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (this.defaultValidator && !this.validator.getEnableSignature()) {\n const { executor, selector, validAfter, validUntil } =\n this.validator.getPluginValidatorData();\n const enableSig = await this.defaultValidator.approveExecutor(\n await this.getAddress(),\n selector,\n executor,\n validUntil,\n validAfter,\n this.validator\n );\n this.validator.setEnableSignature(enableSig);\n }\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 (\n target.toLowerCase() === (await this.getAddress()).toLowerCase() &&\n this.validator.shouldDelegateViaFallback()\n ) {\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 kernelImplAddr = await this.getKernelImplementationAddess();\n const initCode = await this.getInitCode();\n // [TODO] - Remove this check once the kernel implementation is updated\n // Also, remove the check for the hardcoded kernel implementation address\n const shouldUseMultiSend =\n kernelImplAddr?.toLowerCase() !== KERNEL_IMPL_ADDRESS.toLowerCase() &&\n kernelImplAddr?.toLowerCase() !==\n \"0x8dD4DBB54d8A8Cf0DE6F9CCC4609470A30EfF18C\".toLowerCase() &&\n initCode === \"0x\";\n if (shouldUseMultiSend) {\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 return await this.encodeExecuteBatchAction(_txs);\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 encodeSetExection() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const { executor, selector, validAfter, validUntil } =\n await this.validator.getPluginValidatorData();\n const enableData = await this.validator.getEnableData();\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"setExecution\",\n args: [\n selector,\n executor,\n this.validator.validatorAddress,\n validUntil,\n validAfter,\n enableData,\n ],\n });\n }\n\n async encodeUgradeTo() {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"upgradeTo\",\n args: [KERNEL_IMPL_ADDRESS],\n });\n }\n\n async getKernelImplementationAddess(): Promise<Hex | undefined> {\n try {\n const strgAddr = await this.rpcProvider.getStorageAt({\n address: await this.getAddress(),\n slot: \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\",\n });\n return strgAddr ? ((\"0x\" + strgAddr.slice(26)) as Hex) : strgAddr;\n } catch (error) {\n return;\n }\n }\n\n async signMessageWith6492(msg: string | Uint8Array): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n let signature = await this.validator.signMessage(\n toBytes(hashMessage({ raw: formattedMessage }))\n );\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n signature = wrapWith6492({\n factoryAddress: this.factoryAddress,\n initCode: await this.getFactoryInitCode(),\n signature,\n });\n }\n\n return signature;\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 signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n let signature = await this.validator.signTypedData(params);\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n signature = wrapWith6492({\n factoryAddress: this.factoryAddress,\n initCode: await this.getFactoryInitCode(),\n signature,\n });\n }\n\n return signature;\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\n protected encodeExecuteBatchAction(_txs: BatchUserOperationCallData): Hex {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"executeBatch\",\n args: [\n _txs.map((tx) => ({\n to: tx.target,\n value: tx.value ?? 0n,\n data: tx.data,\n })),\n ],\n });\n }\n\n protected async getAccountInitCode(): Promise<Hex> {\n return concatHex([this.factoryAddress, await this.getFactoryInitCode()]);\n }\n\n async getNonce(): Promise<bigint> {\n if (!(await this.isAccountDeployed())) {\n return 0n;\n }\n if (!this.validator) {\n throw Error(\"Validator unintialized\");\n }\n const address = await this.getAddress();\n const key = this.validator.getNonceKey();\n return this.entryPoint.read.getNonce([address, key]);\n }\n\n protected async getFactoryInitCode(): Promise<Hex> {\n const validator = this.defaultValidator ?? this.validator;\n if (!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: [validator.getAddress(), await validator.getEnableData()],\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 encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n} from \"viem\";\nimport { KernelBaseValidator } from \"./validator/base.js\";\nimport { KernelAccountAbi } from \"./abis/KernelAccountAbi.js\";\nimport { KernelFactoryAbi } from \"./abis/KernelFactoryAbi.js\";\nimport {\n type BaseSmartAccountParams,\n BaseSmartContractAccount,\n type BatchUserOperationCallData,\n type UserOperationRequest,\n defineReadOnly,\n type SignTypedDataParams,\n wrapWith6492,\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, getChain } 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\";\n\nexport enum DeploymentState {\n UNDEFINED = \"0x0\",\n NOT_DEPLOYED = \"0x1\",\n DEPLOYED = \"0x2\",\n}\nexport interface KernelSmartAccountParams<\n TTransport extends Transport | FallbackTransport = Transport\n> extends Partial<BaseSmartAccountParams<TTransport>> {\n projectId: string;\n factoryAddress?: Address;\n index?: bigint;\n validator?: KernelBaseValidator;\n bundlerProvider?: PaymasterAndBundlerProviders;\n defaultValidator?: KernelBaseValidator;\n initCode?: Hex;\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 readonly factoryAddress: Address;\n private readonly index: bigint;\n private initCode?: Hex;\n validator?: KernelBaseValidator;\n defaultValidator?: 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.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;\n this.validator = params.validator;\n this.defaultValidator = params.defaultValidator;\n this.initCode = params.initCode;\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 getInitCode(): Promise<Hex> {\n if (this.deploymentState === DeploymentState.DEPLOYED) {\n return \"0x\";\n }\n const contractCode = await this.rpcProvider.getContractCode(\n await this.getAddress()\n );\n\n if ((contractCode?.length ?? 0) > 2) {\n this.deploymentState = DeploymentState.DEPLOYED;\n return \"0x\";\n } else {\n this.deploymentState = DeploymentState.NOT_DEPLOYED;\n }\n\n return this.initCode ?? this.getAccountInitCode();\n }\n\n getIndex(): bigint {\n return this.index;\n }\n\n async approvePlugin() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (this.defaultValidator && !this.validator.getEnableSignature()) {\n const { executor, selector, validAfter, validUntil } =\n this.validator.getPluginValidatorData();\n const enableSig = await this.defaultValidator.approveExecutor(\n await this.getAddress(),\n selector,\n executor,\n validUntil,\n validAfter,\n this.validator\n );\n this.validator.setEnableSignature(enableSig);\n }\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 (\n target.toLowerCase() === (await this.getAddress()).toLowerCase() &&\n this.validator.shouldDelegateViaFallback()\n ) {\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 kernelImplAddr = await this.getKernelImplementationAddess();\n const initCode = await this.getInitCode();\n // [TODO] - Remove this check once the kernel implementation is updated\n // Also, remove the check for the hardcoded kernel implementation address\n const shouldUseMultiSend =\n kernelImplAddr?.toLowerCase() !== KERNEL_IMPL_ADDRESS.toLowerCase() &&\n kernelImplAddr?.toLowerCase() !==\n \"0x8dD4DBB54d8A8Cf0DE6F9CCC4609470A30EfF18C\".toLowerCase() &&\n initCode === \"0x\";\n if (shouldUseMultiSend) {\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 return await this.encodeExecuteBatchAction(_txs);\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 encodeSetExection() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const { executor, selector, validAfter, validUntil } =\n await this.validator.getPluginValidatorData();\n const enableData = await this.validator.getEnableData();\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"setExecution\",\n args: [\n selector,\n executor,\n this.validator.validatorAddress,\n validUntil,\n validAfter,\n enableData,\n ],\n });\n }\n\n async encodeUgradeTo() {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"upgradeTo\",\n args: [KERNEL_IMPL_ADDRESS],\n });\n }\n\n async getKernelImplementationAddess(): Promise<Hex | undefined> {\n try {\n const strgAddr = await this.rpcProvider.getStorageAt({\n address: await this.getAddress(),\n slot: \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\",\n });\n return strgAddr ? ((\"0x\" + strgAddr.slice(26)) as Hex) : strgAddr;\n } catch (error) {\n return;\n }\n }\n\n async signMessageWith6492(msg: string | Uint8Array): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n let signature = await this.validator.signMessage(\n toBytes(hashMessage({ raw: formattedMessage }))\n );\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n signature = wrapWith6492({\n factoryAddress: this.factoryAddress,\n initCode: await this.getFactoryInitCode(),\n signature,\n });\n }\n\n return signature;\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 signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n let signature = await this.validator.signTypedData(params);\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n signature = wrapWith6492({\n factoryAddress: this.factoryAddress,\n initCode: await this.getFactoryInitCode(),\n signature,\n });\n }\n\n return signature;\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\n protected encodeExecuteBatchAction(_txs: BatchUserOperationCallData): Hex {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"executeBatch\",\n args: [\n _txs.map((tx) => ({\n to: tx.target,\n value: tx.value ?? 0n,\n data: tx.data,\n })),\n ],\n });\n }\n\n protected async getAccountInitCode(): Promise<Hex> {\n return concatHex([this.factoryAddress, await this.getFactoryInitCode()]);\n }\n\n async getNonce(): Promise<bigint> {\n if (!(await this.isAccountDeployed())) {\n return 0n;\n }\n if (!this.validator) {\n throw Error(\"Validator unintialized\");\n }\n const address = await this.getAddress();\n const key = this.validator.getNonceKey();\n return this.entryPoint.read.getNonce([address, key]);\n }\n\n protected async getFactoryInitCode(): Promise<Hex> {\n const validator = this.defaultValidator ?? this.validator;\n if (!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: [validator.getAddress(), await validator.getEnableData()],\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"]}
|
|
@@ -2,7 +2,7 @@ import { type Hex } from "viem";
|
|
|
2
2
|
import type { IGasTokenAddresses } from "./paymaster/types.js";
|
|
3
3
|
export declare const DEFAULT_SEND_TX_MAX_RETRIES = 3;
|
|
4
4
|
export declare const DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 60000;
|
|
5
|
-
export declare const BUNDLER_URL = "https://
|
|
5
|
+
export declare const BUNDLER_URL = "https://meta-aa-provider.onrender.com/api/v1/bundler";
|
|
6
6
|
export declare const PAYMASTER_URL = "https://meta-aa-provider.onrender.com/api/v1/paymaster";
|
|
7
7
|
export declare const ENTRYPOINT_ADDRESS: Hex;
|
|
8
8
|
export declare const MULTISEND_ADDR: Hex;
|
|
@@ -5,7 +5,7 @@ const viem_1 = require("viem");
|
|
|
5
5
|
const chains_1 = require("viem/chains");
|
|
6
6
|
exports.DEFAULT_SEND_TX_MAX_RETRIES = 3;
|
|
7
7
|
exports.DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 60000;
|
|
8
|
-
exports.BUNDLER_URL = "https://
|
|
8
|
+
exports.BUNDLER_URL = "https://meta-aa-provider.onrender.com/api/v1/bundler";
|
|
9
9
|
exports.PAYMASTER_URL = "https://meta-aa-provider.onrender.com/api/v1/paymaster";
|
|
10
10
|
exports.ENTRYPOINT_ADDRESS = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789";
|
|
11
11
|
exports.MULTISEND_ADDR = "0x8ae01fcf7c655655ff2c6ef907b8b4718ab4e17c";
|
|
@@ -69,5 +69,7 @@ exports.CHAIN_ID_TO_NODE = {
|
|
|
69
69
|
59144: `https://linea-mainnet.infura.io/v3/${exports.INFURA_API_KEY}`,
|
|
70
70
|
59140: `https://linea-goerli.infura.io/v3/${exports.INFURA_API_KEY}`,
|
|
71
71
|
204: "https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b",
|
|
72
|
+
42069: "https://rpc.op-testnet.gelato.digital",
|
|
73
|
+
1261120: "https://rpc.zkatana.gelato.digital",
|
|
72
74
|
};
|
|
73
75
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":";;;AAAA,+BAA4C;AAE5C,wCAAsC;AAEzB,QAAA,2BAA2B,GAAG,CAAC,CAAC;AAChC,QAAA,iCAAiC,GAAG,KAAK,CAAC;AAC1C,QAAA,WAAW,
|
|
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 = 60000; // 1 minutes\nexport const BUNDLER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/bundler\";\nexport const PAYMASTER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/paymaster\";\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 = \"0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5\";\nexport const KILL_SWITCH_VALIDATOR_ADDRESS =\n \"0x7393A7dA58CCfFb78f52adb09705BE6E20F704BC\";\nexport const KILL_SWITCH_ACTION = \"0x3f38e479304c7F18F988269a1bDa7d646bd48243\";\nexport const DUMMY_ECDSA_SIG =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\nexport const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =\n \"0xe149290800De29D4b0BF9dB82c508255D81902E6\";\nexport const TOKEN_ACTION = \"0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1\";\nexport const SESSION_KEY_VALIDATOR_ADDRESS =\n \"0xB8E3c4bEaACAd06f6092793012DA4a8cB23D6123\";\nexport const RECOVERY_VALIDATOR_ADDRESS =\n \"0x4fd47D861c349bD49DC61341a922cb72F9dF7E8d\";\nexport const RECOVERY_ACTION = \"0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1\";\nexport const oneAddress = \"0x0000000000000000000000000000000000000001\";\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 11155111:\n \"https://fittest-ultra-aura.ethereum-sepolia.quiknode.pro/3893d01b1dd411fdfa9b6dd372dd2b4f69fcf1ea/\",\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 59144: `https://linea-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 59140: `https://linea-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 204: \"https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b\",\n 42069: \"https://rpc.op-testnet.gelato.digital\",\n 1261120: \"https://rpc.zkatana.gelato.digital\",\n // 5611: 'opBnb-testnet',\n};\n"]}
|
|
@@ -7,6 +7,7 @@ const account_signer_js_1 = require("./account-signer.js");
|
|
|
7
7
|
const providers_1 = require("@ethersproject/providers");
|
|
8
8
|
const index_js_2 = require("../validator-provider/index.js");
|
|
9
9
|
const paymaster_js_1 = require("../middleware/paymaster.js");
|
|
10
|
+
const utils_js_1 = require("../utils.js");
|
|
10
11
|
class ZeroDevEthersProvider extends providers_1.JsonRpcProvider {
|
|
11
12
|
constructor(validatorType, params) {
|
|
12
13
|
super();
|
|
@@ -53,7 +54,8 @@ class ZeroDevEthersProvider extends providers_1.JsonRpcProvider {
|
|
|
53
54
|
}
|
|
54
55
|
});
|
|
55
56
|
let bundlerProvider = params.bundlerProvider;
|
|
56
|
-
const shouldUsePaymaster = params.usePaymaster === undefined || params.usePaymaster
|
|
57
|
+
const shouldUsePaymaster = (params.usePaymaster === undefined || params.usePaymaster) &&
|
|
58
|
+
bundlerProvider !== "GELATO";
|
|
57
59
|
if (params.opts?.paymasterConfig &&
|
|
58
60
|
params.opts?.paymasterConfig.policy === "TOKEN_PAYMASTER" &&
|
|
59
61
|
shouldUsePaymaster) {
|
|
@@ -80,7 +82,7 @@ class ZeroDevEthersProvider extends providers_1.JsonRpcProvider {
|
|
|
80
82
|
if (!chainId) {
|
|
81
83
|
throw new Error("ChainId not found");
|
|
82
84
|
}
|
|
83
|
-
const chain = (0,
|
|
85
|
+
const chain = (0, utils_js_1.getChain)(chainId);
|
|
84
86
|
const instance = new ZeroDevEthersProvider(validatorType, {
|
|
85
87
|
...params,
|
|
86
88
|
opts: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethers-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/ethers-provider.ts"],"names":[],"mappings":";;;AAAA,8CAA6C;AAC7C,
|
|
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 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 {\n ValidatorProviderParamsMap,\n ValidatorProviderTypeMap,\n} from \"../validator-provider/types.js\";\nimport { ValidatorProviders } from \"../validator-provider/index.js\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\nimport { getChain } from \"../utils.js\";\n\nexport class ZeroDevEthersProvider<\n V extends SupportedValidators\n> extends JsonRpcProvider {\n readonly accountProvider: ValidatorProviderTypeMap[V];\n constructor(validatorType: V, params: ValidatorProviderParamsMap[V]) {\n super();\n let bundlerProvider = params.bundlerProvider;\n const shouldUsePaymaster =\n (params.usePaymaster === undefined || params.usePaymaster) &&\n bundlerProvider !== \"GELATO\";\n if (\n params.opts?.paymasterConfig &&\n params.opts?.paymasterConfig.policy === \"TOKEN_PAYMASTER\" &&\n shouldUsePaymaster\n ) {\n bundlerProvider = \"STACKUP\";\n }\n let accountProvider = new ValidatorProviders[validatorType]({\n ...params,\n bundlerProvider,\n });\n if (shouldUsePaymaster) {\n let paymasterConfig = params.opts?.paymasterConfig ?? {\n policy: \"VERIFYING_PAYMASTER\",\n };\n paymasterConfig = {\n ...paymasterConfig,\n paymasterProvider:\n params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,\n };\n accountProvider = withZeroDevPaymasterAndData(\n accountProvider,\n paymasterConfig\n ) as ValidatorProviderTypeMap[V];\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 getAccountProvider(): ValidatorProviderTypeMap[V] {\n return this.accountProvider;\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(\n this,\n \"accountProvider\",\n this.accountProvider.connect(fn) as ValidatorProviderTypeMap[V]\n );\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"]}
|
|
@@ -7,9 +7,12 @@ const calc_pre_verification_gas_js_1 = require("../utils/calc-pre-verification-g
|
|
|
7
7
|
const withZeroDevGasEstimator = (provider) => {
|
|
8
8
|
provider.withFeeDataGetter(async (struct) => {
|
|
9
9
|
let overrides = await (0, aa_core_1.resolveProperties)({
|
|
10
|
-
maxFeePerGas: struct.maxFeePerGas
|
|
11
|
-
maxPriorityFeePerGas: struct.maxPriorityFeePerGas
|
|
10
|
+
maxFeePerGas: struct.maxFeePerGas,
|
|
11
|
+
maxPriorityFeePerGas: struct.maxPriorityFeePerGas,
|
|
12
12
|
});
|
|
13
|
+
if (provider.bundlerProvider === "GELATO") {
|
|
14
|
+
return { maxFeePerGas: 0n, maxPriorityFeePerGas: 0n };
|
|
15
|
+
}
|
|
13
16
|
let maxFeePerGas, maxPriorityFeePerGas;
|
|
14
17
|
try {
|
|
15
18
|
({ maxFeePerGas, maxPriorityFeePerGas } = await (0, exports.eip1559GasPrice)(provider));
|
|
@@ -24,9 +27,11 @@ const withZeroDevGasEstimator = (provider) => {
|
|
|
24
27
|
? BigInt(feeData.maxPriorityFeePerGas)
|
|
25
28
|
: 0n;
|
|
26
29
|
}
|
|
27
|
-
if (maxFeePerGas
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
if (overrides.maxFeePerGas || overrides.maxPriorityFeePerGas) {
|
|
31
|
+
return {
|
|
32
|
+
maxFeePerGas: overrides.maxFeePerGas ?? maxFeePerGas,
|
|
33
|
+
maxPriorityFeePerGas: overrides.maxPriorityFeePerGas ?? maxPriorityFeePerGas,
|
|
34
|
+
};
|
|
30
35
|
}
|
|
31
36
|
return { maxFeePerGas, maxPriorityFeePerGas };
|
|
32
37
|
});
|
|
@@ -86,6 +91,7 @@ exports.GAS_PRICE_RPC_METHODS_BY_BUNDLER = {
|
|
|
86
91
|
STACKUP: "eth_maxPriorityFeePerGas",
|
|
87
92
|
ALCHEMY: "rundler_maxPriorityFeePerGas",
|
|
88
93
|
PIMLICO: "pimlico_getUserOperationGasPrice",
|
|
94
|
+
GELATO: "eth_maxPriorityFeePerGas",
|
|
89
95
|
};
|
|
90
96
|
const eip1559GasPrice = async (provider) => {
|
|
91
97
|
let [fee, block] = await Promise.all([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas-estimator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZeroDevProvider } from \"../provider.js\";\nimport {\n deepHexlify,\n type Hex,\n type UserOperationStruct,\n resolveProperties,\n type BigNumberish,\n type UserOperationEstimateGasResponse,\n} from \"@alchemy/aa-core\";\nimport { ENTRYPOINT_ADDRESS } from \"../constants.js\";\nimport { calcPreVerificationGas } from \"../utils/calc-pre-verification-gas.js\";\nimport { type PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\nexport const withZeroDevGasEstimator = (\n provider: ZeroDevProvider\n): ZeroDevProvider => {\n provider.withFeeDataGetter(async (struct) => {\n let overrides = await resolveProperties({\n maxFeePerGas: struct.maxFeePerGas ?? 0n,\n maxPriorityFeePerGas: struct.maxPriorityFeePerGas ?? 0n,\n });\n\n let maxFeePerGas, maxPriorityFeePerGas;\n\n try {\n ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(\n provider\n ));\n } catch (error: any) {\n console.warn(\n \"getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price.\"\n );\n }\n\n if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {\n const feeData = await getFeeData(provider);\n maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;\n maxPriorityFeePerGas = feeData.maxPriorityFeePerGas\n ? BigInt(feeData.maxPriorityFeePerGas)\n : 0n;\n }\n\n if (\n maxFeePerGas < BigInt(overrides.maxFeePerGas) ||\n maxPriorityFeePerGas < BigInt(overrides.maxPriorityFeePerGas)\n ) {\n return overrides;\n }\n return { maxFeePerGas, maxPriorityFeePerGas };\n });\n\n provider.withGasEstimator(async (struct) => {\n if (\n struct.callGasLimit !== undefined &&\n struct.verificationGasLimit !== undefined &&\n struct.preVerificationGas !== undefined\n ) {\n return struct;\n }\n const initCode = await provider.account?.getInitCode();\n const initGas = await estimateCreationGas(provider, initCode);\n const partialStruct: UserOperationStruct = {\n ...struct,\n callGasLimit:\n initCode !== undefined && initCode.length > 2\n ? BigInt(\"1000000\")\n : BigInt(55000),\n verificationGasLimit: BigInt(110000) + initGas,\n preVerificationGas: BigInt(100000),\n };\n\n partialStruct.preVerificationGas = await getPreVerificationGas(\n partialStruct\n );\n\n const request = deepHexlify(await resolveProperties(partialStruct));\n let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;\n userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(\n request,\n ENTRYPOINT_ADDRESS\n );\n const { preVerificationGas, verificationGasLimit, callGasLimit } =\n userOpGasEstimates;\n request.preVerificationGas =\n (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;\n request.verificationGasLimit =\n BigInt(verificationGasLimit) ?? request.verificationGasLimit;\n request.callGasLimit =\n (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;\n\n return {\n ...struct,\n ...request,\n };\n });\n\n return provider;\n};\n\nexport const estimateCreationGas = async (\n provider: ZeroDevProvider,\n initCode?: string\n): Promise<bigint> => {\n if (initCode == null || initCode === \"0x\") return BigInt(0);\n const deployerAddress = initCode.substring(0, 42) as Hex;\n const deployerCallData = (\"0x\" + initCode.substring(42)) as Hex;\n return await provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: deployerAddress,\n data: deployerCallData,\n });\n};\n\n/**\n * should cover cost of putting calldata on-chain, and some overhead.\n * actual overhead depends on the expected bundle size\n */\nexport const getPreVerificationGas = async (\n userOp: Partial<UserOperationStruct>\n): Promise<number> => {\n const p = await resolveProperties(userOp);\n return calcPreVerificationGas(p);\n};\n\nexport const GAS_PRICE_RPC_METHODS_BY_BUNDLER: {\n [K in PaymasterAndBundlerProviders]: string;\n} = {\n STACKUP: \"eth_maxPriorityFeePerGas\",\n ALCHEMY: \"rundler_maxPriorityFeePerGas\",\n PIMLICO: \"pimlico_getUserOperationGasPrice\",\n};\n\nexport const eip1559GasPrice = async (provider: ZeroDevProvider) => {\n let [fee, block] = await Promise.all([\n provider.rpcClient.request({\n method:\n // @ts-expect-error\n GAS_PRICE_RPC_METHODS_BY_BUNDLER[provider.bundlerProvider] ??\n \"eth_maxPriorityFeePerGas\",\n params: [],\n }) as any,\n provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n ]);\n\n if (provider.bundlerProvider === \"PIMLICO\") {\n fee = fee.standard.maxPriorityFeePerGas;\n }\n\n const tip = BigInt(fee);\n const buffer = (tip / 100n) * 13n;\n let maxPriorityFeePerGas = tip + buffer;\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n const maxFeePerGas = block.baseFeePerGas\n ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas\n : maxPriorityFeePerGas;\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\ninterface FeeData {\n maxFeePerGas: BigNumberish | null;\n maxPriorityFeePerGas: BigNumberish | null;\n}\n\nexport const getFeeData = async (\n provider: ZeroDevProvider\n): Promise<FeeData> => {\n const { block, gasPrice } = await resolveProperties({\n block: provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n gasPrice: provider.rpcClient.getGasPrice().catch((error) => {\n console.warn(\"Legacy: Failed to get gas price\", error);\n return null;\n }),\n });\n\n let maxFeePerGas = null;\n let maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas != null) {\n // Set the tip to the min of the tip for the last block and 1.5 gwei\n const minimumTip = BigInt(\"1500000000\");\n maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;\n if (\n maxPriorityFeePerGas == null ||\n maxPriorityFeePerGas - BigInt(0) ||\n maxPriorityFeePerGas > minimumTip\n ) {\n maxPriorityFeePerGas = minimumTip;\n }\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n maxFeePerGas =\n block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);\n }\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"gas-estimator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZeroDevProvider } from \"../provider.js\";\nimport {\n deepHexlify,\n type Hex,\n type UserOperationStruct,\n resolveProperties,\n type BigNumberish,\n type UserOperationEstimateGasResponse,\n} from \"@alchemy/aa-core\";\nimport { ENTRYPOINT_ADDRESS } from \"../constants.js\";\nimport { calcPreVerificationGas } from \"../utils/calc-pre-verification-gas.js\";\nimport { type PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\nexport const withZeroDevGasEstimator = (\n provider: ZeroDevProvider\n): ZeroDevProvider => {\n provider.withFeeDataGetter(async (struct) => {\n let overrides = await resolveProperties({\n maxFeePerGas: struct.maxFeePerGas,\n maxPriorityFeePerGas: struct.maxPriorityFeePerGas,\n });\n\n if (provider.bundlerProvider === \"GELATO\") {\n return { maxFeePerGas: 0n, maxPriorityFeePerGas: 0n };\n }\n\n let maxFeePerGas, maxPriorityFeePerGas;\n\n try {\n ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(\n provider\n ));\n } catch (error: any) {\n console.warn(\n \"getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price.\"\n );\n }\n\n if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {\n const feeData = await getFeeData(provider);\n maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;\n maxPriorityFeePerGas = feeData.maxPriorityFeePerGas\n ? BigInt(feeData.maxPriorityFeePerGas)\n : 0n;\n }\n\n if (overrides.maxFeePerGas || overrides.maxPriorityFeePerGas) {\n return {\n maxFeePerGas: overrides.maxFeePerGas ?? maxFeePerGas,\n maxPriorityFeePerGas:\n overrides.maxPriorityFeePerGas ?? maxPriorityFeePerGas,\n };\n }\n return { maxFeePerGas, maxPriorityFeePerGas };\n });\n\n provider.withGasEstimator(async (struct) => {\n if (\n struct.callGasLimit !== undefined &&\n struct.verificationGasLimit !== undefined &&\n struct.preVerificationGas !== undefined\n ) {\n return struct;\n }\n const initCode = await provider.account?.getInitCode();\n const initGas = await estimateCreationGas(provider, initCode);\n const partialStruct: UserOperationStruct = {\n ...struct,\n callGasLimit:\n initCode !== undefined && initCode.length > 2\n ? BigInt(\"1000000\")\n : BigInt(55000),\n verificationGasLimit: BigInt(110000) + initGas,\n preVerificationGas: BigInt(100000),\n };\n\n partialStruct.preVerificationGas = await getPreVerificationGas(\n partialStruct\n );\n\n const request = deepHexlify(await resolveProperties(partialStruct));\n let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;\n userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(\n request,\n ENTRYPOINT_ADDRESS\n );\n const { preVerificationGas, verificationGasLimit, callGasLimit } =\n userOpGasEstimates;\n request.preVerificationGas =\n (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;\n request.verificationGasLimit =\n BigInt(verificationGasLimit) ?? request.verificationGasLimit;\n request.callGasLimit =\n (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;\n\n return {\n ...struct,\n ...request,\n };\n });\n\n return provider;\n};\n\nexport const estimateCreationGas = async (\n provider: ZeroDevProvider,\n initCode?: string\n): Promise<bigint> => {\n if (initCode == null || initCode === \"0x\") return BigInt(0);\n const deployerAddress = initCode.substring(0, 42) as Hex;\n const deployerCallData = (\"0x\" + initCode.substring(42)) as Hex;\n return await provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: deployerAddress,\n data: deployerCallData,\n });\n};\n\n/**\n * should cover cost of putting calldata on-chain, and some overhead.\n * actual overhead depends on the expected bundle size\n */\nexport const getPreVerificationGas = async (\n userOp: Partial<UserOperationStruct>\n): Promise<number> => {\n const p = await resolveProperties(userOp);\n return calcPreVerificationGas(p);\n};\n\nexport const GAS_PRICE_RPC_METHODS_BY_BUNDLER: {\n [K in PaymasterAndBundlerProviders]: string;\n} = {\n STACKUP: \"eth_maxPriorityFeePerGas\",\n ALCHEMY: \"rundler_maxPriorityFeePerGas\",\n PIMLICO: \"pimlico_getUserOperationGasPrice\",\n GELATO: \"eth_maxPriorityFeePerGas\",\n};\n\nexport const eip1559GasPrice = async (provider: ZeroDevProvider) => {\n let [fee, block] = await Promise.all([\n provider.rpcClient.request({\n method:\n // @ts-expect-error\n GAS_PRICE_RPC_METHODS_BY_BUNDLER[provider.bundlerProvider] ??\n \"eth_maxPriorityFeePerGas\",\n params: [],\n }) as any,\n provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n ]);\n\n if (provider.bundlerProvider === \"PIMLICO\") {\n fee = fee.standard.maxPriorityFeePerGas;\n }\n\n const tip = BigInt(fee);\n const buffer = (tip / 100n) * 13n;\n let maxPriorityFeePerGas = tip + buffer;\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n const maxFeePerGas = block.baseFeePerGas\n ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas\n : maxPriorityFeePerGas;\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\ninterface FeeData {\n maxFeePerGas: BigNumberish | null;\n maxPriorityFeePerGas: BigNumberish | null;\n}\n\nexport const getFeeData = async (\n provider: ZeroDevProvider\n): Promise<FeeData> => {\n const { block, gasPrice } = await resolveProperties({\n block: provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n gasPrice: provider.rpcClient.getGasPrice().catch((error) => {\n console.warn(\"Legacy: Failed to get gas price\", error);\n return null;\n }),\n });\n\n let maxFeePerGas = null;\n let maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas != null) {\n // Set the tip to the min of the tip for the last block and 1.5 gwei\n const minimumTip = BigInt(\"1500000000\");\n maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;\n if (\n maxPriorityFeePerGas == null ||\n maxPriorityFeePerGas - BigInt(0) ||\n maxPriorityFeePerGas > minimumTip\n ) {\n maxPriorityFeePerGas = minimumTip;\n }\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n maxFeePerGas =\n block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);\n }\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { SmartAccountSigner } from "@alchemy/aa-core";
|
|
2
|
-
type GetCustodialOwnerParams =
|
|
2
|
+
type GetCustodialOwnerParams = {
|
|
3
3
|
apiUrl?: string;
|
|
4
4
|
turnKeyClient?: unknown;
|
|
5
5
|
privateKey?: string;
|
|
6
6
|
publicKey?: string;
|
|
7
7
|
keyId?: string;
|
|
8
8
|
custodialFilePath?: string;
|
|
9
|
-
}
|
|
9
|
+
};
|
|
10
10
|
export declare function getCustodialOwner(identifier: string, { custodialFilePath, privateKey, publicKey, keyId, apiUrl, turnKeyClient, }: GetCustodialOwnerParams): Promise<SmartAccountSigner | undefined>;
|
|
11
11
|
export {};
|
|
@@ -1,27 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
4
|
};
|
|
@@ -29,32 +6,62 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
6
|
exports.getCustodialOwner = void 0;
|
|
30
7
|
const constants_js_1 = require("../constants.js");
|
|
31
8
|
const axios_1 = __importDefault(require("axios"));
|
|
32
|
-
const radash_1 = require("radash");
|
|
33
9
|
async function getCustodialOwner(identifier, { custodialFilePath, privateKey, publicKey, keyId, apiUrl = constants_js_1.API_URL, turnKeyClient, }) {
|
|
34
10
|
if (custodialFilePath) {
|
|
35
|
-
|
|
11
|
+
let fsModule;
|
|
12
|
+
try {
|
|
13
|
+
fsModule = require.resolve("fs") && require("fs");
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
console.log("FS module not available. Skipping FS operation...");
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const data = fsModule.readFileSync(custodialFilePath, "utf8");
|
|
20
|
+
const values = data.split("\n");
|
|
21
|
+
[privateKey, publicKey, keyId] = values;
|
|
36
22
|
}
|
|
37
|
-
if (!keyId) {
|
|
38
|
-
throw new Error("
|
|
23
|
+
if (!privateKey || !publicKey || !keyId) {
|
|
24
|
+
throw new Error("Must provide custodialFilePath or privateKey, publicKey, and keyId.");
|
|
39
25
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
26
|
+
if (!turnKeyClient) {
|
|
27
|
+
let TurnkeyClient;
|
|
28
|
+
let ApiKeyStamper;
|
|
29
|
+
try {
|
|
30
|
+
TurnkeyClient =
|
|
31
|
+
require.resolve("@turnkey/http") &&
|
|
32
|
+
require("@turnkey/http").TurnkeyClient;
|
|
33
|
+
ApiKeyStamper =
|
|
34
|
+
require.resolve("@turnkey/api-key-stamper") &&
|
|
35
|
+
require("@turnkey/api-key-stamper").ApiKeyStamper;
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.log("@turnkey/http or @turnkey/api-key-stamper module not available. Skipping FS operation...");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
turnKeyClient = new TurnkeyClient({
|
|
42
|
+
baseUrl: "https://api.turnkey.com",
|
|
43
|
+
}, new ApiKeyStamper({
|
|
44
|
+
apiPublicKey: publicKey,
|
|
45
|
+
apiPrivateKey: privateKey,
|
|
46
|
+
}));
|
|
46
47
|
}
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
const response = await axios_1.default.post(`${apiUrl}/wallets/${identifier}`, {
|
|
49
|
+
keyId,
|
|
50
|
+
});
|
|
51
|
+
let createAccount;
|
|
52
|
+
try {
|
|
53
|
+
createAccount =
|
|
54
|
+
require.resolve("@turnkey/viem") &&
|
|
55
|
+
require("@turnkey/viem").createAccount;
|
|
49
56
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.log("@turnkey/viem module not available. Skipping FS operation...");
|
|
59
|
+
return;
|
|
53
60
|
}
|
|
54
|
-
const turnkeySigner = await
|
|
55
|
-
|
|
61
|
+
const turnkeySigner = await createAccount({
|
|
62
|
+
client: turnKeyClient,
|
|
63
|
+
organizationId: keyId,
|
|
56
64
|
privateKeyId: response.data.walletId,
|
|
57
|
-
turnkeyClient: ensuredTurnkeyClient,
|
|
58
65
|
});
|
|
59
66
|
return {
|
|
60
67
|
getAddress: async () => turnkeySigner.address,
|
|
@@ -70,56 +77,4 @@ async function getCustodialOwner(identifier, { custodialFilePath, privateKey, pu
|
|
|
70
77
|
};
|
|
71
78
|
}
|
|
72
79
|
exports.getCustodialOwner = getCustodialOwner;
|
|
73
|
-
const loadSignDataFromCustodialFile = (0, radash_1.memo)(async (custodialFilePath) => {
|
|
74
|
-
const [, fsModule] = await (0, radash_1.tryit)(() => Promise.resolve().then(() => __importStar(require("fs"))))();
|
|
75
|
-
if (!fsModule) {
|
|
76
|
-
console.error("FS module not available");
|
|
77
|
-
throw new Error("FS module not available, you must provide each keys or install this module");
|
|
78
|
-
}
|
|
79
|
-
const data = fsModule.readFileSync(custodialFilePath, "utf8");
|
|
80
|
-
return data.split("\n");
|
|
81
|
-
}, {
|
|
82
|
-
ttl: 1000 * 60,
|
|
83
|
-
key: (custodialFilePath) => `${custodialFilePath}`,
|
|
84
|
-
});
|
|
85
|
-
const getDefaultTurnkeyClient = (0, radash_1.memo)(async ({ privateKey, publicKey, }) => {
|
|
86
|
-
const [, turnkeyHttp] = await (0, radash_1.tryit)(() => Promise.resolve().then(() => __importStar(require("@turnkey/http"))))();
|
|
87
|
-
const [, turnkeyApiKeyStamper] = await (0, radash_1.tryit)(() => Promise.resolve().then(() => __importStar(require("@turnkey/api-key-stamper"))))();
|
|
88
|
-
if (!turnkeyHttp || !turnkeyApiKeyStamper) {
|
|
89
|
-
console.error("@turnkey/http or @turnkey/api-key-stamper module not available.");
|
|
90
|
-
throw new Error("Turnkey http or api-key-stamper modules not available, you must provide a turnkey client or install this modules");
|
|
91
|
-
}
|
|
92
|
-
return new turnkeyHttp.TurnkeyClient({
|
|
93
|
-
baseUrl: "https://api.turnkey.com",
|
|
94
|
-
}, new turnkeyApiKeyStamper.ApiKeyStamper({
|
|
95
|
-
apiPublicKey: publicKey,
|
|
96
|
-
apiPrivateKey: privateKey,
|
|
97
|
-
}));
|
|
98
|
-
}, {
|
|
99
|
-
ttl: 1000 * 60,
|
|
100
|
-
key: ({ privateKey, publicKey, }) => `${privateKey}-${publicKey}`,
|
|
101
|
-
});
|
|
102
|
-
const fetchWallet = (0, radash_1.memo)(({ identifier, keyId, apiUrl, }) => {
|
|
103
|
-
return axios_1.default.post(`${apiUrl}/wallets/${identifier}`, {
|
|
104
|
-
keyId,
|
|
105
|
-
});
|
|
106
|
-
}, {
|
|
107
|
-
ttl: 1000 * 60,
|
|
108
|
-
key: ({ identifier, keyId, apiUrl, }) => `${identifier}-${keyId}-${apiUrl}`,
|
|
109
|
-
});
|
|
110
|
-
const getTurnkeySigner = (0, radash_1.memo)(async ({ keyId, privateKeyId, turnkeyClient, }) => {
|
|
111
|
-
const [, turnkeyViem] = await (0, radash_1.tryit)(() => Promise.resolve().then(() => __importStar(require("@turnkey/viem"))))();
|
|
112
|
-
if (!turnkeyViem) {
|
|
113
|
-
console.error("@turnkey/viem module not available");
|
|
114
|
-
throw new Error("Turnkey viem module not available, can't create a turnkey signer for the custodial owner");
|
|
115
|
-
}
|
|
116
|
-
return turnkeyViem.createAccount({
|
|
117
|
-
client: turnkeyClient,
|
|
118
|
-
organizationId: keyId,
|
|
119
|
-
privateKeyId,
|
|
120
|
-
});
|
|
121
|
-
}, {
|
|
122
|
-
ttl: 1000 * 60,
|
|
123
|
-
key: ({ keyId, privateKeyId, }) => `${keyId}-${privateKeyId}`,
|
|
124
|
-
});
|
|
125
80
|
//# sourceMappingURL=getCustodialOwner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCustodialOwner.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/owner/getCustodialOwner.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SignTypedDataParams, SmartAccountSigner } from \"@alchemy/aa-core\";\nimport { API_URL } from \"../constants.js\";\nimport axios from \"axios\";\nimport { memo, tryit } from \"radash\";\n\n/**\n * Params to get a custodial owner\n * Priv / pub key combo or custodial file path should be in different types\n */\ntype GetCustodialOwnerParams = Readonly<{\n // ZeroDev api url\n apiUrl?: string;\n // Turnkey client (if the client want to reuse it\n turnKeyClient?: unknown;\n\n // Direct access to priv / pub key\n privateKey?: string;\n publicKey?: string;\n keyId?: string;\n\n // Or read them from the custodial file path\n custodialFilePath?: string;\n}>;\n\n/**\n * Returns a signer for a custodial wallet via TurnKey\n */\nexport async function getCustodialOwner(\n identifier: string,\n {\n custodialFilePath,\n privateKey,\n publicKey,\n keyId,\n apiUrl = API_URL,\n turnKeyClient,\n }: GetCustodialOwnerParams\n): Promise<SmartAccountSigner | undefined> {\n // Extract data from the custodial file path if provided\n if (custodialFilePath) {\n [privateKey, publicKey, keyId] = await loadSignDataFromCustodialFile(\n custodialFilePath\n );\n }\n\n // Ensure we have the required values\n if (!keyId) {\n throw new Error(\"You must provide custodialFilePath or a keyId.\");\n }\n\n // Get our turnkey client (build it if needed)\n let ensuredTurnkeyClient = turnKeyClient;\n if (!ensuredTurnkeyClient && privateKey && publicKey) {\n ensuredTurnkeyClient = await getDefaultTurnkeyClient({\n privateKey,\n publicKey,\n });\n } else {\n throw new Error(\n \"No turnkey client available, if you don't provide one you should provide private and public key or a custodial file path\"\n );\n }\n\n // Get the wallet identifier from the API\n const response = await fetchWallet({ identifier, keyId, apiUrl });\n if (!response?.data?.walletId) {\n throw new Error(`No wallet id found for ${identifier}`);\n }\n\n // Build the turnkey viem account\n const turnkeySigner = await getTurnkeySigner({\n keyId,\n privateKeyId: response.data.walletId,\n turnkeyClient: ensuredTurnkeyClient,\n });\n\n // Return an alchemy AA signer from the turnkey signer\n return {\n getAddress: async () => turnkeySigner.address,\n signMessage: async (msg: Uint8Array | string) => {\n if (typeof msg === \"string\") {\n // If the msg is a string, sign it directly\n return turnkeySigner.signMessage({ message: msg });\n } else {\n // Otherwise, sign the raw data\n return turnkeySigner.signMessage({ message: { raw: msg } });\n }\n },\n signTypedData: async (params: SignTypedDataParams) =>\n turnkeySigner.signTypedData(params),\n };\n}\n\n/**\n * Try to load sign data from a local custodial file path\n */\nconst loadSignDataFromCustodialFile = memo(\n async (custodialFilePath: string) => {\n const [, fsModule] = await tryit(() => import(\"fs\"))();\n if (!fsModule) {\n console.error(\"FS module not available\");\n throw new Error(\n \"FS module not available, you must provide each keys or install this module\"\n );\n }\n const data = fsModule.readFileSync(custodialFilePath, \"utf8\");\n return data.split(\"\\n\");\n },\n {\n // TTL of 1min in the memory cache\n ttl: 1000 * 60,\n // The key in the cache\n key: (custodialFilePath: string) => `${custodialFilePath}`,\n }\n);\n\n/**\n * Get our default turnkey client\n */\nconst getDefaultTurnkeyClient = memo(\n async ({\n privateKey,\n publicKey,\n }: {\n privateKey: string;\n publicKey: string;\n }) => {\n // Try to fetch turnkey client & api key stamper\n const [, turnkeyHttp] = await tryit(() => import(\"@turnkey/http\"))();\n const [, turnkeyApiKeyStamper] = await tryit(\n () => import(\"@turnkey/api-key-stamper\")\n )();\n if (!turnkeyHttp || !turnkeyApiKeyStamper) {\n console.error(\n \"@turnkey/http or @turnkey/api-key-stamper module not available.\"\n );\n throw new Error(\n \"Turnkey http or api-key-stamper modules not available, you must provide a turnkey client or install this modules\"\n );\n }\n\n // Build the turnkey client\n return new turnkeyHttp.TurnkeyClient(\n {\n baseUrl: \"https://api.turnkey.com\",\n },\n new turnkeyApiKeyStamper.ApiKeyStamper({\n apiPublicKey: publicKey,\n apiPrivateKey: privateKey,\n })\n );\n },\n {\n // TTL of 1min in the memory cache\n ttl: 1000 * 60,\n // The key in the cache\n key: ({\n privateKey,\n publicKey,\n }: {\n privateKey: string;\n publicKey: string;\n }) => `${privateKey}-${publicKey}`,\n }\n);\n\n/**\n * Simple function used to fetch the wallet id from the API using an identifier\n */\nconst fetchWallet = memo(\n ({\n identifier,\n keyId,\n apiUrl,\n }: {\n identifier: string;\n keyId: string;\n apiUrl: string;\n }) => {\n return axios.post<any, { data: { walletId: string } }>(\n `${apiUrl}/wallets/${identifier}`,\n {\n keyId,\n }\n );\n },\n {\n // TTL of 1min in the memory cache\n ttl: 1000 * 60,\n // The key in the cache\n key: ({\n identifier,\n keyId,\n apiUrl,\n }: {\n identifier: string;\n keyId: string;\n apiUrl: string;\n }) => `${identifier}-${keyId}-${apiUrl}`,\n }\n);\n\n/**\n * Get a turnkey signer\n */\nconst getTurnkeySigner = memo(\n async ({\n keyId,\n privateKeyId,\n turnkeyClient,\n }: {\n keyId: string;\n privateKeyId: string;\n turnkeyClient: unknown;\n }) => {\n // Get the turnkey viem account\n const [, turnkeyViem] = await tryit(() => import(\"@turnkey/viem\"))();\n if (!turnkeyViem) {\n console.error(\"@turnkey/viem module not available\");\n throw new Error(\n \"Turnkey viem module not available, can't create a turnkey signer for the custodial owner\"\n );\n }\n return turnkeyViem.createAccount({\n client: turnkeyClient as any,\n organizationId: keyId,\n privateKeyId,\n });\n },\n {\n // TTL of 1min in the memory cache\n ttl: 1000 * 60,\n // The key in the cache\n key: ({\n keyId,\n privateKeyId,\n }: {\n keyId: string;\n privateKeyId: string;\n turnkeyClient: unknown;\n }) => `${keyId}-${privateKeyId}`,\n }\n);\n"]}
|
|
1
|
+
{"version":3,"file":"getCustodialOwner.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/owner/getCustodialOwner.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SignTypedDataParams, SmartAccountSigner } from \"@alchemy/aa-core\";\nimport { API_URL } from \"../constants.js\";\nimport axios from \"axios\";\n\n/**\n * Params to get a custodial owner\n * Priv / pub key combo or custodial file path should be in different types\n */\ntype GetCustodialOwnerParams = {\n // ZeroDev api url\n apiUrl?: string;\n // Turnkey client (if the client want to reuse it\n turnKeyClient?: unknown;\n\n // Direct access to priv / pub key\n privateKey?: string;\n publicKey?: string;\n keyId?: string;\n\n // Or read them from the custodial file path\n custodialFilePath?: string;\n};\n\n/**\n * Returns a signer for a custodial wallet via TurnKey\n */\nexport async function getCustodialOwner(\n identifier: string,\n {\n custodialFilePath,\n privateKey,\n publicKey,\n keyId,\n apiUrl = API_URL,\n turnKeyClient,\n }: GetCustodialOwnerParams\n): Promise<SmartAccountSigner | undefined> {\n // Extract data from the custodial file path if provided\n if (custodialFilePath) {\n let fsModule;\n try {\n fsModule = require.resolve(\"fs\") && require(\"fs\");\n } catch (error) {\n console.log(\"FS module not available. Skipping FS operation...\");\n return;\n }\n const data = fsModule.readFileSync(custodialFilePath, \"utf8\");\n const values = data.split(\"\\n\");\n // Override the values, if they are provided, to the one from the custodial file\n [privateKey, publicKey, keyId] = values;\n }\n\n // Ensure we have the required values\n if (!privateKey || !publicKey || !keyId) {\n throw new Error(\n \"Must provide custodialFilePath or privateKey, publicKey, and keyId.\"\n );\n }\n\n // Get our turnkey client (build it if needed)\n if (!turnKeyClient) {\n // Try to fetch turnkey client & api key stamper\n let TurnkeyClient;\n let ApiKeyStamper;\n // TODO: Would be cleaner with something like radash and a tryit function?\n try {\n TurnkeyClient =\n require.resolve(\"@turnkey/http\") &&\n require(\"@turnkey/http\").TurnkeyClient;\n ApiKeyStamper =\n require.resolve(\"@turnkey/api-key-stamper\") &&\n require(\"@turnkey/api-key-stamper\").ApiKeyStamper;\n } catch (error) {\n console.log(\n \"@turnkey/http or @turnkey/api-key-stamper module not available. Skipping FS operation...\"\n );\n return;\n }\n\n // Build the turnkey client\n turnKeyClient = new TurnkeyClient(\n {\n baseUrl: \"https://api.turnkey.com\",\n },\n new ApiKeyStamper({\n apiPublicKey: publicKey,\n apiPrivateKey: privateKey,\n })\n );\n }\n\n // Get the wallet identifier from the API\n const response = await axios.post<any, { data: { walletId: string } }>(\n `${apiUrl}/wallets/${identifier}`,\n {\n keyId,\n }\n );\n\n // Build the turnkey viem account\n let createAccount;\n try {\n createAccount =\n require.resolve(\"@turnkey/viem\") &&\n require(\"@turnkey/viem\").createAccount;\n } catch (error) {\n console.log(\"@turnkey/viem module not available. Skipping FS operation...\");\n return;\n }\n const turnkeySigner = await createAccount({\n client: turnKeyClient,\n organizationId: keyId,\n privateKeyId: response.data.walletId,\n });\n\n // Return an alchemy AA signer from the turnkey signer\n return {\n getAddress: async () => turnkeySigner.address,\n signMessage: async (msg: Uint8Array | string) => {\n if (typeof msg === \"string\") {\n // If the msg is a string, sign it directly\n return turnkeySigner.signMessage({ message: msg });\n } else {\n // Otherwise, sign the raw data\n return turnkeySigner.signMessage({ message: { raw: msg } });\n }\n },\n signTypedData: async (params: SignTypedDataParams) =>\n turnkeySigner.signTypedData(params),\n };\n}\n"]}
|
|
@@ -39,10 +39,10 @@ const signMessageImplementation = async (msg, id, walletId, projectId, credentia
|
|
|
39
39
|
abortWebauthn();
|
|
40
40
|
const signedRequest = await http_1.TurnkeyApi.signSignRawPayload({
|
|
41
41
|
body: {
|
|
42
|
-
type: "
|
|
42
|
+
type: "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD",
|
|
43
43
|
organizationId: id,
|
|
44
44
|
parameters: {
|
|
45
|
-
|
|
45
|
+
privateKeyId: walletId,
|
|
46
46
|
payload: msg,
|
|
47
47
|
encoding: "PAYLOAD_ENCODING_HEXADECIMAL",
|
|
48
48
|
hashFunction: "HASH_FUNCTION_NO_OP",
|