@zerodev/sdk 4.0.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/README.md +450 -0
- package/dist/cjs/index.d.ts +21 -0
- package/dist/cjs/index.js +49 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts +162 -0
- package/dist/cjs/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.js +215 -0
- package/dist/cjs/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/ERC20Abi.d.ts +39 -0
- package/dist/cjs/kernel-zerodev/abis/ERC20Abi.js +157 -0
- package/dist/cjs/kernel-zerodev/abis/ERC20Abi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +158 -0
- package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.js +210 -0
- package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.d.ts +496 -0
- package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.js +646 -0
- package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/KernelFactoryAbi.d.ts +293 -0
- package/dist/cjs/kernel-zerodev/abis/KernelFactoryAbi.js +384 -0
- package/dist/cjs/kernel-zerodev/abis/KernelFactoryAbi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts +150 -0
- package/dist/cjs/kernel-zerodev/abis/KillSwitchValidatorAbi.js +200 -0
- package/dist/cjs/kernel-zerodev/abis/KillSwitchValidatorAbi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/MultiSendAbi.d.ts +15 -0
- package/dist/cjs/kernel-zerodev/abis/MultiSendAbi.js +24 -0
- package/dist/cjs/kernel-zerodev/abis/MultiSendAbi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.d.ts +39 -0
- package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.js +161 -0
- package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/Test_ERC721Abi.d.ts +287 -0
- package/dist/cjs/kernel-zerodev/abis/Test_ERC721Abi.js +377 -0
- package/dist/cjs/kernel-zerodev/abis/Test_ERC721Abi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/TokenActionsAbi.d.ts +63 -0
- package/dist/cjs/kernel-zerodev/abis/TokenActionsAbi.js +85 -0
- package/dist/cjs/kernel-zerodev/abis/TokenActionsAbi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/index.d.ts +8 -0
- package/dist/cjs/kernel-zerodev/abis/index.js +18 -0
- package/dist/cjs/kernel-zerodev/abis/index.js.map +1 -0
- package/dist/cjs/kernel-zerodev/account.d.ts +35 -0
- package/dist/cjs/kernel-zerodev/account.js +209 -0
- package/dist/cjs/kernel-zerodev/account.js.map +1 -0
- package/dist/cjs/kernel-zerodev/api/index.d.ts +1 -0
- package/dist/cjs/kernel-zerodev/api/index.js +24 -0
- package/dist/cjs/kernel-zerodev/api/index.js.map +1 -0
- package/dist/cjs/kernel-zerodev/client/create-client.d.ts +11 -0
- package/dist/cjs/kernel-zerodev/client/create-client.js +21 -0
- package/dist/cjs/kernel-zerodev/client/create-client.js.map +1 -0
- package/dist/cjs/kernel-zerodev/constants.d.ts +27 -0
- package/dist/cjs/kernel-zerodev/constants.js +66 -0
- package/dist/cjs/kernel-zerodev/constants.js.map +1 -0
- package/dist/cjs/kernel-zerodev/errors.d.ts +5 -0
- package/dist/cjs/kernel-zerodev/errors.js +12 -0
- package/dist/cjs/kernel-zerodev/errors.js.map +1 -0
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.d.ts +21 -0
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js +94 -0
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -0
- package/dist/cjs/kernel-zerodev/middleware/gas-estimator.d.ts +15 -0
- package/dist/cjs/kernel-zerodev/middleware/gas-estimator.js +132 -0
- package/dist/cjs/kernel-zerodev/middleware/gas-estimator.js.map +1 -0
- package/dist/cjs/kernel-zerodev/middleware/paymaster.d.ts +5 -0
- package/dist/cjs/kernel-zerodev/middleware/paymaster.js +43 -0
- package/dist/cjs/kernel-zerodev/middleware/paymaster.js.map +1 -0
- package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.d.ts +8 -0
- package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js +53 -0
- package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js.map +1 -0
- package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.d.ts +2 -0
- package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js +15 -0
- package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -0
- package/dist/cjs/kernel-zerodev/owner/index.d.ts +2 -0
- package/dist/cjs/kernel-zerodev/owner/index.js +8 -0
- package/dist/cjs/kernel-zerodev/owner/index.js.map +1 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts +7 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.js +65 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts +6 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js +16 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js.map +1 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +5 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js +41 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/index.d.ts +3 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/index.js +10 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/index.js.map +1 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/types.d.ts +12 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/types.js +3 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/types.js.map +1 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.d.ts +11 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js +105 -0
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js.map +1 -0
- package/dist/cjs/kernel-zerodev/paymaster/base.d.ts +16 -0
- package/dist/cjs/kernel-zerodev/paymaster/base.js +58 -0
- package/dist/cjs/kernel-zerodev/paymaster/base.js.map +1 -0
- package/dist/cjs/kernel-zerodev/paymaster/index.d.ts +3 -0
- package/dist/cjs/kernel-zerodev/paymaster/index.js +10 -0
- package/dist/cjs/kernel-zerodev/paymaster/index.js.map +1 -0
- package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.d.ts +14 -0
- package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js +173 -0
- package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js.map +1 -0
- package/dist/cjs/kernel-zerodev/paymaster/types.d.ts +29 -0
- package/dist/cjs/kernel-zerodev/paymaster/types.js +3 -0
- package/dist/cjs/kernel-zerodev/paymaster/types.js.map +1 -0
- package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.d.ts +8 -0
- package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.js +31 -0
- package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.js.map +1 -0
- package/dist/cjs/kernel-zerodev/provider.d.ts +42 -0
- package/dist/cjs/kernel-zerodev/provider.js +249 -0
- package/dist/cjs/kernel-zerodev/provider.js.map +1 -0
- package/dist/cjs/kernel-zerodev/types.d.ts +7 -0
- package/dist/cjs/kernel-zerodev/types.js +3 -0
- package/dist/cjs/kernel-zerodev/types.js.map +1 -0
- package/dist/cjs/kernel-zerodev/utils/ERC4337-utils.d.ts +5 -0
- package/dist/cjs/kernel-zerodev/utils/ERC4337-utils.js +106 -0
- package/dist/cjs/kernel-zerodev/utils/ERC4337-utils.js.map +1 -0
- package/dist/cjs/kernel-zerodev/utils/calc-pre-verification-gas.d.ts +15 -0
- package/dist/cjs/kernel-zerodev/utils/calc-pre-verification-gas.js +33 -0
- package/dist/cjs/kernel-zerodev/utils/calc-pre-verification-gas.js.map +1 -0
- package/dist/cjs/kernel-zerodev/utils.d.ts +15 -0
- package/dist/cjs/kernel-zerodev/utils.js +60 -0
- package/dist/cjs/kernel-zerodev/utils.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator/base.d.ts +53 -0
- package/dist/cjs/kernel-zerodev/validator/base.js +240 -0
- package/dist/cjs/kernel-zerodev/validator/base.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.d.ts +19 -0
- package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js +93 -0
- package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.d.ts +27 -0
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js +103 -0
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator/index.d.ts +6 -0
- package/dist/cjs/kernel-zerodev/validator/index.js +15 -0
- package/dist/cjs/kernel-zerodev/validator/index.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.d.ts +21 -0
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js +110 -0
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator/types.d.ts +17 -0
- package/dist/cjs/kernel-zerodev/validator/types.js +3 -0
- package/dist/cjs/kernel-zerodev/validator/types.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator-provider/base.d.ts +28 -0
- package/dist/cjs/kernel-zerodev/validator-provider/base.js +94 -0
- package/dist/cjs/kernel-zerodev/validator-provider/base.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +8 -0
- package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js +60 -0
- package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +8 -0
- package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js +64 -0
- package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator-provider/index.d.ts +6 -0
- package/dist/cjs/kernel-zerodev/validator-provider/index.js +15 -0
- package/dist/cjs/kernel-zerodev/validator-provider/index.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +8 -0
- package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js +64 -0
- package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator-provider/types.d.ts +21 -0
- package/dist/cjs/kernel-zerodev/validator-provider/types.js +3 -0
- package/dist/cjs/kernel-zerodev/validator-provider/types.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/index.d.ts +21 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts +162 -0
- package/dist/esm/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.js +212 -0
- package/dist/esm/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/ERC20Abi.d.ts +39 -0
- package/dist/esm/kernel-zerodev/abis/ERC20Abi.js +154 -0
- package/dist/esm/kernel-zerodev/abis/ERC20Abi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +158 -0
- package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js +207 -0
- package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.d.ts +496 -0
- package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js +643 -0
- package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/KernelFactoryAbi.d.ts +293 -0
- package/dist/esm/kernel-zerodev/abis/KernelFactoryAbi.js +381 -0
- package/dist/esm/kernel-zerodev/abis/KernelFactoryAbi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts +150 -0
- package/dist/esm/kernel-zerodev/abis/KillSwitchValidatorAbi.js +197 -0
- package/dist/esm/kernel-zerodev/abis/KillSwitchValidatorAbi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/MultiSendAbi.d.ts +15 -0
- package/dist/esm/kernel-zerodev/abis/MultiSendAbi.js +21 -0
- package/dist/esm/kernel-zerodev/abis/MultiSendAbi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.d.ts +39 -0
- package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.js +158 -0
- package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/Test_ERC721Abi.d.ts +287 -0
- package/dist/esm/kernel-zerodev/abis/Test_ERC721Abi.js +374 -0
- package/dist/esm/kernel-zerodev/abis/Test_ERC721Abi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/TokenActionsAbi.d.ts +63 -0
- package/dist/esm/kernel-zerodev/abis/TokenActionsAbi.js +82 -0
- package/dist/esm/kernel-zerodev/abis/TokenActionsAbi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/index.d.ts +8 -0
- package/dist/esm/kernel-zerodev/abis/index.js +9 -0
- package/dist/esm/kernel-zerodev/abis/index.js.map +1 -0
- package/dist/esm/kernel-zerodev/account.d.ts +35 -0
- package/dist/esm/kernel-zerodev/account.js +204 -0
- package/dist/esm/kernel-zerodev/account.js.map +1 -0
- package/dist/esm/kernel-zerodev/api/index.d.ts +1 -0
- package/dist/esm/kernel-zerodev/api/index.js +17 -0
- package/dist/esm/kernel-zerodev/api/index.js.map +1 -0
- package/dist/esm/kernel-zerodev/client/create-client.d.ts +11 -0
- package/dist/esm/kernel-zerodev/client/create-client.js +17 -0
- package/dist/esm/kernel-zerodev/client/create-client.js.map +1 -0
- package/dist/esm/kernel-zerodev/constants.d.ts +27 -0
- package/dist/esm/kernel-zerodev/constants.js +63 -0
- package/dist/esm/kernel-zerodev/constants.js.map +1 -0
- package/dist/esm/kernel-zerodev/errors.d.ts +5 -0
- package/dist/esm/kernel-zerodev/errors.js +6 -0
- package/dist/esm/kernel-zerodev/errors.js.map +1 -0
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.d.ts +21 -0
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js +90 -0
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -0
- package/dist/esm/kernel-zerodev/middleware/gas-estimator.d.ts +15 -0
- package/dist/esm/kernel-zerodev/middleware/gas-estimator.js +124 -0
- package/dist/esm/kernel-zerodev/middleware/gas-estimator.js.map +1 -0
- package/dist/esm/kernel-zerodev/middleware/paymaster.d.ts +5 -0
- package/dist/esm/kernel-zerodev/middleware/paymaster.js +39 -0
- package/dist/esm/kernel-zerodev/middleware/paymaster.js.map +1 -0
- package/dist/esm/kernel-zerodev/owner/getCustodialOwner.d.ts +8 -0
- package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js +46 -0
- package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js.map +1 -0
- package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.d.ts +2 -0
- package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js +12 -0
- package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -0
- package/dist/esm/kernel-zerodev/owner/index.d.ts +2 -0
- package/dist/esm/kernel-zerodev/owner/index.js +3 -0
- package/dist/esm/kernel-zerodev/owner/index.js.map +1 -0
- package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts +7 -0
- package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.js +58 -0
- package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -0
- package/dist/esm/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts +6 -0
- package/dist/esm/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js +12 -0
- package/dist/esm/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js.map +1 -0
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +5 -0
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js +34 -0
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -0
- package/dist/esm/kernel-zerodev/owner/passkey/index.d.ts +3 -0
- package/dist/esm/kernel-zerodev/owner/passkey/index.js +4 -0
- package/dist/esm/kernel-zerodev/owner/passkey/index.js.map +1 -0
- package/dist/esm/kernel-zerodev/owner/passkey/types.d.ts +12 -0
- package/dist/esm/kernel-zerodev/owner/passkey/types.js +2 -0
- package/dist/esm/kernel-zerodev/owner/passkey/types.js.map +1 -0
- package/dist/esm/kernel-zerodev/owner/passkey/utils.d.ts +11 -0
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js +92 -0
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js.map +1 -0
- package/dist/esm/kernel-zerodev/paymaster/base.d.ts +16 -0
- package/dist/esm/kernel-zerodev/paymaster/base.js +51 -0
- package/dist/esm/kernel-zerodev/paymaster/base.js.map +1 -0
- package/dist/esm/kernel-zerodev/paymaster/index.d.ts +3 -0
- package/dist/esm/kernel-zerodev/paymaster/index.js +7 -0
- package/dist/esm/kernel-zerodev/paymaster/index.js.map +1 -0
- package/dist/esm/kernel-zerodev/paymaster/token-paymaster.d.ts +14 -0
- package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js +168 -0
- package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js.map +1 -0
- package/dist/esm/kernel-zerodev/paymaster/types.d.ts +29 -0
- package/dist/esm/kernel-zerodev/paymaster/types.js +2 -0
- package/dist/esm/kernel-zerodev/paymaster/types.js.map +1 -0
- package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.d.ts +8 -0
- package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.js +27 -0
- package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.js.map +1 -0
- package/dist/esm/kernel-zerodev/provider.d.ts +42 -0
- package/dist/esm/kernel-zerodev/provider.js +245 -0
- package/dist/esm/kernel-zerodev/provider.js.map +1 -0
- package/dist/esm/kernel-zerodev/types.d.ts +7 -0
- package/dist/esm/kernel-zerodev/types.js +2 -0
- package/dist/esm/kernel-zerodev/types.js.map +1 -0
- package/dist/esm/kernel-zerodev/utils/ERC4337-utils.d.ts +5 -0
- package/dist/esm/kernel-zerodev/utils/ERC4337-utils.js +100 -0
- package/dist/esm/kernel-zerodev/utils/ERC4337-utils.js.map +1 -0
- package/dist/esm/kernel-zerodev/utils/calc-pre-verification-gas.d.ts +15 -0
- package/dist/esm/kernel-zerodev/utils/calc-pre-verification-gas.js +29 -0
- package/dist/esm/kernel-zerodev/utils/calc-pre-verification-gas.js.map +1 -0
- package/dist/esm/kernel-zerodev/utils.d.ts +15 -0
- package/dist/esm/kernel-zerodev/utils.js +53 -0
- package/dist/esm/kernel-zerodev/utils.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator/base.d.ts +53 -0
- package/dist/esm/kernel-zerodev/validator/base.js +237 -0
- package/dist/esm/kernel-zerodev/validator/base.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator/ecdsa-validator.d.ts +19 -0
- package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js +89 -0
- package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.d.ts +27 -0
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js +99 -0
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator/index.d.ts +6 -0
- package/dist/esm/kernel-zerodev/validator/index.js +10 -0
- package/dist/esm/kernel-zerodev/validator/index.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.d.ts +21 -0
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js +106 -0
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator/types.d.ts +17 -0
- package/dist/esm/kernel-zerodev/validator/types.js +2 -0
- package/dist/esm/kernel-zerodev/validator/types.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator-provider/base.d.ts +28 -0
- package/dist/esm/kernel-zerodev/validator-provider/base.js +91 -0
- package/dist/esm/kernel-zerodev/validator-provider/base.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +8 -0
- package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js +56 -0
- package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +8 -0
- package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js +60 -0
- package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator-provider/index.d.ts +6 -0
- package/dist/esm/kernel-zerodev/validator-provider/index.js +10 -0
- package/dist/esm/kernel-zerodev/validator-provider/index.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +8 -0
- package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js +60 -0
- package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator-provider/types.d.ts +21 -0
- package/dist/esm/kernel-zerodev/validator-provider/types.js +2 -0
- package/dist/esm/kernel-zerodev/validator-provider/types.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts +163 -0
- package/dist/types/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/ERC20Abi.d.ts +40 -0
- package/dist/types/kernel-zerodev/abis/ERC20Abi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +159 -0
- package/dist/types/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/KernelAccountAbi.d.ts +497 -0
- package/dist/types/kernel-zerodev/abis/KernelAccountAbi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/KernelFactoryAbi.d.ts +294 -0
- package/dist/types/kernel-zerodev/abis/KernelFactoryAbi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts +151 -0
- package/dist/types/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/MultiSendAbi.d.ts +16 -0
- package/dist/types/kernel-zerodev/abis/MultiSendAbi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts +40 -0
- package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/Test_ERC721Abi.d.ts +288 -0
- package/dist/types/kernel-zerodev/abis/Test_ERC721Abi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/TokenActionsAbi.d.ts +64 -0
- package/dist/types/kernel-zerodev/abis/TokenActionsAbi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/index.d.ts +9 -0
- package/dist/types/kernel-zerodev/abis/index.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/account.d.ts +36 -0
- package/dist/types/kernel-zerodev/account.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/api/index.d.ts +2 -0
- package/dist/types/kernel-zerodev/api/index.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/client/create-client.d.ts +12 -0
- package/dist/types/kernel-zerodev/client/create-client.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/constants.d.ts +28 -0
- package/dist/types/kernel-zerodev/constants.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/errors.d.ts +6 -0
- package/dist/types/kernel-zerodev/errors.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts +39 -0
- package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/middleware/gas-estimator.d.ts +20 -0
- package/dist/types/kernel-zerodev/middleware/gas-estimator.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/middleware/paymaster.d.ts +6 -0
- package/dist/types/kernel-zerodev/middleware/paymaster.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/owner/getCustodialOwner.d.ts +9 -0
- package/dist/types/kernel-zerodev/owner/getCustodialOwner.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/owner/getRPCProviderOwner.d.ts +3 -0
- package/dist/types/kernel-zerodev/owner/getRPCProviderOwner.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/owner/index.d.ts +3 -0
- package/dist/types/kernel-zerodev/owner/index.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts +8 -0
- package/dist/types/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts +7 -0
- package/dist/types/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +6 -0
- package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/owner/passkey/index.d.ts +4 -0
- package/dist/types/kernel-zerodev/owner/passkey/index.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/owner/passkey/types.d.ts +14 -0
- package/dist/types/kernel-zerodev/owner/passkey/types.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/owner/passkey/utils.d.ts +12 -0
- package/dist/types/kernel-zerodev/owner/passkey/utils.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/paymaster/base.d.ts +17 -0
- package/dist/types/kernel-zerodev/paymaster/base.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/paymaster/index.d.ts +4 -0
- package/dist/types/kernel-zerodev/paymaster/index.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts +15 -0
- package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/paymaster/types.d.ts +30 -0
- package/dist/types/kernel-zerodev/paymaster/types.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/paymaster/verifying-paymaster.d.ts +9 -0
- package/dist/types/kernel-zerodev/paymaster/verifying-paymaster.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/provider.d.ts +43 -0
- package/dist/types/kernel-zerodev/provider.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/types.d.ts +8 -0
- package/dist/types/kernel-zerodev/types.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/utils/ERC4337-utils.d.ts +18 -0
- package/dist/types/kernel-zerodev/utils/ERC4337-utils.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/utils/calc-pre-verification-gas.d.ts +44 -0
- package/dist/types/kernel-zerodev/utils/calc-pre-verification-gas.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/utils.d.ts +16 -0
- package/dist/types/kernel-zerodev/utils.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator/base.d.ts +54 -0
- package/dist/types/kernel-zerodev/validator/base.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator/ecdsa-validator.d.ts +20 -0
- package/dist/types/kernel-zerodev/validator/ecdsa-validator.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts +28 -0
- package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator/index.d.ts +7 -0
- package/dist/types/kernel-zerodev/validator/index.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts +22 -0
- package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator/types.d.ts +18 -0
- package/dist/types/kernel-zerodev/validator/types.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator-provider/base.d.ts +29 -0
- package/dist/types/kernel-zerodev/validator-provider/base.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +9 -0
- package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +9 -0
- package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator-provider/index.d.ts +7 -0
- package/dist/types/kernel-zerodev/validator-provider/index.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +9 -0
- package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator-provider/types.d.ts +22 -0
- package/dist/types/kernel-zerodev/validator-provider/types.d.ts.map +1 -0
- package/package.json +76 -0
- package/passkey/package.json +5 -0
- package/src/index.ts +43 -0
- package/src/kernel-zerodev/__tests__/mocks/mock-signer.ts +24 -0
- package/src/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.ts +211 -0
- package/src/kernel-zerodev/abis/ERC20Abi.ts +153 -0
- package/src/kernel-zerodev/abis/ESCDAValidatorAbi.ts +206 -0
- package/src/kernel-zerodev/abis/KernelAccountAbi.ts +642 -0
- package/src/kernel-zerodev/abis/KernelFactoryAbi.ts +380 -0
- package/src/kernel-zerodev/abis/KillSwitchValidatorAbi.ts +196 -0
- package/src/kernel-zerodev/abis/MultiSendAbi.ts +20 -0
- package/src/kernel-zerodev/abis/Test_ERC20Abi.ts +157 -0
- package/src/kernel-zerodev/abis/Test_ERC721Abi.ts +373 -0
- package/src/kernel-zerodev/abis/TokenActionsAbi.ts +81 -0
- package/src/kernel-zerodev/abis/index.ts +17 -0
- package/src/kernel-zerodev/account.ts +275 -0
- package/src/kernel-zerodev/api/index.ts +25 -0
- package/src/kernel-zerodev/client/create-client.ts +37 -0
- package/src/kernel-zerodev/constants.ts +95 -0
- package/src/kernel-zerodev/errors.ts +13 -0
- package/src/kernel-zerodev/ethers-provider/ethers-provider.ts +118 -0
- package/src/kernel-zerodev/middleware/gas-estimator.ts +183 -0
- package/src/kernel-zerodev/middleware/paymaster.ts +66 -0
- package/src/kernel-zerodev/owner/getCustodialOwner.ts +74 -0
- package/src/kernel-zerodev/owner/getRPCProviderOwner.ts +22 -0
- package/src/kernel-zerodev/owner/index.ts +2 -0
- package/src/kernel-zerodev/owner/passkey/createPasskeyOwner.ts +98 -0
- package/src/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.ts +22 -0
- package/src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts +69 -0
- package/src/kernel-zerodev/owner/passkey/index.ts +3 -0
- package/src/kernel-zerodev/owner/passkey/types.ts +18 -0
- package/src/kernel-zerodev/owner/passkey/utils.ts +157 -0
- package/src/kernel-zerodev/paymaster/base.ts +76 -0
- package/src/kernel-zerodev/paymaster/index.ts +9 -0
- package/src/kernel-zerodev/paymaster/token-paymaster.ts +209 -0
- package/src/kernel-zerodev/paymaster/types.ts +36 -0
- package/src/kernel-zerodev/paymaster/verifying-paymaster.ts +38 -0
- package/src/kernel-zerodev/provider.ts +341 -0
- package/src/kernel-zerodev/types.ts +8 -0
- package/src/kernel-zerodev/utils/ERC4337-utils.ts +161 -0
- package/src/kernel-zerodev/utils/calc-pre-verification-gas.ts +88 -0
- package/src/kernel-zerodev/utils.ts +106 -0
- package/src/kernel-zerodev/validator/base.ts +265 -0
- package/src/kernel-zerodev/validator/ecdsa-validator.ts +117 -0
- package/src/kernel-zerodev/validator/erc165-session-key-validator.ts +127 -0
- package/src/kernel-zerodev/validator/index.ts +12 -0
- package/src/kernel-zerodev/validator/kill-switch-validator.ts +142 -0
- package/src/kernel-zerodev/validator/types.ts +36 -0
- package/src/kernel-zerodev/validator-provider/base.ts +140 -0
- package/src/kernel-zerodev/validator-provider/ecdsa-provider.ts +61 -0
- package/src/kernel-zerodev/validator-provider/erc165-session-key-provider.ts +68 -0
- package/src/kernel-zerodev/validator-provider/index.ts +12 -0
- package/src/kernel-zerodev/validator-provider/kill-switch-provider.ts +68 -0
- package/src/kernel-zerodev/validator-provider/types.ts +26 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { fromHex, } from "viem";
|
|
2
|
+
import { deepHexlify, resolveProperties, getChain, asyncPipe, noOpMiddleware, SmartAccountProvider, } from "@alchemy/aa-core";
|
|
3
|
+
import { BUNDLER_URL, DEFAULT_SEND_TX_MAX_RETRIES, DEFAULT_SEND_TX_RETRY_INTERVAL_MS, ENTRYPOINT_ADDRESS, minPriorityFeePerBidDefaults, } from "./constants.js";
|
|
4
|
+
import { KernelSmartContractAccount, isKernelAccount } from "./account.js";
|
|
5
|
+
import { withZeroDevGasEstimator } from "./middleware/gas-estimator.js";
|
|
6
|
+
import { isValidRequest } from "./utils/ERC4337-utils.js";
|
|
7
|
+
import { InvalidOperation } from "./errors.js";
|
|
8
|
+
import { withZeroDevPaymasterAndData } from "./middleware/paymaster.js";
|
|
9
|
+
import { createZeroDevPublicErc4337Client } from "./client/create-client.js";
|
|
10
|
+
export var Operation;
|
|
11
|
+
(function (Operation) {
|
|
12
|
+
Operation[Operation["Call"] = 0] = "Call";
|
|
13
|
+
Operation[Operation["DelegateCall"] = 1] = "DelegateCall";
|
|
14
|
+
})(Operation || (Operation = {}));
|
|
15
|
+
export class ZeroDevProvider extends SmartAccountProvider {
|
|
16
|
+
constructor({ projectId, chain, entryPointAddress = ENTRYPOINT_ADDRESS, rpcUrl = BUNDLER_URL, account, bundlerProvider, opts, }) {
|
|
17
|
+
const _chain = typeof chain === "number" ? getChain(chain) : chain;
|
|
18
|
+
const rpcClient = createZeroDevPublicErc4337Client({
|
|
19
|
+
chain: _chain,
|
|
20
|
+
rpcUrl,
|
|
21
|
+
projectId,
|
|
22
|
+
bundlerProvider,
|
|
23
|
+
});
|
|
24
|
+
super(rpcClient, entryPointAddress, _chain, account, {
|
|
25
|
+
...opts,
|
|
26
|
+
txMaxRetries: opts?.txMaxRetries ?? 10,
|
|
27
|
+
txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,
|
|
28
|
+
minPriorityFeePerBid: opts?.minPriorityFeePerBid ??
|
|
29
|
+
minPriorityFeePerBidDefaults.get(_chain.id),
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(this, "projectId", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
writable: true,
|
|
35
|
+
value: void 0
|
|
36
|
+
});
|
|
37
|
+
Object.defineProperty(this, "sendTxMaxRetries", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
writable: true,
|
|
41
|
+
value: void 0
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(this, "sendTxRetryIntervalMs", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
configurable: true,
|
|
46
|
+
writable: true,
|
|
47
|
+
value: void 0
|
|
48
|
+
});
|
|
49
|
+
Object.defineProperty(this, "getProjectId", {
|
|
50
|
+
enumerable: true,
|
|
51
|
+
configurable: true,
|
|
52
|
+
writable: true,
|
|
53
|
+
value: () => this.projectId
|
|
54
|
+
});
|
|
55
|
+
Object.defineProperty(this, "sendTransaction", {
|
|
56
|
+
enumerable: true,
|
|
57
|
+
configurable: true,
|
|
58
|
+
writable: true,
|
|
59
|
+
value: async (request, operation = Operation.Call) => {
|
|
60
|
+
if (!request.to) {
|
|
61
|
+
throw new Error("transaction is missing to address");
|
|
62
|
+
}
|
|
63
|
+
const overrides = {};
|
|
64
|
+
if (request.maxFeePerGas) {
|
|
65
|
+
overrides.maxFeePerGas = request.maxFeePerGas;
|
|
66
|
+
}
|
|
67
|
+
if (request.maxPriorityFeePerGas) {
|
|
68
|
+
overrides.maxPriorityFeePerGas = request.maxPriorityFeePerGas;
|
|
69
|
+
}
|
|
70
|
+
const { hash } = await this.sendUserOperation({
|
|
71
|
+
target: request.to,
|
|
72
|
+
data: request.data ?? "0x",
|
|
73
|
+
value: request.value ? fromHex(request.value, "bigint") : 0n,
|
|
74
|
+
}, overrides, operation);
|
|
75
|
+
return await this.waitForUserOperationTransaction(hash);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
Object.defineProperty(this, "sendUserOperation", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
configurable: true,
|
|
81
|
+
writable: true,
|
|
82
|
+
value: async (data, overrides, operation = Operation.Call) => {
|
|
83
|
+
if (!isKernelAccount(this.account)) {
|
|
84
|
+
throw new Error("account not connected!");
|
|
85
|
+
}
|
|
86
|
+
if (!this.account.validator) {
|
|
87
|
+
throw new Error("validator not connected!");
|
|
88
|
+
}
|
|
89
|
+
let callData = "0x";
|
|
90
|
+
if (Array.isArray(data)) {
|
|
91
|
+
if (operation === Operation.Call) {
|
|
92
|
+
callData = await this.account.encodeBatchExecute(data);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw InvalidOperation;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (isKernelAccount(this.account)) {
|
|
99
|
+
if (operation === Operation.DelegateCall) {
|
|
100
|
+
callData = await this.account.encodeExecuteDelegate(data.target, data.value ?? 0n, data.data);
|
|
101
|
+
}
|
|
102
|
+
else if (operation === Operation.Call) {
|
|
103
|
+
callData = await this.account.encodeExecute(data.target, data.value ?? 0n, data.data);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
throw InvalidOperation;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
throw InvalidOperation;
|
|
111
|
+
}
|
|
112
|
+
const initCode = await this.account.getInitCode();
|
|
113
|
+
let hash = "";
|
|
114
|
+
let i = 0;
|
|
115
|
+
let maxFeePerGas = 0n;
|
|
116
|
+
let maxPriorityFeePerGas = 0n;
|
|
117
|
+
let request;
|
|
118
|
+
const nonce = await this.account.getNonce();
|
|
119
|
+
do {
|
|
120
|
+
const uoStruct = await asyncPipe(this.dummyPaymasterDataMiddleware, this.feeDataGetter, this.paymasterDataMiddleware, this.gasEstimator, this.customMiddleware ?? noOpMiddleware, async (struct) => ({ ...struct, ...overrides }))({
|
|
121
|
+
initCode,
|
|
122
|
+
sender: this.getAddress(),
|
|
123
|
+
nonce,
|
|
124
|
+
callData,
|
|
125
|
+
signature: await this.account
|
|
126
|
+
.getValidator()
|
|
127
|
+
.getDynamicDummySignature(await this.getAddress(), callData),
|
|
128
|
+
maxFeePerGas,
|
|
129
|
+
maxPriorityFeePerGas,
|
|
130
|
+
});
|
|
131
|
+
request = deepHexlify(await resolveProperties(uoStruct));
|
|
132
|
+
if (!isValidRequest(request)) {
|
|
133
|
+
throw new Error(`Request is missing parameters. All properties on UserOperationStruct must be set. uo: ${JSON.stringify(request, null, 2)}`);
|
|
134
|
+
}
|
|
135
|
+
request.signature = await this.account.validator.getSignature(request);
|
|
136
|
+
try {
|
|
137
|
+
hash = await this.rpcClient.sendUserOperation(request, this.entryPointAddress);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
if (this.isReplacementOpError(error) && i++ < this.sendTxMaxRetries) {
|
|
141
|
+
maxFeePerGas = (BigInt(request.maxFeePerGas) * 113n) / 100n;
|
|
142
|
+
maxPriorityFeePerGas =
|
|
143
|
+
(BigInt(request.maxPriorityFeePerGas) * 113n) / 100n;
|
|
144
|
+
console.log(`After ${this.sendTxRetryIntervalMs / 60000} minutes, resending tx with Increased Gas fees: maxFeePerGas: ${maxFeePerGas}, maxPriorityFeePerGas: ${maxPriorityFeePerGas}`);
|
|
145
|
+
await new Promise((resolve) => setTimeout(resolve, this.sendTxRetryIntervalMs));
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
throw this.unwrapError(error);
|
|
149
|
+
}
|
|
150
|
+
} while (hash === "");
|
|
151
|
+
return {
|
|
152
|
+
hash,
|
|
153
|
+
request,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
Object.defineProperty(this, "getAccount", {
|
|
158
|
+
enumerable: true,
|
|
159
|
+
configurable: true,
|
|
160
|
+
writable: true,
|
|
161
|
+
value: () => {
|
|
162
|
+
if (!isKernelAccount(this.account)) {
|
|
163
|
+
throw new Error("account not connected!");
|
|
164
|
+
}
|
|
165
|
+
return this.account;
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
Object.defineProperty(this, "dummyPaymasterDataMiddleware", {
|
|
169
|
+
enumerable: true,
|
|
170
|
+
configurable: true,
|
|
171
|
+
writable: true,
|
|
172
|
+
value: async (struct) => {
|
|
173
|
+
struct.paymasterAndData =
|
|
174
|
+
"0xfe7dbcab8aaee4eb67943c1e6be95b1d065985c6000000000000000000000000000000000000000000000000000001869aa31cf400000000000000000000000000000000000000000000000000000000000000007dfe2190f34af27b265bae608717cdc9368b471fc0c097ab7b4088f255b4961e57b039e7e571b15221081c5dce7bcb93459b27a3ab65d2f8a889f4a40b4022801b";
|
|
175
|
+
return struct;
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
Object.defineProperty(this, "request", {
|
|
179
|
+
enumerable: true,
|
|
180
|
+
configurable: true,
|
|
181
|
+
writable: true,
|
|
182
|
+
value: async (args) => {
|
|
183
|
+
const { method, params } = args;
|
|
184
|
+
switch (method) {
|
|
185
|
+
case "eth_chainId":
|
|
186
|
+
return this.chain.id;
|
|
187
|
+
case "eth_sendTransaction":
|
|
188
|
+
const [tx] = params;
|
|
189
|
+
return this.sendTransaction(tx);
|
|
190
|
+
case "personal_sign":
|
|
191
|
+
if (!this.account) {
|
|
192
|
+
throw new Error("account not connected!");
|
|
193
|
+
}
|
|
194
|
+
const [data, address] = params;
|
|
195
|
+
if (address !== (await this.getAddress())) {
|
|
196
|
+
throw new Error("cannot sign for address that is not the current account");
|
|
197
|
+
}
|
|
198
|
+
return this.account.signWithEip6492(data);
|
|
199
|
+
default:
|
|
200
|
+
return this.rpcClient.request(args);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
this.projectId = projectId;
|
|
205
|
+
this.sendTxMaxRetries =
|
|
206
|
+
opts?.sendTxMaxRetries ?? DEFAULT_SEND_TX_MAX_RETRIES;
|
|
207
|
+
this.sendTxRetryIntervalMs =
|
|
208
|
+
opts?.sendTxRetryIntervalMs ?? DEFAULT_SEND_TX_RETRY_INTERVAL_MS;
|
|
209
|
+
withZeroDevGasEstimator(this);
|
|
210
|
+
}
|
|
211
|
+
isReplacementOpError(errorIn) {
|
|
212
|
+
if (errorIn.cause != null) {
|
|
213
|
+
const failedOpMessage = errorIn?.cause?.message;
|
|
214
|
+
return ((failedOpMessage?.includes("replacement op must increase maxFeePerGas and MaxPriorityFeePerGas") ||
|
|
215
|
+
failedOpMessage?.match(/.*replacement.*underpriced.*/) !== null) ??
|
|
216
|
+
false);
|
|
217
|
+
}
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
unwrapError(errorIn) {
|
|
221
|
+
if (errorIn?.cause != null) {
|
|
222
|
+
let paymasterInfo = "";
|
|
223
|
+
let failedOpMessage = errorIn?.cause?.message;
|
|
224
|
+
if (failedOpMessage?.includes("FailedOp") === true) {
|
|
225
|
+
const matched = failedOpMessage.match(/FailedOp\((.*)\)/);
|
|
226
|
+
if (matched != null) {
|
|
227
|
+
const split = matched[1].split(",");
|
|
228
|
+
paymasterInfo = `(paymaster address: ${split[1]})`;
|
|
229
|
+
failedOpMessage = split[2];
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const error = new Error(`The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo}`);
|
|
233
|
+
error.stack = errorIn.stack;
|
|
234
|
+
return error;
|
|
235
|
+
}
|
|
236
|
+
return errorIn;
|
|
237
|
+
}
|
|
238
|
+
withZeroDevPaymasterAndData(config) {
|
|
239
|
+
if (!this.isConnected()) {
|
|
240
|
+
throw new Error("ZeroDevProvider: account is not set, did you call `connect` first?");
|
|
241
|
+
}
|
|
242
|
+
return withZeroDevPaymasterAndData(this, config);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n fromHex,\n type Address,\n type Chain,\n type Hash,\n type Hex,\n type HttpTransport,\n type RpcTransactionRequest,\n} from \"viem\";\nimport {\n deepHexlify,\n resolveProperties,\n type SmartAccountProviderOpts,\n getChain,\n type UserOperationCallData,\n type BatchUserOperationCallData,\n type SendUserOperationResult,\n asyncPipe,\n noOpMiddleware,\n type UserOperationStruct,\n type BytesLike,\n SmartAccountProvider,\n type AccountMiddlewareFn,\n type UserOperationOverrides,\n} from \"@alchemy/aa-core\";\nimport {\n BUNDLER_URL,\n DEFAULT_SEND_TX_MAX_RETRIES,\n DEFAULT_SEND_TX_RETRY_INTERVAL_MS,\n ENTRYPOINT_ADDRESS,\n minPriorityFeePerBidDefaults,\n} from \"./constants.js\";\nimport { KernelSmartContractAccount, isKernelAccount } from \"./account.js\";\nimport { withZeroDevGasEstimator } from \"./middleware/gas-estimator.js\";\nimport { isValidRequest } from \"./utils/ERC4337-utils.js\";\nimport { InvalidOperation } from \"./errors.js\";\nimport { withZeroDevPaymasterAndData } from \"./middleware/paymaster.js\";\nimport { createZeroDevPublicErc4337Client } from \"./client/create-client.js\";\nimport type {\n PaymasterAndBundlerProviders,\n PaymasterConfig,\n PaymasterPolicy,\n} from \"./paymaster/types.js\";\n\nexport type ZeroDevProviderConfig = {\n projectId: string;\n chain: Chain | number;\n entryPointAddress?: Address;\n rpcUrl?: string;\n account?: KernelSmartContractAccount;\n bundlerProvider?: PaymasterAndBundlerProviders;\n opts?: SmartAccountProviderOpts & {\n sendTxMaxRetries?: number;\n sendTxRetryIntervalMs?: number;\n };\n};\n\nexport enum Operation {\n Call,\n DelegateCall,\n}\n\ntype UserOpDataOperationTypes<T> = T extends UserOperationCallData\n ? Operation.Call | Operation.DelegateCall\n : T extends BatchUserOperationCallData\n ? Operation.Call\n : never;\n\nexport class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {\n protected projectId: string;\n protected sendTxMaxRetries: number;\n protected sendTxRetryIntervalMs: number;\n\n constructor({\n projectId,\n chain,\n entryPointAddress = ENTRYPOINT_ADDRESS,\n rpcUrl = BUNDLER_URL,\n account,\n bundlerProvider,\n opts,\n }: ZeroDevProviderConfig) {\n const _chain = typeof chain === \"number\" ? getChain(chain) : chain;\n const rpcClient = createZeroDevPublicErc4337Client({\n chain: _chain,\n rpcUrl,\n projectId,\n bundlerProvider,\n });\n\n super(rpcClient, entryPointAddress, _chain, account, {\n ...opts,\n txMaxRetries: opts?.txMaxRetries ?? 10,\n txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,\n minPriorityFeePerBid:\n opts?.minPriorityFeePerBid ??\n minPriorityFeePerBidDefaults.get(_chain.id),\n });\n\n this.projectId = projectId;\n this.sendTxMaxRetries =\n opts?.sendTxMaxRetries ?? DEFAULT_SEND_TX_MAX_RETRIES;\n this.sendTxRetryIntervalMs =\n opts?.sendTxRetryIntervalMs ?? DEFAULT_SEND_TX_RETRY_INTERVAL_MS;\n\n withZeroDevGasEstimator(this);\n }\n\n getProjectId = (): string => this.projectId;\n\n sendTransaction = async (\n request: RpcTransactionRequest,\n operation: UserOpDataOperationTypes<UserOperationCallData> = Operation.Call\n ): Promise<Hash> => {\n if (!request.to) {\n throw new Error(\"transaction is missing to address\");\n }\n\n const overrides: UserOperationOverrides = {};\n if (request.maxFeePerGas) {\n overrides.maxFeePerGas = request.maxFeePerGas;\n }\n if (request.maxPriorityFeePerGas) {\n overrides.maxPriorityFeePerGas = request.maxPriorityFeePerGas;\n }\n\n const { hash } = await this.sendUserOperation(\n {\n target: request.to,\n data: request.data ?? \"0x\",\n value: request.value ? fromHex(request.value, \"bigint\") : 0n,\n },\n overrides,\n operation\n );\n\n return await this.waitForUserOperationTransaction(hash as Hash);\n };\n\n sendUserOperation = async <\n T extends UserOperationCallData | BatchUserOperationCallData\n >(\n data: T,\n overrides?: UserOperationOverrides,\n operation: UserOpDataOperationTypes<T> = Operation.Call as UserOpDataOperationTypes<T>\n ): Promise<SendUserOperationResult> => {\n if (!isKernelAccount(this.account)) {\n throw new Error(\"account not connected!\");\n }\n if (!this.account.validator) {\n throw new Error(\"validator not connected!\");\n }\n\n let callData: BytesLike = \"0x\";\n\n if (Array.isArray(data)) {\n if (operation === Operation.Call) {\n callData = await this.account.encodeBatchExecute(data);\n } else {\n throw InvalidOperation;\n }\n } else if (isKernelAccount(this.account)) {\n if (operation === Operation.DelegateCall) {\n callData = await this.account.encodeExecuteDelegate(\n data.target,\n data.value ?? 0n,\n data.data\n );\n } else if (operation === Operation.Call) {\n callData = await this.account.encodeExecute(\n data.target,\n data.value ?? 0n,\n data.data\n );\n } else {\n throw InvalidOperation;\n }\n } else {\n throw InvalidOperation;\n }\n\n const initCode = await this.account.getInitCode();\n let hash: string = \"\";\n let i = 0;\n let maxFeePerGas = 0n;\n let maxPriorityFeePerGas = 0n;\n let request: UserOperationStruct;\n\n const nonce = await this.account.getNonce();\n do {\n const uoStruct = await asyncPipe(\n this.dummyPaymasterDataMiddleware,\n this.feeDataGetter,\n this.paymasterDataMiddleware,\n this.gasEstimator,\n this.customMiddleware ?? noOpMiddleware,\n async (struct) => ({ ...struct, ...overrides })\n )({\n initCode,\n sender: this.getAddress(),\n nonce,\n callData,\n signature: await this.account\n .getValidator()\n .getDynamicDummySignature(await this.getAddress(), callData as Hex),\n maxFeePerGas,\n maxPriorityFeePerGas,\n } as UserOperationStruct);\n request = deepHexlify(await resolveProperties(uoStruct));\n\n if (!isValidRequest(request)) {\n // this pretty prints the uo\n throw new Error(\n `Request is missing parameters. All properties on UserOperationStruct must be set. uo: ${JSON.stringify(\n request,\n null,\n 2\n )}`\n );\n }\n\n request.signature = await this.account.validator.getSignature(request);\n try {\n hash = await this.rpcClient.sendUserOperation(\n request,\n this.entryPointAddress\n );\n } catch (error: any) {\n if (this.isReplacementOpError(error) && i++ < this.sendTxMaxRetries) {\n maxFeePerGas = (BigInt(request.maxFeePerGas) * 113n) / 100n;\n maxPriorityFeePerGas =\n (BigInt(request.maxPriorityFeePerGas) * 113n) / 100n;\n console.log(\n `After ${\n this.sendTxRetryIntervalMs / 60000\n } minutes, resending tx with Increased Gas fees: maxFeePerGas: ${maxFeePerGas}, maxPriorityFeePerGas: ${maxPriorityFeePerGas}`\n );\n await new Promise((resolve) =>\n setTimeout(resolve, this.sendTxRetryIntervalMs)\n );\n continue;\n }\n throw this.unwrapError(error);\n }\n } while (hash === \"\");\n\n return {\n hash,\n request,\n };\n };\n\n isReplacementOpError(errorIn: any): boolean {\n if (errorIn.cause != null) {\n const failedOpMessage: string | undefined = errorIn?.cause?.message;\n return (\n (failedOpMessage?.includes(\n \"replacement op must increase maxFeePerGas and MaxPriorityFeePerGas\"\n ) ||\n failedOpMessage?.match(/.*replacement.*underpriced.*/) !== null) ??\n false\n );\n }\n return false;\n }\n\n unwrapError(errorIn: any): Error {\n if (errorIn?.cause != null) {\n let paymasterInfo: string = \"\";\n let failedOpMessage: string | undefined = errorIn?.cause?.message;\n if (failedOpMessage?.includes(\"FailedOp\") === true) {\n // TODO: better error extraction methods will be needed\n const matched = failedOpMessage.match(/FailedOp\\((.*)\\)/);\n if (matched != null) {\n const split = matched[1].split(\",\");\n paymasterInfo = `(paymaster address: ${split[1]})`;\n failedOpMessage = split[2];\n }\n }\n const error = new Error(\n `The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo}`\n );\n error.stack = errorIn.stack;\n return error;\n }\n return errorIn;\n }\n\n getAccount: () => KernelSmartContractAccount = () => {\n if (!isKernelAccount(this.account)) {\n throw new Error(\"account not connected!\");\n }\n return this.account;\n };\n\n dummyPaymasterDataMiddleware: AccountMiddlewareFn = async (\n struct: UserOperationStruct\n ): Promise<UserOperationStruct> => {\n struct.paymasterAndData =\n \"0xfe7dbcab8aaee4eb67943c1e6be95b1d065985c6000000000000000000000000000000000000000000000000000001869aa31cf400000000000000000000000000000000000000000000000000000000000000007dfe2190f34af27b265bae608717cdc9368b471fc0c097ab7b4088f255b4961e57b039e7e571b15221081c5dce7bcb93459b27a3ab65d2f8a889f4a40b4022801b\";\n return struct;\n };\n\n withZeroDevPaymasterAndData(config: PaymasterConfig<PaymasterPolicy>) {\n if (!this.isConnected()) {\n throw new Error(\n \"ZeroDevProvider: account is not set, did you call `connect` first?\"\n );\n }\n\n return withZeroDevPaymasterAndData(this, config);\n }\n\n request: (args: { method: string; params?: any[] }) => Promise<any> = async (\n args\n ) => {\n const { method, params } = args;\n switch (method) {\n case \"eth_chainId\":\n return this.chain.id;\n case \"eth_sendTransaction\":\n const [tx] = params as [RpcTransactionRequest];\n return this.sendTransaction(tx);\n case \"personal_sign\":\n if (!this.account) {\n throw new Error(\"account not connected!\");\n }\n const [data, address] = params!;\n if (address !== (await this.getAddress())) {\n throw new Error(\n \"cannot sign for address that is not the current account\"\n );\n }\n // @ts-ignore\n return this.account.signWithEip6492(data);\n default:\n // @ts-ignore\n return this.rpcClient.request(args);\n }\n };\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type WithOptional<T, K extends keyof T> = Pick<Partial<T>, K>;
|
|
2
|
+
export type WithRequired<T, K extends keyof T> = Required<Pick<T, K>>;
|
|
3
|
+
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
4
|
+
export type RequiredKeys<T> = {
|
|
5
|
+
[K in keyof T]-?: {} extends Pick<T, K> ? never : K;
|
|
6
|
+
}[keyof T];
|
|
7
|
+
export type RequiredProps<T> = Pick<T, RequiredKeys<T>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/types.ts"],"names":[],"mappings":"","sourcesContent":["export type WithOptional<T, K extends keyof T> = Pick<Partial<T>, K>;\nexport type WithRequired<T, K extends keyof T> = Required<Pick<T, K>>;\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> &\n Partial<Pick<T, K>>;\nexport type RequiredKeys<T> = {\n [K in keyof T]-?: {} extends Pick<T, K> ? never : K;\n}[keyof T];\nexport type RequiredProps<T> = Pick<T, RequiredKeys<T>>;\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type UserOperationRequest, type UserOperationStruct } from "@alchemy/aa-core";
|
|
2
|
+
import type { NotPromise } from "./calc-pre-verification-gas.js";
|
|
3
|
+
export declare function packUserOp(op: NotPromise<UserOperationStruct>, forSignature?: boolean): string;
|
|
4
|
+
export declare function isValidRequest(request: UserOperationStruct): request is UserOperationRequest;
|
|
5
|
+
export declare const hexifyUserOp: (resolvedUserOp: any) => {};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { EntryPointAbi, } from "@alchemy/aa-core";
|
|
2
|
+
import { encodeAbiParameters, parseAbiParameters, keccak256, toHex, } from "viem";
|
|
3
|
+
const validateUserOpMethod = "simulateValidation";
|
|
4
|
+
const UserOpType = EntryPointAbi.find((entry) => entry.name === validateUserOpMethod)?.inputs[0];
|
|
5
|
+
function encode(typevalues, forSignature) {
|
|
6
|
+
const types = typevalues
|
|
7
|
+
.map((typevalue) => typevalue.type === "bytes" && forSignature ? "bytes32" : typevalue.type)
|
|
8
|
+
.join(", ");
|
|
9
|
+
const values = typevalues.map((typevalue) => typevalue.type === "bytes" && forSignature
|
|
10
|
+
? keccak256(typevalue.val)
|
|
11
|
+
: typevalue.val);
|
|
12
|
+
return encodeAbiParameters(parseAbiParameters(types), values);
|
|
13
|
+
}
|
|
14
|
+
export function packUserOp(op, forSignature = true) {
|
|
15
|
+
if (forSignature) {
|
|
16
|
+
const userOpType = {
|
|
17
|
+
components: [
|
|
18
|
+
{
|
|
19
|
+
type: "address",
|
|
20
|
+
name: "sender",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: "uint256",
|
|
24
|
+
name: "nonce",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: "bytes",
|
|
28
|
+
name: "initCode",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: "bytes",
|
|
32
|
+
name: "callData",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
type: "uint256",
|
|
36
|
+
name: "callGasLimit",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
type: "uint256",
|
|
40
|
+
name: "verificationGasLimit",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
type: "uint256",
|
|
44
|
+
name: "preVerificationGas",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
type: "uint256",
|
|
48
|
+
name: "maxFeePerGas",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: "uint256",
|
|
52
|
+
name: "maxPriorityFeePerGas",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: "bytes",
|
|
56
|
+
name: "paymasterAndData",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: "bytes",
|
|
60
|
+
name: "signature",
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
name: "userOp",
|
|
64
|
+
type: "tuple",
|
|
65
|
+
};
|
|
66
|
+
let encoded = encodeAbiParameters(userOpType.components, Object.values({
|
|
67
|
+
...op,
|
|
68
|
+
signature: "0x",
|
|
69
|
+
}));
|
|
70
|
+
encoded = ("0x" + encoded.slice(66, encoded.length - 64));
|
|
71
|
+
return encoded;
|
|
72
|
+
}
|
|
73
|
+
const typevalues = UserOpType.components.map((c) => ({
|
|
74
|
+
type: c.type,
|
|
75
|
+
val: op[c.name],
|
|
76
|
+
}));
|
|
77
|
+
return encode(typevalues, forSignature);
|
|
78
|
+
}
|
|
79
|
+
export function isValidRequest(request) {
|
|
80
|
+
return (!!request.callGasLimit &&
|
|
81
|
+
!!request.maxFeePerGas &&
|
|
82
|
+
request.maxPriorityFeePerGas != null &&
|
|
83
|
+
!!request.preVerificationGas &&
|
|
84
|
+
!!request.verificationGasLimit);
|
|
85
|
+
}
|
|
86
|
+
export const hexifyUserOp = (resolvedUserOp) => {
|
|
87
|
+
return Object.keys(resolvedUserOp)
|
|
88
|
+
.map((key) => {
|
|
89
|
+
let val = resolvedUserOp[key];
|
|
90
|
+
if (typeof val !== "string" || !val.startsWith("0x")) {
|
|
91
|
+
val = toHex(val);
|
|
92
|
+
}
|
|
93
|
+
return [key, val];
|
|
94
|
+
})
|
|
95
|
+
.reduce((set, [k, v]) => ({
|
|
96
|
+
...set,
|
|
97
|
+
[k]: v,
|
|
98
|
+
}), {});
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=ERC4337-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ERC4337-utils.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/utils/ERC4337-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EntryPointAbi,\n type UserOperationRequest,\n type UserOperationStruct,\n} from \"@alchemy/aa-core\";\nimport type { NotPromise } from \"./calc-pre-verification-gas.js\";\nimport {\n encodeAbiParameters,\n parseAbiParameters,\n type Hex,\n keccak256,\n toHex,\n} from \"viem\";\n\n// UserOperation is the first parameter of validateUseOp\nconst validateUserOpMethod = \"simulateValidation\";\n\nconst UserOpType = EntryPointAbi.find(\n // @ts-ignore\n (entry) => entry.name === validateUserOpMethod\n // @ts-ignore\n)?.inputs[0];\n\nfunction encode(\n typevalues: Array<{ type: string; val: any }>,\n forSignature: boolean\n): string {\n const types = typevalues\n .map((typevalue) =>\n typevalue.type === \"bytes\" && forSignature ? \"bytes32\" : typevalue.type\n )\n .join(\", \");\n const values = typevalues.map((typevalue) =>\n typevalue.type === \"bytes\" && forSignature\n ? keccak256(typevalue.val)\n : typevalue.val\n );\n return encodeAbiParameters(parseAbiParameters(types), values);\n}\n\n/**\n * pack the userOperation\n * @param op\n * @param forSignature \"true\" if the hash is needed to calculate the getUserOpHash()\n * \"false\" to pack entire UserOp, for calculating the calldata cost of putting it on-chain.\n */\nexport function packUserOp(\n op: NotPromise<UserOperationStruct>,\n forSignature = true\n): string {\n if (forSignature) {\n // lighter signature scheme (must match UserOperation#pack): do encode a zero-length signature, but strip afterwards the appended zero-length value\n const userOpType = {\n components: [\n {\n type: \"address\",\n name: \"sender\",\n },\n {\n type: \"uint256\",\n name: \"nonce\",\n },\n {\n type: \"bytes\",\n name: \"initCode\",\n },\n {\n type: \"bytes\",\n name: \"callData\",\n },\n {\n type: \"uint256\",\n name: \"callGasLimit\",\n },\n {\n type: \"uint256\",\n name: \"verificationGasLimit\",\n },\n {\n type: \"uint256\",\n name: \"preVerificationGas\",\n },\n {\n type: \"uint256\",\n name: \"maxFeePerGas\",\n },\n {\n type: \"uint256\",\n name: \"maxPriorityFeePerGas\",\n },\n {\n type: \"bytes\",\n name: \"paymasterAndData\",\n },\n {\n type: \"bytes\",\n name: \"signature\",\n },\n ],\n name: \"userOp\",\n type: \"tuple\",\n };\n // console.log('hard-coded userOpType', userOpType)\n // console.log('from ABI userOpType', UserOpType)\n let encoded = encodeAbiParameters(\n userOpType.components,\n Object.values({\n ...op,\n signature: \"0x\",\n })\n );\n // remove leading word (total length) and trailing word (zero-length signature)\n encoded = (\"0x\" + encoded.slice(66, encoded.length - 64)) as Hex;\n return encoded;\n }\n\n const typevalues = (UserOpType as any).components.map(\n (c: { name: keyof typeof op; type: string }) => ({\n type: c.type,\n val: op[c.name],\n })\n );\n return encode(typevalues, forSignature);\n}\n\n/**\n * Utility method for asserting a {@link UserOperationStruct} is a {@link UserOperationRequest}\n *\n * @param request a {@link UserOperationStruct} to validate\n * @returns a type guard that asserts the {@link UserOperationStruct} is a {@link UserOperationRequest}\n */\nexport function isValidRequest(\n request: UserOperationStruct\n): request is UserOperationRequest {\n // These are the only ones marked as optional in the interface above\n return (\n !!request.callGasLimit &&\n !!request.maxFeePerGas &&\n request.maxPriorityFeePerGas != null &&\n !!request.preVerificationGas &&\n !!request.verificationGasLimit\n );\n}\n\nexport const hexifyUserOp = (resolvedUserOp: any) => {\n return Object.keys(resolvedUserOp)\n .map((key) => {\n let val = resolvedUserOp[key];\n if (typeof val !== \"string\" || !val.startsWith(\"0x\")) {\n val = toHex(val);\n }\n return [key, val];\n })\n .reduce(\n (set, [k, v]) => ({\n ...set,\n [k]: v,\n }),\n {}\n );\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UserOperationStruct } from "@alchemy/aa-core";
|
|
2
|
+
export interface GasOverheads {
|
|
3
|
+
fixed: number;
|
|
4
|
+
perUserOp: number;
|
|
5
|
+
perUserOpWord: number;
|
|
6
|
+
zeroByte: number;
|
|
7
|
+
nonZeroByte: number;
|
|
8
|
+
bundleSize: number;
|
|
9
|
+
sigSize: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const DefaultGasOverheads: GasOverheads;
|
|
12
|
+
export type NotPromise<T> = {
|
|
13
|
+
[P in keyof T]: Exclude<T[P], Promise<any>>;
|
|
14
|
+
};
|
|
15
|
+
export declare function calcPreVerificationGas(userOp: Partial<NotPromise<UserOperationStruct>>, overheads?: Partial<GasOverheads>): number;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { toBytes, toHex } from "viem";
|
|
2
|
+
import { packUserOp } from "./ERC4337-utils.js";
|
|
3
|
+
export const DefaultGasOverheads = {
|
|
4
|
+
fixed: 21000,
|
|
5
|
+
perUserOp: 18300,
|
|
6
|
+
perUserOpWord: 4,
|
|
7
|
+
zeroByte: 4,
|
|
8
|
+
nonZeroByte: 16,
|
|
9
|
+
bundleSize: 1,
|
|
10
|
+
sigSize: 65,
|
|
11
|
+
};
|
|
12
|
+
export function calcPreVerificationGas(userOp, overheads) {
|
|
13
|
+
const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) };
|
|
14
|
+
const p = {
|
|
15
|
+
preVerificationGas: 21000,
|
|
16
|
+
signature: toHex(Buffer.alloc(ov.sigSize, 1)),
|
|
17
|
+
...userOp,
|
|
18
|
+
};
|
|
19
|
+
const packed = toBytes(packUserOp(p, false));
|
|
20
|
+
const callDataCost = packed
|
|
21
|
+
.map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte))
|
|
22
|
+
.reduce((sum, x) => sum + x);
|
|
23
|
+
const ret = Math.round(callDataCost +
|
|
24
|
+
ov.fixed / ov.bundleSize +
|
|
25
|
+
ov.perUserOp +
|
|
26
|
+
ov.perUserOpWord * packed.length);
|
|
27
|
+
return ret;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=calc-pre-verification-gas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calc-pre-verification-gas.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/utils/calc-pre-verification-gas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAyChD,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,EAAE;CACZ,CAAC;AAaF,MAAM,UAAU,sBAAsB,CACpC,MAAgD,EAChD,SAAiC;IAEjC,MAAM,EAAE,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;IAC5D,MAAM,CAAC,GAAoC;QAEzC,kBAAkB,EAAE,KAAK;QACzB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,GAAG,MAAM;KACH,CAAC;IAET,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,MAAM;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;SACpD,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY;QACV,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,UAAU;QACxB,EAAE,CAAC,SAAS;QACZ,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CACnC,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import type { UserOperationStruct } from \"@alchemy/aa-core\";\nimport { toBytes, toHex } from \"viem\";\nimport { packUserOp } from \"./ERC4337-utils.js\";\n\nexport interface GasOverheads {\n /**\n * fixed overhead for entire handleOp bundle.\n */\n fixed: number;\n\n /**\n * per userOp overhead, added on top of the above fixed per-bundle.\n */\n perUserOp: number;\n\n /**\n * overhead for userOp word (32 bytes) block\n */\n perUserOpWord: number;\n\n // perCallDataWord: number\n\n /**\n * zero byte cost, for calldata gas cost calculations\n */\n zeroByte: number;\n\n /**\n * non-zero byte cost, for calldata gas cost calculations\n */\n nonZeroByte: number;\n\n /**\n * expected bundle size, to split per-bundle overhead between all ops.\n */\n bundleSize: number;\n\n /**\n * expected length of the userOp signature.\n */\n sigSize: number;\n}\n\nexport const DefaultGasOverheads: GasOverheads = {\n fixed: 21000,\n perUserOp: 18300,\n perUserOpWord: 4,\n zeroByte: 4,\n nonZeroByte: 16,\n bundleSize: 1,\n sigSize: 65,\n};\n\nexport type NotPromise<T> = {\n [P in keyof T]: Exclude<T[P], Promise<any>>;\n};\n\n/**\n * calculate the preVerificationGas of the given UserOperation\n * preVerificationGas (by definition) is the cost overhead that can't be calculated on-chain.\n * it is based on parameters that are defined by the Ethereum protocol for external transactions.\n * @param userOp filled userOp to calculate. The only possible missing fields can be the signature and preVerificationGas itself\n * @param overheads gas overheads to use, to override the default values\n */\nexport function calcPreVerificationGas(\n userOp: Partial<NotPromise<UserOperationStruct>>,\n overheads?: Partial<GasOverheads>\n): number {\n const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) };\n const p: NotPromise<UserOperationStruct> = {\n // dummy values, in case the UserOp is incomplete.\n preVerificationGas: 21000, // dummy value, just for calldata cost\n signature: toHex(Buffer.alloc(ov.sigSize, 1)), // dummy signature\n ...userOp,\n } as any;\n\n const packed = toBytes(packUserOp(p, false));\n const callDataCost = packed\n .map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte))\n .reduce((sum, x) => sum + x);\n const ret = Math.round(\n callDataCost +\n ov.fixed / ov.bundleSize +\n ov.perUserOp +\n ov.perUserOpWord * packed.length\n );\n return ret;\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Hex, type WalletClient } from "viem";
|
|
2
|
+
import type { SmartAccountSigner, UserOperationCallData } from "@alchemy/aa-core";
|
|
3
|
+
import { Signer } from "@ethersproject/abstract-signer";
|
|
4
|
+
import { Wallet } from "@ethersproject/wallet";
|
|
5
|
+
import type { SupportedGasToken } from "./paymaster/types.js";
|
|
6
|
+
export type UserOperationCallDataWithDelegate = UserOperationCallData & {
|
|
7
|
+
delegateCall?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type BatchUserOperationCallDataWithDelegate = UserOperationCallDataWithDelegate[];
|
|
10
|
+
export declare const encodeMultiSend: (_txs: BatchUserOperationCallDataWithDelegate) => Hex;
|
|
11
|
+
export declare function getGasTokenAddress(gasToken: SupportedGasToken, chainId: number): Hex | undefined;
|
|
12
|
+
export declare const convertWalletClientToAccountSigner: (client: WalletClient) => SmartAccountSigner;
|
|
13
|
+
export declare const isWallet: (signer: any) => signer is Wallet;
|
|
14
|
+
export declare const convertEthersSignerToAccountSigner: (signer: Signer | Wallet) => SmartAccountSigner;
|
|
15
|
+
export declare const randomHexString: (length: number) => Hex;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { encodePacked, fromBytes, toBytes, toHex, } from "viem";
|
|
2
|
+
import { Signer } from "@ethersproject/abstract-signer";
|
|
3
|
+
import { Wallet } from "@ethersproject/wallet";
|
|
4
|
+
import { gasTokenChainAddresses } from "./constants.js";
|
|
5
|
+
const encodeCall = (_tx) => {
|
|
6
|
+
const data = toBytes(_tx.data);
|
|
7
|
+
const encoded = encodePacked(["uint8", "address", "uint256", "uint256", "bytes"], [
|
|
8
|
+
_tx.delegateCall ? 1 : 0,
|
|
9
|
+
_tx.target,
|
|
10
|
+
_tx.value || BigInt(0),
|
|
11
|
+
BigInt(data.length),
|
|
12
|
+
fromBytes(data, "hex"),
|
|
13
|
+
]);
|
|
14
|
+
return encoded.slice(2);
|
|
15
|
+
};
|
|
16
|
+
export const encodeMultiSend = (_txs) => {
|
|
17
|
+
return ("0x" + _txs.map((tx) => encodeCall(tx)).join(""));
|
|
18
|
+
};
|
|
19
|
+
export function getGasTokenAddress(gasToken, chainId) {
|
|
20
|
+
if (gasToken === "TEST_ERC20") {
|
|
21
|
+
return "0x3870419Ba2BBf0127060bCB37f69A1b1C090992B";
|
|
22
|
+
}
|
|
23
|
+
return gasTokenChainAddresses[gasToken][chainId] || undefined;
|
|
24
|
+
}
|
|
25
|
+
export const convertWalletClientToAccountSigner = (client) => {
|
|
26
|
+
return {
|
|
27
|
+
getAddress: async () => Promise.resolve((await client.getAddresses())[0]),
|
|
28
|
+
signMessage: async (message) => (await client.signMessage({
|
|
29
|
+
account: client.account,
|
|
30
|
+
message: typeof message === "string"
|
|
31
|
+
? message
|
|
32
|
+
: {
|
|
33
|
+
raw: message,
|
|
34
|
+
},
|
|
35
|
+
})),
|
|
36
|
+
signTypedData: async (params) => await client.signTypedData({ ...params, account: client.account }),
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export const isWallet = (signer) => signer && signer._signTypedData !== undefined;
|
|
40
|
+
export const convertEthersSignerToAccountSigner = (signer) => {
|
|
41
|
+
return {
|
|
42
|
+
getAddress: async () => Promise.resolve((await signer.getAddress())),
|
|
43
|
+
signMessage: async (msg) => (await signer.signMessage(msg)),
|
|
44
|
+
signTypedData: async (params) => {
|
|
45
|
+
if (!isWallet(signer)) {
|
|
46
|
+
throw Error("signTypedData method not implemented in signer");
|
|
47
|
+
}
|
|
48
|
+
return (await signer._signTypedData(params.domain, params.types, params.message));
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
export const randomHexString = (length) => toHex(Array.from({ length }, () => Math.floor(Math.random() * 16).toString(16)).join(""));
|
|
53
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n encodePacked,\n fromBytes,\n toBytes,\n type Hex,\n type WalletClient,\n toHex,\n} from \"viem\";\nimport type {\n SignTypedDataParams,\n SmartAccountSigner,\n UserOperationCallData,\n} from \"@alchemy/aa-core\";\nimport { Signer, type TypedDataField } from \"@ethersproject/abstract-signer\";\nimport { Wallet } from \"@ethersproject/wallet\";\nimport type { SupportedGasToken } from \"./paymaster/types.js\";\nimport { gasTokenChainAddresses } from \"./constants.js\";\n\nexport type UserOperationCallDataWithDelegate = UserOperationCallData & {\n delegateCall?: boolean;\n};\n\nexport type BatchUserOperationCallDataWithDelegate =\n UserOperationCallDataWithDelegate[];\n\nconst encodeCall = (_tx: UserOperationCallDataWithDelegate): string => {\n const data = toBytes(_tx.data);\n const encoded = encodePacked(\n [\"uint8\", \"address\", \"uint256\", \"uint256\", \"bytes\"],\n [\n _tx.delegateCall ? 1 : 0,\n _tx.target,\n _tx.value || BigInt(0),\n BigInt(data.length),\n fromBytes(data, \"hex\"),\n ]\n );\n return encoded.slice(2);\n};\nexport const encodeMultiSend = (\n _txs: BatchUserOperationCallDataWithDelegate\n): Hex => {\n return (\"0x\" + _txs.map((tx) => encodeCall(tx)).join(\"\")) as Hex;\n};\n\nexport function getGasTokenAddress(\n gasToken: SupportedGasToken,\n chainId: number\n): Hex | undefined {\n if (gasToken === \"TEST_ERC20\") {\n return \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\";\n }\n return gasTokenChainAddresses[gasToken][chainId] || undefined;\n}\n\nexport const convertWalletClientToAccountSigner = (\n client: WalletClient\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await client.getAddresses())[0] as `0x${string}`),\n signMessage: async (message: Uint8Array | string) =>\n (await client.signMessage({\n account: client.account!,\n message:\n typeof message === \"string\"\n ? message\n : {\n raw: message,\n },\n })) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) =>\n await client.signTypedData({ ...params, account: client.account! }),\n };\n};\n\nexport const isWallet = (signer: any): signer is Wallet =>\n signer && signer._signTypedData !== undefined;\n\nexport const convertEthersSignerToAccountSigner = (\n signer: Signer | Wallet\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await signer.getAddress()) as `0x${string}`),\n signMessage: async (msg: Uint8Array | string) =>\n (await signer.signMessage(msg)) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) => {\n if (!isWallet(signer)) {\n throw Error(\"signTypedData method not implemented in signer\");\n }\n return (await signer._signTypedData(\n params.domain!,\n params.types as unknown as Record<string, TypedDataField[]>,\n params.message\n )) as Hex;\n },\n };\n};\n\nexport const randomHexString = (length: number): Hex =>\n toHex(\n Array.from({ length }, () =>\n Math.floor(Math.random() * 16).toString(16)\n ).join(\"\")\n );\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type SmartAccountSigner, type UserOperationRequest } from "@alchemy/aa-core";
|
|
2
|
+
import { type Chain, type Hex, type Address, type PublicClient, type Transport } from "viem";
|
|
3
|
+
import type { PaymasterAndBundlerProviders } from "../paymaster/types.js";
|
|
4
|
+
export declare enum ValidatorMode {
|
|
5
|
+
sudo = "0x00000000",
|
|
6
|
+
plugin = "0x00000001",
|
|
7
|
+
enable = "0x00000002"
|
|
8
|
+
}
|
|
9
|
+
export interface KernelBaseValidatorParams {
|
|
10
|
+
projectId: string;
|
|
11
|
+
validatorAddress?: Hex;
|
|
12
|
+
mode?: ValidatorMode;
|
|
13
|
+
chain?: Chain;
|
|
14
|
+
entryPointAddress?: Address;
|
|
15
|
+
enableSignature?: Hex;
|
|
16
|
+
validUntil?: number;
|
|
17
|
+
validAfter?: number;
|
|
18
|
+
executor?: Address;
|
|
19
|
+
selector?: string;
|
|
20
|
+
rpcUrl?: string;
|
|
21
|
+
bundlerProvider?: PaymasterAndBundlerProviders;
|
|
22
|
+
}
|
|
23
|
+
export declare abstract class KernelBaseValidator {
|
|
24
|
+
readonly validatorAddress: Hex;
|
|
25
|
+
mode: ValidatorMode;
|
|
26
|
+
protected projectId: string;
|
|
27
|
+
protected chain?: Chain;
|
|
28
|
+
protected entryPointAddress: Address;
|
|
29
|
+
protected enableSignature?: Hex;
|
|
30
|
+
protected validUntil: number;
|
|
31
|
+
protected validAfter: number;
|
|
32
|
+
protected executor?: Address;
|
|
33
|
+
protected selector?: string;
|
|
34
|
+
protected rpcUrl?: string;
|
|
35
|
+
protected bundlerProvider?: PaymasterAndBundlerProviders;
|
|
36
|
+
publicClient?: PublicClient<Transport, Chain>;
|
|
37
|
+
constructor(params: KernelBaseValidatorParams);
|
|
38
|
+
abstract encodeEnable(enableData: Hex): Hex;
|
|
39
|
+
abstract encodeDisable(enableData: Hex): Hex;
|
|
40
|
+
abstract getEnableData(): Promise<Hex>;
|
|
41
|
+
abstract signMessage(message: Uint8Array | string | Hex): Promise<Hex>;
|
|
42
|
+
abstract signUserOp(userOp: UserOperationRequest): Promise<Hex>;
|
|
43
|
+
abstract signer(): Promise<SmartAccountSigner>;
|
|
44
|
+
abstract getDummyUserOpSignature(): Promise<Hex>;
|
|
45
|
+
abstract isPluginEnabled(kernelAccountAddress: Address, selector: Hex): Promise<boolean>;
|
|
46
|
+
getDynamicDummySignature(kernelAccountAddress: Address, calldata: Hex): Promise<Hex>;
|
|
47
|
+
setEnableSignature(enableSignature: Hex): void;
|
|
48
|
+
getEnableSignature(): Hex | undefined;
|
|
49
|
+
getAddress(): Hex;
|
|
50
|
+
approveExecutor(kernel: Address, selector: Hex, executor: Address, validUntil: number, validAfter: number, validator: KernelBaseValidator): Promise<Hex>;
|
|
51
|
+
resolveValidatorMode(kernelAccountAddress: Address, callData: Hex): Promise<ValidatorMode>;
|
|
52
|
+
getSignature(userOp: UserOperationRequest): Promise<Hex>;
|
|
53
|
+
}
|