UNPKG

@zerodev/sdk

Version:

A utility library for working with ERC-4337

174 lines (160 loc) 6.5 kB
import { type Address, type Hex, zeroAddress } from "viem" import { type EntryPointVersion, entryPoint06Address, entryPoint07Address } from "viem/account-abstraction" import type { EntryPointType, KERNEL_V2_VERSION_TYPE, KERNEL_V3_VERSION_TYPE, KERNEL_VERSION_TYPE } from "./types/kernel.js" export const DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" export const MAGIC_VALUE_SIG_REPLAYABLE = "0x0555ad2729e8da1777a4e5020806f8bf7601c3db6bfe402f410a34958363a95a" // export const KernelImplToVersionMap: { [key: Address]: string } = { // "0x8dD4DBB54d8A8Cf0DE6F9CCC4609470A30EfF18C": "0.2.2", // "0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5": "0.2.2", // "0xD3F582F6B4814E989Ee8E96bc3175320B5A540ab": "0.2.3", // "0x5FC0236D6c88a65beD32EECDC5D60a5CAb377717": "0.2.3", // "0xd3082872F8B06073A021b4602e022d5A070d7cfC": "0.2.4", // "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27": "0.3.0" // } export const FACTORY_ADDRESS_V0_6 = "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3" export const FACTORY_ADDRESS_V0_6_INIT_CODE_HASH = "0xee9d8350bd899dd261db689aafd87eb8a30f085adbaff48152399438ff4eed73" export const KernelVersionToAddressesMap: { [key in KERNEL_VERSION_TYPE]: { accountImplementationAddress: Address factoryAddress: Address metaFactoryAddress?: key extends KERNEL_V3_VERSION_TYPE ? Address : never initCodeHash?: Hex } } = { "0.0.2": { accountImplementationAddress: zeroAddress, factoryAddress: "0xaee9762ce625e0a8f7b184670fb57c37bfe1d0f1" }, "0.2.2": { accountImplementationAddress: "0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5", factoryAddress: FACTORY_ADDRESS_V0_6, initCodeHash: FACTORY_ADDRESS_V0_6_INIT_CODE_HASH }, "0.2.3": { accountImplementationAddress: "0xD3F582F6B4814E989Ee8E96bc3175320B5A540ab", factoryAddress: FACTORY_ADDRESS_V0_6, initCodeHash: FACTORY_ADDRESS_V0_6_INIT_CODE_HASH }, "0.2.4": { accountImplementationAddress: "0xd3082872F8B06073A021b4602e022d5A070d7cfC", factoryAddress: FACTORY_ADDRESS_V0_6, initCodeHash: FACTORY_ADDRESS_V0_6_INIT_CODE_HASH }, "0.3.0": { accountImplementationAddress: "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27", factoryAddress: "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", metaFactoryAddress: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", initCodeHash: "0x6fe6e6ea30eddce942b9618033ab8429f9ddac594053bec8a6744fffc71976e2" }, "0.3.1": { accountImplementationAddress: "0xBAC849bB641841b44E965fB01A4Bf5F074f84b4D", factoryAddress: "0xaac5D4240AF87249B3f71BC8E4A2cae074A3E419", metaFactoryAddress: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", initCodeHash: "0x85d96aa1c9a65886d094915d76ccae85f14027a02c1647dde659f869460f03e6" }, "0.3.2": { accountImplementationAddress: "0xD830D15D3dc0C269F3dBAa0F3e8626d33CFdaBe1", factoryAddress: "0x7a1dBAB750f12a90EB1B60D2Ae3aD17D4D81EfFe", metaFactoryAddress: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", initCodeHash: "0xc7c48c9dd12de68b8a4689b6f8c8c07b61d4d6fa4ddecdd86a6980d045fa67eb" }, "0.3.3": { accountImplementationAddress: "0xd6CEDDe84be40893d153Be9d467CD6aD37875b28", factoryAddress: "0x2577507b78c2008Ff367261CB6285d44ba5eF2E9", metaFactoryAddress: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", initCodeHash: "0xc452397f1e7518f8cea0566ac057e243bb1643f6298aba8eec8cdee78ee3b3dd" //"0x1fefe62c5b9c14c4661af2e04e4a2fa10205066cae5f629d304d483f5fa9e5fc" } } export const KERNEL_V0_2: KERNEL_V2_VERSION_TYPE = "0.0.2" export const KERNEL_V2_2: KERNEL_V2_VERSION_TYPE = "0.2.2" export const KERNEL_V2_3: KERNEL_V2_VERSION_TYPE = "0.2.3" export const KERNEL_V2_4: KERNEL_V2_VERSION_TYPE = "0.2.4" export const KERNEL_V3_0: KERNEL_V3_VERSION_TYPE = "0.3.0" export const KERNEL_V3_1: KERNEL_V3_VERSION_TYPE = "0.3.1" export const KERNEL_V3_2: KERNEL_V3_VERSION_TYPE = "0.3.2" export const KERNEL_V3_3_BETA: KERNEL_V3_VERSION_TYPE = "0.3.3" export const KERNEL_V3_3: KERNEL_V3_VERSION_TYPE = "0.3.3" export const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1" export const ONLY_ENTRYPOINT_HOOK_ADDRESS = "0xb230f0A1C7C95fa11001647383c8C7a8F316b900" export const KERNEL_NAME = "Kernel" export const VALIDATOR_TYPE = { SUDO: "0x00", SECONDARY: "0x01", PERMISSION: "0x02", EIP7702: "0x00" } as const export enum VALIDATOR_MODE { DEFAULT = "0x00", ENABLE = "0x01" } export enum CALL_TYPE { SINGLE = "0x00", BATCH = "0x01", DELEGATE_CALL = "0xFF" } export enum EXEC_TYPE { DEFAULT = "0x00", TRY_EXEC = "0x01" } export const PLUGIN_TYPE = { VALIDATOR: 1, EXECUTOR: 2, FALLBACK: 3, HOOK: 4, POLICY: 5, SIGNER: 6 } // Safe's library for create and create2: https://github.com/safe-global/safe-contracts/blob/0acdd35a203299585438f53885df630f9d486a86/contracts/libraries/CreateCall.sol // Address was found here: https://github.com/safe-global/safe-deployments/blob/926ec6bbe2ebcac3aa2c2c6c0aff74aa590cbc6a/src/assets/v1.4.1/create_call.json export const safeCreateCallAddress = "0x9b35Af71d77eaf8d7e40252370304687390A1A52" export const KernelFactoryToInitCodeHashMap: { [key: Address]: Hex } = { "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3": "0xee9d8350bd899dd261db689aafd87eb8a30f085adbaff48152399438ff4eed73", "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f": "0x6fe6e6ea30eddce942b9618033ab8429f9ddac594053bec8a6744fffc71976e2" } export const KERNEL_IMPLEMENTATION_SLOT = "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" export const getEntryPoint = <TEntryPointVersion extends EntryPointVersion>( entryPointVersion: TEntryPointVersion ): EntryPointType<TEntryPointVersion> => { if (entryPointVersion === "0.6") return { address: entryPoint06Address, version: entryPointVersion } return { address: entryPoint07Address, version: entryPointVersion } } export const KERNEL_7702_DELEGATION_ADDRESS = "0xd6CEDDe84be40893d153Be9d467CD6aD37875b28"