@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,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VerifyingPaymaster = void 0;
|
|
4
|
+
const aa_core_1 = require("@alchemy/aa-core");
|
|
5
|
+
const base_js_1 = require("./base.js");
|
|
6
|
+
class VerifyingPaymaster extends base_js_1.Paymaster {
|
|
7
|
+
constructor(provider, _) {
|
|
8
|
+
super(provider);
|
|
9
|
+
}
|
|
10
|
+
async getPaymasterResponse(struct, paymasterProvider) {
|
|
11
|
+
try {
|
|
12
|
+
const hexifiedUserOp = (0, aa_core_1.deepHexlify)(await (0, aa_core_1.resolveProperties)(struct));
|
|
13
|
+
const paymasterResp = await this.signUserOp({
|
|
14
|
+
userOp: hexifiedUserOp,
|
|
15
|
+
paymasterProvider,
|
|
16
|
+
});
|
|
17
|
+
if (paymasterResp) {
|
|
18
|
+
return {
|
|
19
|
+
...struct,
|
|
20
|
+
...paymasterResp,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return struct;
|
|
26
|
+
}
|
|
27
|
+
return struct;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.VerifyingPaymaster = VerifyingPaymaster;
|
|
31
|
+
//# sourceMappingURL=verifying-paymaster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifying-paymaster.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/verifying-paymaster.ts"],"names":[],"mappings":";;;AAAA,8CAI0B;AAC1B,uCAAsC;AAItC,MAAa,kBAAmB,SAAQ,mBAAS;IAC/C,YACE,QAAyB,EACzB,CAAyC;QAEzC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,oBAAoB,CACxB,MAA2B,EAC3B,iBAAgD;QAEhD,IAAI;YACF,MAAM,cAAc,GAAG,IAAA,qBAAW,EAAC,MAAM,IAAA,2BAAiB,EAAC,MAAM,CAAC,CAAC,CAAC;YACpE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;gBAC1C,MAAM,EAAE,cAAc;gBACtB,iBAAiB;aAClB,CAAC,CAAC;YACH,IAAI,aAAa,EAAE;gBACjB,OAAO;oBACL,GAAG,MAAM;oBACT,GAAG,aAAa;iBACjB,CAAC;aACH;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,MAAM,CAAC;SACf;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA5BD,gDA4BC","sourcesContent":["import {\n type UserOperationStruct,\n deepHexlify,\n resolveProperties,\n} from \"@alchemy/aa-core\";\nimport { Paymaster } from \"./base.js\";\nimport type { ZeroDevProvider } from \"../provider.js\";\nimport type { PaymasterAndBundlerProviders, PaymasterConfig } from \"./types.js\";\n\nexport class VerifyingPaymaster extends Paymaster {\n constructor(\n provider: ZeroDevProvider,\n _: PaymasterConfig<\"VERIFYING_PAYMASTER\">\n ) {\n super(provider);\n }\n async getPaymasterResponse(\n struct: UserOperationStruct,\n paymasterProvider?: PaymasterAndBundlerProviders\n ): Promise<UserOperationStruct> {\n try {\n const hexifiedUserOp = deepHexlify(await resolveProperties(struct));\n const paymasterResp = await this.signUserOp({\n userOp: hexifiedUserOp,\n paymasterProvider,\n });\n if (paymasterResp) {\n return {\n ...struct,\n ...paymasterResp,\n };\n }\n } catch (error) {\n return struct;\n }\n return struct;\n }\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type Address, type Chain, type Hash, type HttpTransport, type RpcTransactionRequest } from "viem";
|
|
2
|
+
import { type SmartAccountProviderOpts, type UserOperationCallData, type BatchUserOperationCallData, type SendUserOperationResult, SmartAccountProvider, type AccountMiddlewareFn, type UserOperationOverrides } from "@alchemy/aa-core";
|
|
3
|
+
import { KernelSmartContractAccount } from "./account.js";
|
|
4
|
+
import type { PaymasterAndBundlerProviders, PaymasterConfig, PaymasterPolicy } from "./paymaster/types.js";
|
|
5
|
+
export type ZeroDevProviderConfig = {
|
|
6
|
+
projectId: string;
|
|
7
|
+
chain: Chain | number;
|
|
8
|
+
entryPointAddress?: Address;
|
|
9
|
+
rpcUrl?: string;
|
|
10
|
+
account?: KernelSmartContractAccount;
|
|
11
|
+
bundlerProvider?: PaymasterAndBundlerProviders;
|
|
12
|
+
opts?: SmartAccountProviderOpts & {
|
|
13
|
+
sendTxMaxRetries?: number;
|
|
14
|
+
sendTxRetryIntervalMs?: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare enum Operation {
|
|
18
|
+
Call = 0,
|
|
19
|
+
DelegateCall = 1
|
|
20
|
+
}
|
|
21
|
+
type UserOpDataOperationTypes<T> = T extends UserOperationCallData ? Operation.Call | Operation.DelegateCall : T extends BatchUserOperationCallData ? Operation.Call : never;
|
|
22
|
+
export declare class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
|
|
23
|
+
protected projectId: string;
|
|
24
|
+
protected sendTxMaxRetries: number;
|
|
25
|
+
protected sendTxRetryIntervalMs: number;
|
|
26
|
+
constructor({ projectId, chain, entryPointAddress, rpcUrl, account, bundlerProvider, opts, }: ZeroDevProviderConfig);
|
|
27
|
+
getProjectId: () => string;
|
|
28
|
+
sendTransaction: (request: RpcTransactionRequest, operation?: UserOpDataOperationTypes<UserOperationCallData>) => Promise<Hash>;
|
|
29
|
+
sendUserOperation: <T extends UserOperationCallData | BatchUserOperationCallData>(data: T, overrides?: UserOperationOverrides, operation?: UserOpDataOperationTypes<T>) => Promise<SendUserOperationResult>;
|
|
30
|
+
isReplacementOpError(errorIn: any): boolean;
|
|
31
|
+
unwrapError(errorIn: any): Error;
|
|
32
|
+
getAccount: () => KernelSmartContractAccount;
|
|
33
|
+
dummyPaymasterDataMiddleware: AccountMiddlewareFn;
|
|
34
|
+
withZeroDevPaymasterAndData(config: PaymasterConfig<PaymasterPolicy>): this & SmartAccountProvider<HttpTransport> & {
|
|
35
|
+
account: import("@alchemy/aa-core").BaseSmartContractAccount<HttpTransport>;
|
|
36
|
+
};
|
|
37
|
+
request: (args: {
|
|
38
|
+
method: string;
|
|
39
|
+
params?: any[];
|
|
40
|
+
}) => Promise<any>;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ZeroDevProvider = exports.Operation = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const aa_core_1 = require("@alchemy/aa-core");
|
|
6
|
+
const constants_js_1 = require("./constants.js");
|
|
7
|
+
const account_js_1 = require("./account.js");
|
|
8
|
+
const gas_estimator_js_1 = require("./middleware/gas-estimator.js");
|
|
9
|
+
const ERC4337_utils_js_1 = require("./utils/ERC4337-utils.js");
|
|
10
|
+
const errors_js_1 = require("./errors.js");
|
|
11
|
+
const paymaster_js_1 = require("./middleware/paymaster.js");
|
|
12
|
+
const create_client_js_1 = require("./client/create-client.js");
|
|
13
|
+
var Operation;
|
|
14
|
+
(function (Operation) {
|
|
15
|
+
Operation[Operation["Call"] = 0] = "Call";
|
|
16
|
+
Operation[Operation["DelegateCall"] = 1] = "DelegateCall";
|
|
17
|
+
})(Operation || (exports.Operation = Operation = {}));
|
|
18
|
+
class ZeroDevProvider extends aa_core_1.SmartAccountProvider {
|
|
19
|
+
constructor({ projectId, chain, entryPointAddress = constants_js_1.ENTRYPOINT_ADDRESS, rpcUrl = constants_js_1.BUNDLER_URL, account, bundlerProvider, opts, }) {
|
|
20
|
+
const _chain = typeof chain === "number" ? (0, aa_core_1.getChain)(chain) : chain;
|
|
21
|
+
const rpcClient = (0, create_client_js_1.createZeroDevPublicErc4337Client)({
|
|
22
|
+
chain: _chain,
|
|
23
|
+
rpcUrl,
|
|
24
|
+
projectId,
|
|
25
|
+
bundlerProvider,
|
|
26
|
+
});
|
|
27
|
+
super(rpcClient, entryPointAddress, _chain, account, {
|
|
28
|
+
...opts,
|
|
29
|
+
txMaxRetries: opts?.txMaxRetries ?? 10,
|
|
30
|
+
txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,
|
|
31
|
+
minPriorityFeePerBid: opts?.minPriorityFeePerBid ??
|
|
32
|
+
constants_js_1.minPriorityFeePerBidDefaults.get(_chain.id),
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(this, "projectId", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
writable: true,
|
|
38
|
+
value: void 0
|
|
39
|
+
});
|
|
40
|
+
Object.defineProperty(this, "sendTxMaxRetries", {
|
|
41
|
+
enumerable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
writable: true,
|
|
44
|
+
value: void 0
|
|
45
|
+
});
|
|
46
|
+
Object.defineProperty(this, "sendTxRetryIntervalMs", {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
configurable: true,
|
|
49
|
+
writable: true,
|
|
50
|
+
value: void 0
|
|
51
|
+
});
|
|
52
|
+
Object.defineProperty(this, "getProjectId", {
|
|
53
|
+
enumerable: true,
|
|
54
|
+
configurable: true,
|
|
55
|
+
writable: true,
|
|
56
|
+
value: () => this.projectId
|
|
57
|
+
});
|
|
58
|
+
Object.defineProperty(this, "sendTransaction", {
|
|
59
|
+
enumerable: true,
|
|
60
|
+
configurable: true,
|
|
61
|
+
writable: true,
|
|
62
|
+
value: async (request, operation = Operation.Call) => {
|
|
63
|
+
if (!request.to) {
|
|
64
|
+
throw new Error("transaction is missing to address");
|
|
65
|
+
}
|
|
66
|
+
const overrides = {};
|
|
67
|
+
if (request.maxFeePerGas) {
|
|
68
|
+
overrides.maxFeePerGas = request.maxFeePerGas;
|
|
69
|
+
}
|
|
70
|
+
if (request.maxPriorityFeePerGas) {
|
|
71
|
+
overrides.maxPriorityFeePerGas = request.maxPriorityFeePerGas;
|
|
72
|
+
}
|
|
73
|
+
const { hash } = await this.sendUserOperation({
|
|
74
|
+
target: request.to,
|
|
75
|
+
data: request.data ?? "0x",
|
|
76
|
+
value: request.value ? (0, viem_1.fromHex)(request.value, "bigint") : 0n,
|
|
77
|
+
}, overrides, operation);
|
|
78
|
+
return await this.waitForUserOperationTransaction(hash);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
Object.defineProperty(this, "sendUserOperation", {
|
|
82
|
+
enumerable: true,
|
|
83
|
+
configurable: true,
|
|
84
|
+
writable: true,
|
|
85
|
+
value: async (data, overrides, operation = Operation.Call) => {
|
|
86
|
+
if (!(0, account_js_1.isKernelAccount)(this.account)) {
|
|
87
|
+
throw new Error("account not connected!");
|
|
88
|
+
}
|
|
89
|
+
if (!this.account.validator) {
|
|
90
|
+
throw new Error("validator not connected!");
|
|
91
|
+
}
|
|
92
|
+
let callData = "0x";
|
|
93
|
+
if (Array.isArray(data)) {
|
|
94
|
+
if (operation === Operation.Call) {
|
|
95
|
+
callData = await this.account.encodeBatchExecute(data);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
throw errors_js_1.InvalidOperation;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else if ((0, account_js_1.isKernelAccount)(this.account)) {
|
|
102
|
+
if (operation === Operation.DelegateCall) {
|
|
103
|
+
callData = await this.account.encodeExecuteDelegate(data.target, data.value ?? 0n, data.data);
|
|
104
|
+
}
|
|
105
|
+
else if (operation === Operation.Call) {
|
|
106
|
+
callData = await this.account.encodeExecute(data.target, data.value ?? 0n, data.data);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
throw errors_js_1.InvalidOperation;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
throw errors_js_1.InvalidOperation;
|
|
114
|
+
}
|
|
115
|
+
const initCode = await this.account.getInitCode();
|
|
116
|
+
let hash = "";
|
|
117
|
+
let i = 0;
|
|
118
|
+
let maxFeePerGas = 0n;
|
|
119
|
+
let maxPriorityFeePerGas = 0n;
|
|
120
|
+
let request;
|
|
121
|
+
const nonce = await this.account.getNonce();
|
|
122
|
+
do {
|
|
123
|
+
const uoStruct = await (0, aa_core_1.asyncPipe)(this.dummyPaymasterDataMiddleware, this.feeDataGetter, this.paymasterDataMiddleware, this.gasEstimator, this.customMiddleware ?? aa_core_1.noOpMiddleware, async (struct) => ({ ...struct, ...overrides }))({
|
|
124
|
+
initCode,
|
|
125
|
+
sender: this.getAddress(),
|
|
126
|
+
nonce,
|
|
127
|
+
callData,
|
|
128
|
+
signature: await this.account
|
|
129
|
+
.getValidator()
|
|
130
|
+
.getDynamicDummySignature(await this.getAddress(), callData),
|
|
131
|
+
maxFeePerGas,
|
|
132
|
+
maxPriorityFeePerGas,
|
|
133
|
+
});
|
|
134
|
+
request = (0, aa_core_1.deepHexlify)(await (0, aa_core_1.resolveProperties)(uoStruct));
|
|
135
|
+
if (!(0, ERC4337_utils_js_1.isValidRequest)(request)) {
|
|
136
|
+
throw new Error(`Request is missing parameters. All properties on UserOperationStruct must be set. uo: ${JSON.stringify(request, null, 2)}`);
|
|
137
|
+
}
|
|
138
|
+
request.signature = await this.account.validator.getSignature(request);
|
|
139
|
+
try {
|
|
140
|
+
hash = await this.rpcClient.sendUserOperation(request, this.entryPointAddress);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (this.isReplacementOpError(error) && i++ < this.sendTxMaxRetries) {
|
|
144
|
+
maxFeePerGas = (BigInt(request.maxFeePerGas) * 113n) / 100n;
|
|
145
|
+
maxPriorityFeePerGas =
|
|
146
|
+
(BigInt(request.maxPriorityFeePerGas) * 113n) / 100n;
|
|
147
|
+
console.log(`After ${this.sendTxRetryIntervalMs / 60000} minutes, resending tx with Increased Gas fees: maxFeePerGas: ${maxFeePerGas}, maxPriorityFeePerGas: ${maxPriorityFeePerGas}`);
|
|
148
|
+
await new Promise((resolve) => setTimeout(resolve, this.sendTxRetryIntervalMs));
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
throw this.unwrapError(error);
|
|
152
|
+
}
|
|
153
|
+
} while (hash === "");
|
|
154
|
+
return {
|
|
155
|
+
hash,
|
|
156
|
+
request,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
Object.defineProperty(this, "getAccount", {
|
|
161
|
+
enumerable: true,
|
|
162
|
+
configurable: true,
|
|
163
|
+
writable: true,
|
|
164
|
+
value: () => {
|
|
165
|
+
if (!(0, account_js_1.isKernelAccount)(this.account)) {
|
|
166
|
+
throw new Error("account not connected!");
|
|
167
|
+
}
|
|
168
|
+
return this.account;
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
Object.defineProperty(this, "dummyPaymasterDataMiddleware", {
|
|
172
|
+
enumerable: true,
|
|
173
|
+
configurable: true,
|
|
174
|
+
writable: true,
|
|
175
|
+
value: async (struct) => {
|
|
176
|
+
struct.paymasterAndData =
|
|
177
|
+
"0xfe7dbcab8aaee4eb67943c1e6be95b1d065985c6000000000000000000000000000000000000000000000000000001869aa31cf400000000000000000000000000000000000000000000000000000000000000007dfe2190f34af27b265bae608717cdc9368b471fc0c097ab7b4088f255b4961e57b039e7e571b15221081c5dce7bcb93459b27a3ab65d2f8a889f4a40b4022801b";
|
|
178
|
+
return struct;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
Object.defineProperty(this, "request", {
|
|
182
|
+
enumerable: true,
|
|
183
|
+
configurable: true,
|
|
184
|
+
writable: true,
|
|
185
|
+
value: async (args) => {
|
|
186
|
+
const { method, params } = args;
|
|
187
|
+
switch (method) {
|
|
188
|
+
case "eth_chainId":
|
|
189
|
+
return this.chain.id;
|
|
190
|
+
case "eth_sendTransaction":
|
|
191
|
+
const [tx] = params;
|
|
192
|
+
return this.sendTransaction(tx);
|
|
193
|
+
case "personal_sign":
|
|
194
|
+
if (!this.account) {
|
|
195
|
+
throw new Error("account not connected!");
|
|
196
|
+
}
|
|
197
|
+
const [data, address] = params;
|
|
198
|
+
if (address !== (await this.getAddress())) {
|
|
199
|
+
throw new Error("cannot sign for address that is not the current account");
|
|
200
|
+
}
|
|
201
|
+
return this.account.signWithEip6492(data);
|
|
202
|
+
default:
|
|
203
|
+
return this.rpcClient.request(args);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
this.projectId = projectId;
|
|
208
|
+
this.sendTxMaxRetries =
|
|
209
|
+
opts?.sendTxMaxRetries ?? constants_js_1.DEFAULT_SEND_TX_MAX_RETRIES;
|
|
210
|
+
this.sendTxRetryIntervalMs =
|
|
211
|
+
opts?.sendTxRetryIntervalMs ?? constants_js_1.DEFAULT_SEND_TX_RETRY_INTERVAL_MS;
|
|
212
|
+
(0, gas_estimator_js_1.withZeroDevGasEstimator)(this);
|
|
213
|
+
}
|
|
214
|
+
isReplacementOpError(errorIn) {
|
|
215
|
+
if (errorIn.cause != null) {
|
|
216
|
+
const failedOpMessage = errorIn?.cause?.message;
|
|
217
|
+
return ((failedOpMessage?.includes("replacement op must increase maxFeePerGas and MaxPriorityFeePerGas") ||
|
|
218
|
+
failedOpMessage?.match(/.*replacement.*underpriced.*/) !== null) ??
|
|
219
|
+
false);
|
|
220
|
+
}
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
unwrapError(errorIn) {
|
|
224
|
+
if (errorIn?.cause != null) {
|
|
225
|
+
let paymasterInfo = "";
|
|
226
|
+
let failedOpMessage = errorIn?.cause?.message;
|
|
227
|
+
if (failedOpMessage?.includes("FailedOp") === true) {
|
|
228
|
+
const matched = failedOpMessage.match(/FailedOp\((.*)\)/);
|
|
229
|
+
if (matched != null) {
|
|
230
|
+
const split = matched[1].split(",");
|
|
231
|
+
paymasterInfo = `(paymaster address: ${split[1]})`;
|
|
232
|
+
failedOpMessage = split[2];
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const error = new Error(`The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo}`);
|
|
236
|
+
error.stack = errorIn.stack;
|
|
237
|
+
return error;
|
|
238
|
+
}
|
|
239
|
+
return errorIn;
|
|
240
|
+
}
|
|
241
|
+
withZeroDevPaymasterAndData(config) {
|
|
242
|
+
if (!this.isConnected()) {
|
|
243
|
+
throw new Error("ZeroDevProvider: account is not set, did you call `connect` first?");
|
|
244
|
+
}
|
|
245
|
+
return (0, paymaster_js_1.withZeroDevPaymasterAndData)(this, config);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
exports.ZeroDevProvider = ZeroDevProvider;
|
|
249
|
+
//# 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,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hexifyUserOp = exports.isValidRequest = exports.packUserOp = void 0;
|
|
4
|
+
const aa_core_1 = require("@alchemy/aa-core");
|
|
5
|
+
const viem_1 = require("viem");
|
|
6
|
+
const validateUserOpMethod = "simulateValidation";
|
|
7
|
+
const UserOpType = aa_core_1.EntryPointAbi.find((entry) => entry.name === validateUserOpMethod)?.inputs[0];
|
|
8
|
+
function encode(typevalues, forSignature) {
|
|
9
|
+
const types = typevalues
|
|
10
|
+
.map((typevalue) => typevalue.type === "bytes" && forSignature ? "bytes32" : typevalue.type)
|
|
11
|
+
.join(", ");
|
|
12
|
+
const values = typevalues.map((typevalue) => typevalue.type === "bytes" && forSignature
|
|
13
|
+
? (0, viem_1.keccak256)(typevalue.val)
|
|
14
|
+
: typevalue.val);
|
|
15
|
+
return (0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)(types), values);
|
|
16
|
+
}
|
|
17
|
+
function packUserOp(op, forSignature = true) {
|
|
18
|
+
if (forSignature) {
|
|
19
|
+
const userOpType = {
|
|
20
|
+
components: [
|
|
21
|
+
{
|
|
22
|
+
type: "address",
|
|
23
|
+
name: "sender",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
type: "uint256",
|
|
27
|
+
name: "nonce",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
type: "bytes",
|
|
31
|
+
name: "initCode",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
type: "bytes",
|
|
35
|
+
name: "callData",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
type: "uint256",
|
|
39
|
+
name: "callGasLimit",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
type: "uint256",
|
|
43
|
+
name: "verificationGasLimit",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
type: "uint256",
|
|
47
|
+
name: "preVerificationGas",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: "uint256",
|
|
51
|
+
name: "maxFeePerGas",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: "uint256",
|
|
55
|
+
name: "maxPriorityFeePerGas",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: "bytes",
|
|
59
|
+
name: "paymasterAndData",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: "bytes",
|
|
63
|
+
name: "signature",
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
name: "userOp",
|
|
67
|
+
type: "tuple",
|
|
68
|
+
};
|
|
69
|
+
let encoded = (0, viem_1.encodeAbiParameters)(userOpType.components, Object.values({
|
|
70
|
+
...op,
|
|
71
|
+
signature: "0x",
|
|
72
|
+
}));
|
|
73
|
+
encoded = ("0x" + encoded.slice(66, encoded.length - 64));
|
|
74
|
+
return encoded;
|
|
75
|
+
}
|
|
76
|
+
const typevalues = UserOpType.components.map((c) => ({
|
|
77
|
+
type: c.type,
|
|
78
|
+
val: op[c.name],
|
|
79
|
+
}));
|
|
80
|
+
return encode(typevalues, forSignature);
|
|
81
|
+
}
|
|
82
|
+
exports.packUserOp = packUserOp;
|
|
83
|
+
function isValidRequest(request) {
|
|
84
|
+
return (!!request.callGasLimit &&
|
|
85
|
+
!!request.maxFeePerGas &&
|
|
86
|
+
request.maxPriorityFeePerGas != null &&
|
|
87
|
+
!!request.preVerificationGas &&
|
|
88
|
+
!!request.verificationGasLimit);
|
|
89
|
+
}
|
|
90
|
+
exports.isValidRequest = isValidRequest;
|
|
91
|
+
const hexifyUserOp = (resolvedUserOp) => {
|
|
92
|
+
return Object.keys(resolvedUserOp)
|
|
93
|
+
.map((key) => {
|
|
94
|
+
let val = resolvedUserOp[key];
|
|
95
|
+
if (typeof val !== "string" || !val.startsWith("0x")) {
|
|
96
|
+
val = (0, viem_1.toHex)(val);
|
|
97
|
+
}
|
|
98
|
+
return [key, val];
|
|
99
|
+
})
|
|
100
|
+
.reduce((set, [k, v]) => ({
|
|
101
|
+
...set,
|
|
102
|
+
[k]: v,
|
|
103
|
+
}), {});
|
|
104
|
+
};
|
|
105
|
+
exports.hexifyUserOp = hexifyUserOp;
|
|
106
|
+
//# 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,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calcPreVerificationGas = exports.DefaultGasOverheads = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const ERC4337_utils_js_1 = require("./ERC4337-utils.js");
|
|
6
|
+
exports.DefaultGasOverheads = {
|
|
7
|
+
fixed: 21000,
|
|
8
|
+
perUserOp: 18300,
|
|
9
|
+
perUserOpWord: 4,
|
|
10
|
+
zeroByte: 4,
|
|
11
|
+
nonZeroByte: 16,
|
|
12
|
+
bundleSize: 1,
|
|
13
|
+
sigSize: 65,
|
|
14
|
+
};
|
|
15
|
+
function calcPreVerificationGas(userOp, overheads) {
|
|
16
|
+
const ov = { ...exports.DefaultGasOverheads, ...(overheads ?? {}) };
|
|
17
|
+
const p = {
|
|
18
|
+
preVerificationGas: 21000,
|
|
19
|
+
signature: (0, viem_1.toHex)(Buffer.alloc(ov.sigSize, 1)),
|
|
20
|
+
...userOp,
|
|
21
|
+
};
|
|
22
|
+
const packed = (0, viem_1.toBytes)((0, ERC4337_utils_js_1.packUserOp)(p, false));
|
|
23
|
+
const callDataCost = packed
|
|
24
|
+
.map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte))
|
|
25
|
+
.reduce((sum, x) => sum + x);
|
|
26
|
+
const ret = Math.round(callDataCost +
|
|
27
|
+
ov.fixed / ov.bundleSize +
|
|
28
|
+
ov.perUserOp +
|
|
29
|
+
ov.perUserOpWord * packed.length);
|
|
30
|
+
return ret;
|
|
31
|
+
}
|
|
32
|
+
exports.calcPreVerificationGas = calcPreVerificationGas;
|
|
33
|
+
//# 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,+BAAsC;AACtC,yDAAgD;AAyCnC,QAAA,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,SAAgB,sBAAsB,CACpC,MAAgD,EAChD,SAAiC;IAEjC,MAAM,EAAE,GAAG,EAAE,GAAG,2BAAmB,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;IAC5D,MAAM,CAAC,GAAoC;QAEzC,kBAAkB,EAAE,KAAK;QACzB,SAAS,EAAE,IAAA,YAAK,EAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,GAAG,MAAM;KACH,CAAC;IAET,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,IAAA,6BAAU,EAAC,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;AAvBD,wDAuBC","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;
|