@zerodev/sdk 4.5.2-beta.0 → 4.5.3

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.
Files changed (26) hide show
  1. package/dist/cjs/kernel-zerodev/constants.d.ts +1 -1
  2. package/dist/cjs/kernel-zerodev/constants.js +1 -1
  3. package/dist/cjs/kernel-zerodev/constants.js.map +1 -1
  4. package/dist/cjs/kernel-zerodev/middleware/gas-estimator.js +1 -1
  5. package/dist/cjs/kernel-zerodev/middleware/gas-estimator.js.map +1 -1
  6. package/dist/cjs/kernel-zerodev/provider.d.ts +2 -0
  7. package/dist/cjs/kernel-zerodev/provider.js +7 -0
  8. package/dist/cjs/kernel-zerodev/provider.js.map +1 -1
  9. package/dist/cjs/kernel-zerodev/validator-provider/recovery-provider.js.map +1 -1
  10. package/dist/esm/kernel-zerodev/constants.d.ts +1 -1
  11. package/dist/esm/kernel-zerodev/constants.js +1 -1
  12. package/dist/esm/kernel-zerodev/constants.js.map +1 -1
  13. package/dist/esm/kernel-zerodev/middleware/gas-estimator.js +1 -1
  14. package/dist/esm/kernel-zerodev/middleware/gas-estimator.js.map +1 -1
  15. package/dist/esm/kernel-zerodev/provider.d.ts +2 -0
  16. package/dist/esm/kernel-zerodev/provider.js +7 -0
  17. package/dist/esm/kernel-zerodev/provider.js.map +1 -1
  18. package/dist/esm/kernel-zerodev/validator-provider/recovery-provider.js.map +1 -1
  19. package/dist/types/kernel-zerodev/constants.d.ts +1 -1
  20. package/dist/types/kernel-zerodev/provider.d.ts +2 -0
  21. package/dist/types/kernel-zerodev/provider.d.ts.map +1 -1
  22. package/package.json +1 -1
  23. package/src/kernel-zerodev/constants.ts +1 -1
  24. package/src/kernel-zerodev/middleware/gas-estimator.ts +1 -1
  25. package/src/kernel-zerodev/provider.ts +3 -0
  26. package/src/kernel-zerodev/validator-provider/recovery-provider.ts +1 -1
@@ -17,7 +17,7 @@ export declare const DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000
17
17
  export declare const ERC165_SESSION_KEY_VALIDATOR_ADDRESS = "0xe149290800De29D4b0BF9dB82c508255D81902E6";
18
18
  export declare const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
19
19
  export declare const SESSION_KEY_VALIDATOR_ADDRESS = "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
20
- export declare const RECOVERY_VALIDATOR_ADDRESS = "0xa7e3Bc66086Ae51b20e59b6C84666635A0d0A16C";
20
+ export declare const RECOVERY_VALIDATOR_ADDRESS = "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
21
21
  export declare const RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
22
22
  export declare const oneAddress = "0x0000000000000000000000000000000000000001";
23
23
  export declare const gasTokenChainAddresses: IGasTokenAddresses;
@@ -20,7 +20,7 @@ exports.DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff00000000000000000000
20
20
  exports.ERC165_SESSION_KEY_VALIDATOR_ADDRESS = "0xe149290800De29D4b0BF9dB82c508255D81902E6";
21
21
  exports.TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
22
22
  exports.SESSION_KEY_VALIDATOR_ADDRESS = "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
23
- exports.RECOVERY_VALIDATOR_ADDRESS = "0xa7e3Bc66086Ae51b20e59b6C84666635A0d0A16C";
23
+ exports.RECOVERY_VALIDATOR_ADDRESS = "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
24
24
  exports.RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
25
25
  exports.oneAddress = "0x0000000000000000000000000000000000000001";
26
26
  exports.gasTokenChainAddresses = {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseUnits, type Hex } from \"viem\";\nimport type { IGasTokenAddresses } from \"./paymaster/types.js\";\nimport { polygon } from \"viem/chains\";\n\nexport const DEFAULT_SEND_TX_MAX_RETRIES = 3;\nexport const DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 60000; // 1 minutes\nexport const BUNDLER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/bundler\";\nexport const PAYMASTER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/paymaster\";\nexport const ENTRYPOINT_ADDRESS: Hex =\n \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\";\nexport const MULTISEND_ADDR: Hex = \"0x8ae01fcf7c655655ff2c6ef907b8b4718ab4e17c\";\nexport const BACKEND_URL = \"https://backend-vikp.onrender.com\";\nexport const API_URL = \"https://prod-api.zerodev.app\";\nexport const ECDSA_VALIDATOR_ADDRESS =\n \"0xd9AB5096a832b9ce79914329DAEE236f8Eea0390\";\nexport const KERNEL_FACTORY_ADDRESS =\n \"0x5de4839a76cf55d0c90e2061ef4386d962E15ae3\";\nexport const KERNEL_IMPL_ADDRESS = \"0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5\";\nexport const KILL_SWITCH_VALIDATOR_ADDRESS =\n \"0x7393A7dA58CCfFb78f52adb09705BE6E20F704BC\";\nexport const KILL_SWITCH_ACTION = \"0x3f38e479304c7F18F988269a1bDa7d646bd48243\";\nexport const DUMMY_ECDSA_SIG =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\nexport const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =\n \"0xe149290800De29D4b0BF9dB82c508255D81902E6\";\nexport const TOKEN_ACTION = \"0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1\";\nexport const SESSION_KEY_VALIDATOR_ADDRESS =\n \"0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5\";\nexport const RECOVERY_VALIDATOR_ADDRESS =\n \"0xa7e3Bc66086Ae51b20e59b6C84666635A0d0A16C\";\nexport const RECOVERY_ACTION = \"0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1\";\nexport const oneAddress = \"0x0000000000000000000000000000000000000001\";\n\nexport const gasTokenChainAddresses: IGasTokenAddresses = {\n USDC: {\n 1: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n // 5: \"0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557\",\n 137: \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n // 80001: \"\",\n // 420: \"0x7F5c764cBc14f9669B88837ca1490cCa17c31607\",\n 42161: \"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\n // 421613: \"\",\n 43114: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n // 43113: \"\",\n // 56: \"\",\n // 97: \"\"\n },\n PEPE: {\n 1: \"0x6982508145454Ce325dDbE47a25d4ec3d2311933\",\n },\n};\n\nexport const ERC20_APPROVAL_AMOUNT: { [key: string]: bigint } = {\n // ETH\n [gasTokenChainAddresses[\"USDC\"][1]]: parseUnits(\"100\", 6),\n\n // Goerli\n [gasTokenChainAddresses[\"USDC\"][5]]: parseUnits(\"100\", 6),\n\n // Polygon\n [gasTokenChainAddresses[\"USDC\"][137]]: parseUnits(\"10\", 6),\n\n // Arbitrum\n [gasTokenChainAddresses[\"USDC\"][42161]]: parseUnits(\"10\", 6),\n\n // Avalanche\n [gasTokenChainAddresses[\"USDC\"][43114]]: parseUnits(\"10\", 6),\n\n // ETH\n [gasTokenChainAddresses[\"PEPE\"][1]]: parseUnits(\"50000000\", 18),\n\n \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\": parseUnits(\"100\", 18),\n};\n\nexport const minPriorityFeePerBidDefaults = new Map<number, bigint>([\n [polygon.id, 30_000_000_000n],\n]);\n\nexport const INFURA_API_KEY = \"f36f7f706a58477884ce6fe89165666c\";\nexport const CHAIN_ID_TO_NODE: { [key: number]: string } = {\n 1: `https://mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 5: `https://goerli.infura.io/v3/${INFURA_API_KEY}`,\n 11155111:\n \"https://fittest-ultra-aura.ethereum-sepolia.quiknode.pro/3893d01b1dd411fdfa9b6dd372dd2b4f69fcf1ea/\",\n 137: `https://polygon-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 80001: `https://polygon-mumbai.infura.io/v3/${INFURA_API_KEY}`,\n 10: `https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 420: `https://optimism-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 42161: `https://arbitrum-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n // 42161: 'https://evocative-stylish-dinghy.arbitrum-mainnet.discover.quiknode.pro/80b526d14fa9fd9a8b0db1e65554acaf00c6a1ab/',\n 421613: `https://arbitrum-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 43114: `https://avalanche-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 43113: `https://avalanche-fuji.infura.io/v3/${INFURA_API_KEY}`,\n 1313161554: `https://aurora-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 1313161555: `https://aurora-testnet.infura.io/v3/${INFURA_API_KEY}`,\n 56: \"https://neat-greatest-layer.bsc.quiknode.pro/9405a499ceee314e5f2f68c9d47518d3537fce6a/\",\n 8453: \"https://twilight-red-tree.base-mainnet.quiknode.pro/dc6eb27bf0f917df215922488dd97f4de7d9b08e/\",\n 84531:\n \"https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596/\",\n 100: \"https://thrilling-fluent-film.xdai.quiknode.pro/305955cffb9868cdd95b5e3dc9775f20678ad9ac/\",\n 10200: \"https://nd-810-853-201.p2pify.com/e828b09f0d43591de96c297b3f36fffd\",\n 59144: `https://linea-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 59140: `https://linea-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 204: \"https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b\",\n 42069: \"https://rpc.op-testnet.gelato.digital\",\n 1261120: \"https://rpc.zkatana.gelato.digital\",\n 84532:\n \"https://floral-old-feather.base-sepolia.quiknode.pro/4c3b4295d0c174410872b1e461a91cc33c7969a9/\",\n 421614: `https://arbitrum-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n 11155420: `https://optimism-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n // 5611: 'opBnb-testnet',\n};\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseUnits, type Hex } from \"viem\";\nimport type { IGasTokenAddresses } from \"./paymaster/types.js\";\nimport { polygon } from \"viem/chains\";\n\nexport const DEFAULT_SEND_TX_MAX_RETRIES = 3;\nexport const DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 60000; // 1 minutes\nexport const BUNDLER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/bundler\";\nexport const PAYMASTER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/paymaster\";\nexport const ENTRYPOINT_ADDRESS: Hex =\n \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\";\nexport const MULTISEND_ADDR: Hex = \"0x8ae01fcf7c655655ff2c6ef907b8b4718ab4e17c\";\nexport const BACKEND_URL = \"https://backend-vikp.onrender.com\";\nexport const API_URL = \"https://prod-api.zerodev.app\";\nexport const ECDSA_VALIDATOR_ADDRESS =\n \"0xd9AB5096a832b9ce79914329DAEE236f8Eea0390\";\nexport const KERNEL_FACTORY_ADDRESS =\n \"0x5de4839a76cf55d0c90e2061ef4386d962E15ae3\";\nexport const KERNEL_IMPL_ADDRESS = \"0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5\";\nexport const KILL_SWITCH_VALIDATOR_ADDRESS =\n \"0x7393A7dA58CCfFb78f52adb09705BE6E20F704BC\";\nexport const KILL_SWITCH_ACTION = \"0x3f38e479304c7F18F988269a1bDa7d646bd48243\";\nexport const DUMMY_ECDSA_SIG =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\nexport const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =\n \"0xe149290800De29D4b0BF9dB82c508255D81902E6\";\nexport const TOKEN_ACTION = \"0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1\";\nexport const SESSION_KEY_VALIDATOR_ADDRESS =\n \"0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5\";\nexport const RECOVERY_VALIDATOR_ADDRESS =\n \"0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6\";\nexport const RECOVERY_ACTION = \"0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1\";\nexport const oneAddress = \"0x0000000000000000000000000000000000000001\";\n\nexport const gasTokenChainAddresses: IGasTokenAddresses = {\n USDC: {\n 1: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n // 5: \"0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557\",\n 137: \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n // 80001: \"\",\n // 420: \"0x7F5c764cBc14f9669B88837ca1490cCa17c31607\",\n 42161: \"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\n // 421613: \"\",\n 43114: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n // 43113: \"\",\n // 56: \"\",\n // 97: \"\"\n },\n PEPE: {\n 1: \"0x6982508145454Ce325dDbE47a25d4ec3d2311933\",\n },\n};\n\nexport const ERC20_APPROVAL_AMOUNT: { [key: string]: bigint } = {\n // ETH\n [gasTokenChainAddresses[\"USDC\"][1]]: parseUnits(\"100\", 6),\n\n // Goerli\n [gasTokenChainAddresses[\"USDC\"][5]]: parseUnits(\"100\", 6),\n\n // Polygon\n [gasTokenChainAddresses[\"USDC\"][137]]: parseUnits(\"10\", 6),\n\n // Arbitrum\n [gasTokenChainAddresses[\"USDC\"][42161]]: parseUnits(\"10\", 6),\n\n // Avalanche\n [gasTokenChainAddresses[\"USDC\"][43114]]: parseUnits(\"10\", 6),\n\n // ETH\n [gasTokenChainAddresses[\"PEPE\"][1]]: parseUnits(\"50000000\", 18),\n\n \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\": parseUnits(\"100\", 18),\n};\n\nexport const minPriorityFeePerBidDefaults = new Map<number, bigint>([\n [polygon.id, 30_000_000_000n],\n]);\n\nexport const INFURA_API_KEY = \"f36f7f706a58477884ce6fe89165666c\";\nexport const CHAIN_ID_TO_NODE: { [key: number]: string } = {\n 1: `https://mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 5: `https://goerli.infura.io/v3/${INFURA_API_KEY}`,\n 11155111:\n \"https://fittest-ultra-aura.ethereum-sepolia.quiknode.pro/3893d01b1dd411fdfa9b6dd372dd2b4f69fcf1ea/\",\n 137: `https://polygon-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 80001: `https://polygon-mumbai.infura.io/v3/${INFURA_API_KEY}`,\n 10: `https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 420: `https://optimism-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 42161: `https://arbitrum-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n // 42161: 'https://evocative-stylish-dinghy.arbitrum-mainnet.discover.quiknode.pro/80b526d14fa9fd9a8b0db1e65554acaf00c6a1ab/',\n 421613: `https://arbitrum-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 43114: `https://avalanche-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 43113: `https://avalanche-fuji.infura.io/v3/${INFURA_API_KEY}`,\n 1313161554: `https://aurora-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 1313161555: `https://aurora-testnet.infura.io/v3/${INFURA_API_KEY}`,\n 56: \"https://neat-greatest-layer.bsc.quiknode.pro/9405a499ceee314e5f2f68c9d47518d3537fce6a/\",\n 8453: \"https://twilight-red-tree.base-mainnet.quiknode.pro/dc6eb27bf0f917df215922488dd97f4de7d9b08e/\",\n 84531:\n \"https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596/\",\n 100: \"https://thrilling-fluent-film.xdai.quiknode.pro/305955cffb9868cdd95b5e3dc9775f20678ad9ac/\",\n 10200: \"https://nd-810-853-201.p2pify.com/e828b09f0d43591de96c297b3f36fffd\",\n 59144: `https://linea-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 59140: `https://linea-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 204: \"https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b\",\n 42069: \"https://rpc.op-testnet.gelato.digital\",\n 1261120: \"https://rpc.zkatana.gelato.digital\",\n 84532:\n \"https://floral-old-feather.base-sepolia.quiknode.pro/4c3b4295d0c174410872b1e461a91cc33c7969a9/\",\n 421614: `https://arbitrum-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n 11155420: `https://optimism-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n // 5611: 'opBnb-testnet',\n};\n"]}
@@ -106,7 +106,7 @@ const eip1559GasPrice = async (provider) => {
106
106
  fee = fee.standard.maxPriorityFeePerGas;
107
107
  }
108
108
  const tip = BigInt(fee);
109
- const buffer = (tip / 100n) * 13n;
109
+ const buffer = (tip / 100n) * BigInt(provider.gasFeeBufferPecentage);
110
110
  let maxPriorityFeePerGas = tip + buffer;
111
111
  maxPriorityFeePerGas =
112
112
  maxPriorityFeePerGas < provider.minPriorityFeePerBid
@@ -1 +1 @@
1
- {"version":3,"file":"gas-estimator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZeroDevProvider } from \"../provider.js\";\nimport {\n deepHexlify,\n type Hex,\n type UserOperationStruct,\n resolveProperties,\n type BigNumberish,\n type UserOperationEstimateGasResponse,\n} from \"@alchemy/aa-core\";\nimport { ENTRYPOINT_ADDRESS } from \"../constants.js\";\nimport { calcPreVerificationGas } from \"../utils/calc-pre-verification-gas.js\";\nimport { type PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\nexport const withZeroDevGasEstimator = (\n provider: ZeroDevProvider\n): ZeroDevProvider => {\n provider.withFeeDataGetter(async (struct) => {\n let overrides = await resolveProperties({\n maxFeePerGas: struct.maxFeePerGas,\n maxPriorityFeePerGas: struct.maxPriorityFeePerGas,\n });\n\n if (provider.bundlerProvider === \"GELATO\") {\n return { maxFeePerGas: 0n, maxPriorityFeePerGas: 0n };\n }\n\n let maxFeePerGas, maxPriorityFeePerGas;\n\n try {\n ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(\n provider\n ));\n } catch (error: any) {\n console.warn(\n \"getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price.\"\n );\n }\n\n if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {\n const feeData = await getFeeData(provider);\n maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;\n maxPriorityFeePerGas = feeData.maxPriorityFeePerGas\n ? BigInt(feeData.maxPriorityFeePerGas)\n : 0n;\n }\n\n if (overrides.maxFeePerGas || overrides.maxPriorityFeePerGas) {\n return {\n maxFeePerGas: overrides.maxFeePerGas ?? maxFeePerGas,\n maxPriorityFeePerGas:\n overrides.maxPriorityFeePerGas ?? maxPriorityFeePerGas,\n };\n }\n return { maxFeePerGas, maxPriorityFeePerGas };\n });\n\n provider.withGasEstimator(async (struct) => {\n if (\n struct.callGasLimit !== undefined &&\n struct.verificationGasLimit !== undefined &&\n struct.preVerificationGas !== undefined\n ) {\n return struct;\n }\n const initCode = await provider.account?.getInitCode();\n const initGas = await estimateCreationGas(provider, initCode);\n const partialStruct: UserOperationStruct = {\n ...struct,\n callGasLimit:\n initCode !== undefined && initCode.length > 2\n ? BigInt(\"1000000\")\n : BigInt(55000),\n verificationGasLimit: BigInt(110000) + initGas,\n preVerificationGas: BigInt(100000),\n };\n\n partialStruct.preVerificationGas = await getPreVerificationGas(\n partialStruct\n );\n\n const request = deepHexlify(await resolveProperties(partialStruct));\n let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;\n userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(\n request,\n ENTRYPOINT_ADDRESS\n );\n const { preVerificationGas, verificationGasLimit, callGasLimit } =\n userOpGasEstimates;\n request.preVerificationGas =\n (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;\n request.verificationGasLimit =\n BigInt(verificationGasLimit) ?? request.verificationGasLimit;\n request.callGasLimit =\n (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;\n\n return {\n ...struct,\n ...request,\n };\n });\n\n return provider;\n};\n\nexport const estimateCreationGas = async (\n provider: ZeroDevProvider,\n initCode?: string\n): Promise<bigint> => {\n if (initCode == null || initCode === \"0x\") return BigInt(0);\n const deployerAddress = initCode.substring(0, 42) as Hex;\n const deployerCallData = (\"0x\" + initCode.substring(42)) as Hex;\n return await provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: deployerAddress,\n data: deployerCallData,\n });\n};\n\n/**\n * should cover cost of putting calldata on-chain, and some overhead.\n * actual overhead depends on the expected bundle size\n */\nexport const getPreVerificationGas = async (\n userOp: Partial<UserOperationStruct>\n): Promise<number> => {\n const p = await resolveProperties(userOp);\n return calcPreVerificationGas(p);\n};\n\nexport const GAS_PRICE_RPC_METHODS_BY_BUNDLER: {\n [K in PaymasterAndBundlerProviders]: string;\n} = {\n STACKUP: \"eth_maxPriorityFeePerGas\",\n ALCHEMY: \"rundler_maxPriorityFeePerGas\",\n PIMLICO: \"pimlico_getUserOperationGasPrice\",\n GELATO: \"eth_maxPriorityFeePerGas\",\n};\n\nexport const eip1559GasPrice = async (provider: ZeroDevProvider) => {\n let [fee, block] = await Promise.all([\n provider.rpcClient.request({\n method:\n // @ts-expect-error\n GAS_PRICE_RPC_METHODS_BY_BUNDLER[provider.bundlerProvider] ??\n \"eth_maxPriorityFeePerGas\",\n params: [],\n }) as any,\n provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n ]);\n\n if (provider.bundlerProvider === \"PIMLICO\") {\n fee = fee.standard.maxPriorityFeePerGas;\n }\n\n const tip = BigInt(fee);\n const buffer = (tip / 100n) * 13n;\n let maxPriorityFeePerGas = tip + buffer;\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n const maxFeePerGas = block.baseFeePerGas\n ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas\n : maxPriorityFeePerGas;\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\ninterface FeeData {\n maxFeePerGas: BigNumberish | null;\n maxPriorityFeePerGas: BigNumberish | null;\n}\n\nexport const getFeeData = async (\n provider: ZeroDevProvider\n): Promise<FeeData> => {\n const { block, gasPrice } = await resolveProperties({\n block: provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n gasPrice: provider.rpcClient.getGasPrice().catch((error) => {\n console.warn(\"Legacy: Failed to get gas price\", error);\n return null;\n }),\n });\n\n let maxFeePerGas = null;\n let maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas != null) {\n // Set the tip to the min of the tip for the last block and 1.5 gwei\n const minimumTip = BigInt(\"1500000000\");\n maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;\n if (\n maxPriorityFeePerGas == null ||\n maxPriorityFeePerGas - BigInt(0) ||\n maxPriorityFeePerGas > minimumTip\n ) {\n maxPriorityFeePerGas = minimumTip;\n }\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n maxFeePerGas =\n block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);\n }\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\n"]}
1
+ {"version":3,"file":"gas-estimator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZeroDevProvider } from \"../provider.js\";\nimport {\n deepHexlify,\n type Hex,\n type UserOperationStruct,\n resolveProperties,\n type BigNumberish,\n type UserOperationEstimateGasResponse,\n} from \"@alchemy/aa-core\";\nimport { ENTRYPOINT_ADDRESS } from \"../constants.js\";\nimport { calcPreVerificationGas } from \"../utils/calc-pre-verification-gas.js\";\nimport { type PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\nexport const withZeroDevGasEstimator = (\n provider: ZeroDevProvider\n): ZeroDevProvider => {\n provider.withFeeDataGetter(async (struct) => {\n let overrides = await resolveProperties({\n maxFeePerGas: struct.maxFeePerGas,\n maxPriorityFeePerGas: struct.maxPriorityFeePerGas,\n });\n\n if (provider.bundlerProvider === \"GELATO\") {\n return { maxFeePerGas: 0n, maxPriorityFeePerGas: 0n };\n }\n\n let maxFeePerGas, maxPriorityFeePerGas;\n\n try {\n ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(\n provider\n ));\n } catch (error: any) {\n console.warn(\n \"getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price.\"\n );\n }\n\n if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {\n const feeData = await getFeeData(provider);\n maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;\n maxPriorityFeePerGas = feeData.maxPriorityFeePerGas\n ? BigInt(feeData.maxPriorityFeePerGas)\n : 0n;\n }\n\n if (overrides.maxFeePerGas || overrides.maxPriorityFeePerGas) {\n return {\n maxFeePerGas: overrides.maxFeePerGas ?? maxFeePerGas,\n maxPriorityFeePerGas:\n overrides.maxPriorityFeePerGas ?? maxPriorityFeePerGas,\n };\n }\n return { maxFeePerGas, maxPriorityFeePerGas };\n });\n\n provider.withGasEstimator(async (struct) => {\n if (\n struct.callGasLimit !== undefined &&\n struct.verificationGasLimit !== undefined &&\n struct.preVerificationGas !== undefined\n ) {\n return struct;\n }\n const initCode = await provider.account?.getInitCode();\n const initGas = await estimateCreationGas(provider, initCode);\n const partialStruct: UserOperationStruct = {\n ...struct,\n callGasLimit:\n initCode !== undefined && initCode.length > 2\n ? BigInt(\"1000000\")\n : BigInt(55000),\n verificationGasLimit: BigInt(110000) + initGas,\n preVerificationGas: BigInt(100000),\n };\n\n partialStruct.preVerificationGas = await getPreVerificationGas(\n partialStruct\n );\n\n const request = deepHexlify(await resolveProperties(partialStruct));\n let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;\n userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(\n request,\n ENTRYPOINT_ADDRESS\n );\n const { preVerificationGas, verificationGasLimit, callGasLimit } =\n userOpGasEstimates;\n request.preVerificationGas =\n (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;\n request.verificationGasLimit =\n BigInt(verificationGasLimit) ?? request.verificationGasLimit;\n request.callGasLimit =\n (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;\n\n return {\n ...struct,\n ...request,\n };\n });\n\n return provider;\n};\n\nexport const estimateCreationGas = async (\n provider: ZeroDevProvider,\n initCode?: string\n): Promise<bigint> => {\n if (initCode == null || initCode === \"0x\") return BigInt(0);\n const deployerAddress = initCode.substring(0, 42) as Hex;\n const deployerCallData = (\"0x\" + initCode.substring(42)) as Hex;\n return await provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: deployerAddress,\n data: deployerCallData,\n });\n};\n\n/**\n * should cover cost of putting calldata on-chain, and some overhead.\n * actual overhead depends on the expected bundle size\n */\nexport const getPreVerificationGas = async (\n userOp: Partial<UserOperationStruct>\n): Promise<number> => {\n const p = await resolveProperties(userOp);\n return calcPreVerificationGas(p);\n};\n\nexport const GAS_PRICE_RPC_METHODS_BY_BUNDLER: {\n [K in PaymasterAndBundlerProviders]: string;\n} = {\n STACKUP: \"eth_maxPriorityFeePerGas\",\n ALCHEMY: \"rundler_maxPriorityFeePerGas\",\n PIMLICO: \"pimlico_getUserOperationGasPrice\",\n GELATO: \"eth_maxPriorityFeePerGas\",\n};\n\nexport const eip1559GasPrice = async (provider: ZeroDevProvider) => {\n let [fee, block] = await Promise.all([\n provider.rpcClient.request({\n method:\n // @ts-expect-error\n GAS_PRICE_RPC_METHODS_BY_BUNDLER[provider.bundlerProvider] ??\n \"eth_maxPriorityFeePerGas\",\n params: [],\n }) as any,\n provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n ]);\n\n if (provider.bundlerProvider === \"PIMLICO\") {\n fee = fee.standard.maxPriorityFeePerGas;\n }\n\n const tip = BigInt(fee);\n const buffer = (tip / 100n) * BigInt(provider.gasFeeBufferPecentage);\n let maxPriorityFeePerGas = tip + buffer;\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n const maxFeePerGas = block.baseFeePerGas\n ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas\n : maxPriorityFeePerGas;\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\ninterface FeeData {\n maxFeePerGas: BigNumberish | null;\n maxPriorityFeePerGas: BigNumberish | null;\n}\n\nexport const getFeeData = async (\n provider: ZeroDevProvider\n): Promise<FeeData> => {\n const { block, gasPrice } = await resolveProperties({\n block: provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n gasPrice: provider.rpcClient.getGasPrice().catch((error) => {\n console.warn(\"Legacy: Failed to get gas price\", error);\n return null;\n }),\n });\n\n let maxFeePerGas = null;\n let maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas != null) {\n // Set the tip to the min of the tip for the last block and 1.5 gwei\n const minimumTip = BigInt(\"1500000000\");\n maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;\n if (\n maxPriorityFeePerGas == null ||\n maxPriorityFeePerGas - BigInt(0) ||\n maxPriorityFeePerGas > minimumTip\n ) {\n maxPriorityFeePerGas = minimumTip;\n }\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n maxFeePerGas =\n block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);\n }\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\n"]}
@@ -12,6 +12,7 @@ export type ZeroDevProviderConfig = {
12
12
  opts?: SmartAccountProviderOpts & {
13
13
  sendTxMaxRetries?: number;
14
14
  sendTxRetryIntervalMs?: number;
15
+ gasFeeBufferPecentage?: number;
15
16
  };
16
17
  };
17
18
  export declare enum Operation {
@@ -27,6 +28,7 @@ export declare class ZeroDevProvider extends SmartAccountProvider<HttpTransport>
27
28
  private _txMaxRetries;
28
29
  private _txRetryIntervalMs;
29
30
  private _shouldConsume;
31
+ gasFeeBufferPecentage: number;
30
32
  constructor({ projectId, chain, entryPointAddress, rpcUrl, account, bundlerProvider, opts, }: ZeroDevProviderConfig);
31
33
  getProjectId: () => string;
32
34
  shouldConsume: () => boolean;
@@ -74,6 +74,12 @@ class ZeroDevProvider extends aa_core_1.SmartAccountProvider {
74
74
  writable: true,
75
75
  value: true
76
76
  });
77
+ Object.defineProperty(this, "gasFeeBufferPecentage", {
78
+ enumerable: true,
79
+ configurable: true,
80
+ writable: true,
81
+ value: void 0
82
+ });
77
83
  Object.defineProperty(this, "getProjectId", {
78
84
  enumerable: true,
79
85
  configurable: true,
@@ -328,6 +334,7 @@ class ZeroDevProvider extends aa_core_1.SmartAccountProvider {
328
334
  }
329
335
  }
330
336
  });
337
+ this.gasFeeBufferPecentage = opts?.gasFeeBufferPecentage ?? 13;
331
338
  this._txMaxRetries = opts?.txMaxRetries ?? 20;
332
339
  this._txRetryIntervalMs = opts?.txRetryIntervalMs ?? 5000;
333
340
  this.bundlerProvider = bundlerProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/provider.ts"],"names":[],"mappings":";;;AAAA,+BASc;AACd,8CAe0B;AAC1B,iDAMwB;AACxB,6CAA2E;AAC3E,oEAAwE;AACxE,+DAA0D;AAC1D,2CAA+C;AAC/C,4DAAwE;AACxE,gEAA6E;AAM7E,yCAAsC;AAetC,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,yCAAQ,CAAA;IACR,yDAAgB,CAAA;AAClB,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAQD,MAAa,eAAgB,SAAQ,8BAAmC;IAStE,YAAY,EACV,SAAS,EACT,KAAK,EACL,iBAAiB,GAAG,iCAAkB,EACtC,MAAM,GAAG,0BAAW,EACpB,OAAO,EACP,eAAe,EACf,IAAI,GACkB;QACtB,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,mBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACnE,MAAM,SAAS,GAAG,IAAA,mDAAgC,EAAC;YACjD,KAAK,EAAE,MAAM;YACb,MAAM;YACN,SAAS;YACT,eAAe;SAChB,CAAC,CAAC;QAEH,KAAK,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE;YACnD,GAAG,IAAI;YACP,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,EAAE;YACtC,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,IAAI,KAAK;YACnD,oBAAoB,EAClB,IAAI,EAAE,oBAAoB;gBAC1B,2CAA4B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;SAC9C,CAAC,CAAC;QAhCK;;;;;WAAkB;QAClB;;;;;WAAyB;QACzB;;;;;WAA8B;QAC/B;;;;;WAA+C;QAChD;;;;;WAAsB;QACtB;;;;;WAA2B;QAC3B;;;;mBAA0B,IAAI;WAAC;QAwCvC;;;;mBAAe,GAAW,EAAE,CAAC,IAAI,CAAC,SAAS;WAAC;QAE5C;;;;mBAAgB,GAAY,EAAE,CAAC,IAAI,CAAC,cAAc;WAAC;QAEnD;;;;mBAAkB,KAAK,EACrB,OAA8B,EAC9B,YAA6D,SAAS,CAAC,IAAI,EAC5D,EAAE;gBACjB,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;oBACf,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;iBACtD;gBAED,MAAM,SAAS,GAA2B,EAAE,CAAC;gBAC7C,IAAI,OAAO,CAAC,YAAY,EAAE;oBACxB,SAAS,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;iBAC/C;gBACD,IAAI,OAAO,CAAC,oBAAoB,EAAE;oBAChC,SAAS,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;iBAC/D;gBAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAC3C;oBACE,MAAM,EAAE,OAAO,CAAC,EAAE;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;oBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;iBAC7D,EACD,SAAS,EACT,SAAS,CACV,CAAC;gBAEF,OAAO,MAAM,IAAI,CAAC,+BAA+B,CAAC,IAAY,CAAC,CAAC;YAClE,CAAC;WAAC;QAEF;;;;mBAAqB,KAAK,EAGxB,IAAO,EACP,SAAkC,EAClC,YAAyC,SAAS,CAAC,IAAmC,EACxD,EAAE;gBAChC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,IAAA,4BAAe,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBAClC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;iBAC3C;gBACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;oBAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;iBAC7C;gBAED,IAAI,QAAQ,GAAc,IAAI,CAAC;gBAE/B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACvB,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI,EAAE;wBAChC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;qBACxD;yBAAM;wBACL,MAAM,4BAAgB,CAAC;qBACxB;iBACF;qBAAM,IAAI,IAAA,4BAAe,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBACxC,IAAI,SAAS,KAAK,SAAS,CAAC,YAAY,EAAE;wBACxC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,CACjD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,IAAI,EAAE,EAChB,IAAI,CAAC,IAAI,CACV,CAAC;qBACH;yBAAM,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI,EAAE;wBACvC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CACzC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,IAAI,EAAE,EAChB,IAAI,CAAC,IAAI,CACV,CAAC;qBACH;yBAAM;wBACL,MAAM,4BAAgB,CAAC;qBACxB;iBACF;qBAAM;oBACL,MAAM,4BAAgB,CAAC;iBACxB;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC3C;oBACE,QAAQ;oBACR,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;oBACzB,KAAK;oBACL,QAAQ;oBACR,SAAS,EAAE,MAAM,IAAI,CAAC,OAAO;yBAC1B,YAAY,EAAE;yBACd,wBAAwB,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,QAAe,CAAC;iBAC/C,EACxB,SAAS,CACV,CAAC;gBACF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,OAAO,MAAM,CAAC;YAChB,CAAC;WAAC;QAEM;;;;mBAAsB,KAAK,EACjC,EAAuB,EACvB,SAAkC,EACJ,EAAE;gBAChC,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAS,EAC5B,IAAI,CAAC,4BAA4B,EACjC,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,gBAAgB,IAAI,wBAAc,EACvC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC,CAChD,CAAC,EAAE,CAAC,CAAC;gBAEN,OAAO,IAAA,qBAAW,EAAC,MAAM,IAAA,2BAAiB,EAAsB,MAAM,CAAC,CAAC,CAAC;YAC3E,CAAC;WAAC;QAEF;;;;mBAAoB,KAAK,EAGvB,IAAO,EACP,SAAkC,EAClC,YAAyC,SAAS,CAAC,IAAmC,EACpD,EAAE;gBACpC,IAAI,CAAC,IAAI,CAAC,cAAc;oBACtB,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;gBACJ,IAAI,CAAC,IAAA,4BAAe,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBAClC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;iBAC3C;gBACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;oBAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;iBAC7C;gBAED,IAAI,QAAQ,GAAc,IAAI,CAAC;gBAE/B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACvB,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI,EAAE;wBAChC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;qBACxD;yBAAM;wBACL,MAAM,4BAAgB,CAAC;qBACxB;iBACF;qBAAM,IAAI,IAAA,4BAAe,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBACxC,IAAI,SAAS,KAAK,SAAS,CAAC,YAAY,EAAE;wBACxC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,CACjD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,IAAI,EAAE,EAChB,IAAI,CAAC,IAAI,CACV,CAAC;qBACH;yBAAM,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI,EAAE;wBACvC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CACzC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,IAAI,EAAE,EAChB,IAAI,CAAC,IAAI,CACV,CAAC;qBACH;yBAAM;wBACL,MAAM,4BAAgB,CAAC;qBACxB;iBACF;qBAAM;oBACL,MAAM,4BAAgB,CAAC;iBACxB;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAClD,IAAI,IAAI,GAAW,EAAE,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5C,IAAI,QAA6B,CAAC;gBAClC,IAAI,OAA4B,CAAC;gBACjC,IAAI,YAAY,EAAE,oBAAoB,CAAC;gBACvC,GAAG;oBACD,QAAQ,GAAG,MAAM,IAAA,mBAAS,EACxB,IAAI,CAAC,4BAA4B,EACjC,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,gBAAgB,IAAI,wBAAc,EACvC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC,CAChD,CAAC;wBACA,QAAQ;wBACR,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;wBACzB,KAAK;wBACL,QAAQ;wBACR,SAAS,EAAE,MAAM,IAAI,CAAC,OAAO;6BAC1B,YAAY,EAAE;6BACd,wBAAwB,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,QAAe,CAAC;wBACrE,YAAY;wBACZ,oBAAoB;qBACE,CAAC,CAAC;oBAC1B,OAAO,GAAG,IAAA,qBAAW,EAAC,MAAM,IAAA,2BAAiB,EAAC,QAAQ,CAAC,CAAC,CAAC;oBAEzD,IAAI,CAAC,IAAA,iCAAc,EAAC,OAAO,CAAC,EAAE;wBAE5B,MAAM,IAAI,KAAK,CACb,yFAAyF,IAAI,CAAC,SAAS,CACrG,OAAO,EACP,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;qBACH;oBAED,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;oBAEnC,OAAO,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACvE,IAAI;wBACF,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAC3C,OAAO,EACP,IAAI,CAAC,iBAAiB,CACvB,CAAC;qBACH;oBAAC,OAAO,KAAU,EAAE;wBACnB,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;4BACnE,YAAY,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;4BAC5D,oBAAoB;gCAClB,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;4BAEvD,OAAO,CAAC,GAAG,CACT,SACE,IAAI,CAAC,qBAAqB,GAAG,KAC/B,iEAAiE,YAAY,2BAA2B,oBAAoB,EAAE,CAC/H,CAAC;4BACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAChD,CAAC;4BACF,SAAS;yBACV;wBACD,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;qBAC/B;iBACF,QAAQ,IAAI,KAAK,EAAE,EAAE;gBAEtB,OAAO;oBACL,IAAI;oBACJ,OAAO;iBACR,CAAC;YACJ,CAAC;WAAC;QAsCF;;;;mBAAkC,KAAK,EAAE,IAAU,EAAiB,EAAE;gBACpE,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;gBACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE;oBAC3C,IAAI,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE;wBACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAChD,IAAqB,CACtB;6BAEE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;wBACrB,IAAI,OAAO,EAAE;4BACX,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAC9D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACd,CAAC;yBACH;qBACF;yBAAM;wBACL,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;4BACxC,OAAO,EAAE,iCAAkB;4BAC3B,KAAK,EAAE,IAAA,iBAAU,EAAC,EAAE,GAAG,EAAE,uBAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;4BACrE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;4BAC1B,SAAS,EAAE,WAAW,GAAG,IAAI;yBAC9B,CAAC,CAAC;wBACH,IAAI,IAAI,CAAC,MAAM,EAAE;4BACf,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;yBAChC;qBACF;oBACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAC7C,CAAC;iBACH;gBAED,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;WAAC;QAEF;;;;mBAA+C,GAAG,EAAE;gBAClD,IAAI,CAAC,IAAA,4BAAe,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBAClC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;iBAC3C;gBACD,OAAO,IAAI,CAAC,OAAO,CAAC;YACtB,CAAC;WAAC;QAEF;;;;mBAAoD,KAAK,EACvD,MAA2B,EACG,EAAE;gBAChC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC/B,OAAO,MAAM,CAAC;YAChB,CAAC;WAAC;QAYF;;;;mBAAsE,KAAK,EACzE,IAAI,EACJ,EAAE;gBACF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBAChC,QAAQ,MAAM,EAAE;oBACd,KAAK,aAAa;wBAChB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvB,KAAK,qBAAqB;wBACxB,MAAM,CAAC,EAAE,CAAC,GAAG,MAAiC,CAAC;wBAC/C,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;oBAClC,KAAK,sBAAsB;wBAEzB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnD,KAAK,eAAe;wBAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;4BACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;yBAC3C;wBACD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,MAAO,CAAC;wBAChC,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE;4BACrE,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;yBACH;wBAED,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;oBAChD;wBAEE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACvC;YACH,CAAC;WAAC;QA3WA,IAAI,CAAC,aAAa,GAAG,IAAI,EAAE,YAAY,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,kBAAkB,GAAG,IAAI,EAAE,iBAAiB,IAAI,IAAI,CAAC;QAC1D,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,gBAAgB;YACnB,IAAI,EAAE,gBAAgB,IAAI,0CAA2B,CAAC;QACxD,IAAI,CAAC,qBAAqB;YACxB,IAAI,EAAE,qBAAqB,IAAI,gDAAiC,CAAC;QAEnE,IAAA,0CAAuB,EAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAuOD,oBAAoB,CAAC,OAAY;QAC/B,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE;YACzB,MAAM,eAAe,GAAuB,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;YACpE,OAAO,CACL,CAAC,eAAe,EAAE,QAAQ,CACxB,oEAAoE,CACrE;gBACC,eAAe,EAAE,KAAK,CAAC,8BAA8B,CAAC,KAAK,IAAI,CAAC;gBAClE,KAAK,CACN,CAAC;SACH;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,OAAY;QACtB,IAAI,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE;YAC1B,IAAI,aAAa,GAAW,EAAE,CAAC;YAC/B,IAAI,eAAe,GAAuB,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;YAClE,IAAI,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;gBAElD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAC1D,IAAI,OAAO,IAAI,IAAI,EAAE;oBACnB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACpC,aAAa,GAAG,uBAAuB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;oBACnD,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC5B;aACF;YACD,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,+DAA+D,eAAe,IAAI,aAAa,EAAE,CAClG,CAAC;YACF,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5B,OAAO,KAAK,CAAC;SACd;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAiDD,2BAA2B,CAAC,MAAwC;QAClE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;SACH;QAED,OAAO,IAAA,0CAA2B,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;CAgCF;AA/YD,0CA+YC","sourcesContent":["import {\n fromHex,\n type Address,\n type Chain,\n type Hash,\n type Hex,\n type HttpTransport,\n type RpcTransactionRequest,\n getAbiItem,\n} from \"viem\";\nimport {\n deepHexlify,\n resolveProperties,\n type SmartAccountProviderOpts,\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 EntryPointAbi,\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\";\nimport { getChain } from \"./utils.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 = 0,\n DelegateCall = 1,\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 readonly bundlerProvider?: PaymasterAndBundlerProviders;\n private _txMaxRetries: number;\n private _txRetryIntervalMs: number;\n private _shouldConsume: boolean = true;\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 ?? 20,\n txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,\n minPriorityFeePerBid:\n opts?.minPriorityFeePerBid ??\n minPriorityFeePerBidDefaults.get(_chain.id),\n });\n\n this._txMaxRetries = opts?.txMaxRetries ?? 20;\n this._txRetryIntervalMs = opts?.txRetryIntervalMs ?? 5000;\n this.bundlerProvider = bundlerProvider;\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 shouldConsume = (): boolean => this._shouldConsume;\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 buildUserOperation = async <\n T extends UserOperationCallData | BatchUserOperationCallData\n >(\n data: T,\n overrides?: UserOperationOverrides,\n operation: UserOpDataOperationTypes<T> = Operation.Call as UserOpDataOperationTypes<T>\n ): Promise<UserOperationStruct> => {\n this._shouldConsume = false;\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 const nonce = await this.account.getNonce();\n const result = await this._runMiddlewareStack(\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 } as UserOperationStruct,\n overrides\n );\n this._shouldConsume = true;\n return result;\n };\n\n private _runMiddlewareStack = async (\n uo: UserOperationStruct,\n overrides?: UserOperationOverrides\n ): Promise<UserOperationStruct> => {\n const result = await asyncPipe(\n this.dummyPaymasterDataMiddleware,\n this.feeDataGetter,\n this.paymasterDataMiddleware,\n this.gasEstimator,\n this.customMiddleware ?? noOpMiddleware,\n async (struct) => ({ ...struct, ...overrides })\n )(uo);\n\n return deepHexlify(await resolveProperties<UserOperationStruct>(result));\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 (!this._shouldConsume)\n throw new Error(\n \"Cannot send user operation while building user operation\"\n );\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 const nonce = await this.account.getNonce();\n let uoStruct: UserOperationStruct;\n let request: UserOperationStruct;\n let maxFeePerGas, maxPriorityFeePerGas;\n do {\n 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 await this.account.approvePlugin();\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\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 waitForUserOperationTransaction = async (hash: Hash): Promise<Hash> => {\n let blockNumber = await this.rpcClient.getBlockNumber();\n for (let i = 0; i < this._txMaxRetries; i++) {\n if (this.bundlerProvider === \"GELATO\") {\n const receipt = await this.getUserOperationReceipt(\n hash as `0x${string}`\n )\n // TODO: should maybe log the error?\n .catch(() => null);\n if (receipt) {\n return this.getTransaction(receipt.receipt.transactionHash).then(\n (x) => x.hash\n );\n }\n } else {\n const logs = await this.rpcClient.getLogs({\n address: ENTRYPOINT_ADDRESS,\n event: getAbiItem({ abi: EntryPointAbi, name: \"UserOperationEvent\" }),\n args: { userOpHash: hash },\n fromBlock: blockNumber - 100n,\n });\n if (logs.length) {\n return logs[0].transactionHash;\n }\n }\n await new Promise((resolve) =>\n setTimeout(resolve, this._txRetryIntervalMs)\n );\n }\n\n throw new Error(\"Failed to find transaction for User Operation\");\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 = \"0x\";\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 \"eth_signTypedData_v4\":\n //@ts-expect-error\n return this.signTypedData(JSON.parse(params[1]));\n case \"personal_sign\":\n if (!this.account) {\n throw new Error(\"account not connected!\");\n }\n const [data, address] = params!;\n if (address.toLowerCase() !== (await this.getAddress()).toLowerCase()) {\n throw new Error(\n \"cannot sign for address that is not the current account\"\n );\n }\n // @ts-ignore\n return this.account.signMessageWith6492(data);\n default:\n // @ts-ignore\n return this.rpcClient.request(args);\n }\n };\n}\n"]}
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 getAbiItem,\n} from \"viem\";\nimport {\n deepHexlify,\n resolveProperties,\n type SmartAccountProviderOpts,\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 EntryPointAbi,\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\";\nimport { getChain } from \"./utils.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 gasFeeBufferPecentage?: number;\n };\n};\n\nexport enum Operation {\n Call = 0,\n DelegateCall = 1,\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 readonly bundlerProvider?: PaymasterAndBundlerProviders;\n private _txMaxRetries: number;\n private _txRetryIntervalMs: number;\n private _shouldConsume: boolean = true;\n public gasFeeBufferPecentage: 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 ?? 20,\n txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,\n minPriorityFeePerBid:\n opts?.minPriorityFeePerBid ??\n minPriorityFeePerBidDefaults.get(_chain.id),\n });\n\n this.gasFeeBufferPecentage = opts?.gasFeeBufferPecentage ?? 13;\n this._txMaxRetries = opts?.txMaxRetries ?? 20;\n this._txRetryIntervalMs = opts?.txRetryIntervalMs ?? 5000;\n this.bundlerProvider = bundlerProvider;\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 shouldConsume = (): boolean => this._shouldConsume;\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 buildUserOperation = async <\n T extends UserOperationCallData | BatchUserOperationCallData\n >(\n data: T,\n overrides?: UserOperationOverrides,\n operation: UserOpDataOperationTypes<T> = Operation.Call as UserOpDataOperationTypes<T>\n ): Promise<UserOperationStruct> => {\n this._shouldConsume = false;\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 const nonce = await this.account.getNonce();\n const result = await this._runMiddlewareStack(\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 } as UserOperationStruct,\n overrides\n );\n this._shouldConsume = true;\n return result;\n };\n\n private _runMiddlewareStack = async (\n uo: UserOperationStruct,\n overrides?: UserOperationOverrides\n ): Promise<UserOperationStruct> => {\n const result = await asyncPipe(\n this.dummyPaymasterDataMiddleware,\n this.feeDataGetter,\n this.paymasterDataMiddleware,\n this.gasEstimator,\n this.customMiddleware ?? noOpMiddleware,\n async (struct) => ({ ...struct, ...overrides })\n )(uo);\n\n return deepHexlify(await resolveProperties<UserOperationStruct>(result));\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 (!this._shouldConsume)\n throw new Error(\n \"Cannot send user operation while building user operation\"\n );\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 const nonce = await this.account.getNonce();\n let uoStruct: UserOperationStruct;\n let request: UserOperationStruct;\n let maxFeePerGas, maxPriorityFeePerGas;\n do {\n 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 await this.account.approvePlugin();\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\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 waitForUserOperationTransaction = async (hash: Hash): Promise<Hash> => {\n let blockNumber = await this.rpcClient.getBlockNumber();\n for (let i = 0; i < this._txMaxRetries; i++) {\n if (this.bundlerProvider === \"GELATO\") {\n const receipt = await this.getUserOperationReceipt(\n hash as `0x${string}`\n )\n // TODO: should maybe log the error?\n .catch(() => null);\n if (receipt) {\n return this.getTransaction(receipt.receipt.transactionHash).then(\n (x) => x.hash\n );\n }\n } else {\n const logs = await this.rpcClient.getLogs({\n address: ENTRYPOINT_ADDRESS,\n event: getAbiItem({ abi: EntryPointAbi, name: \"UserOperationEvent\" }),\n args: { userOpHash: hash },\n fromBlock: blockNumber - 100n,\n });\n if (logs.length) {\n return logs[0].transactionHash;\n }\n }\n await new Promise((resolve) =>\n setTimeout(resolve, this._txRetryIntervalMs)\n );\n }\n\n throw new Error(\"Failed to find transaction for User Operation\");\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 = \"0x\";\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 \"eth_signTypedData_v4\":\n //@ts-expect-error\n return this.signTypedData(JSON.parse(params[1]));\n case \"personal_sign\":\n if (!this.account) {\n throw new Error(\"account not connected!\");\n }\n const [data, address] = params!;\n if (address.toLowerCase() !== (await this.getAddress()).toLowerCase()) {\n throw new Error(\n \"cannot sign for address that is not the current account\"\n );\n }\n // @ts-ignore\n return this.account.signMessageWith6492(data);\n default:\n // @ts-ignore\n return this.rpcClient.request(args);\n }\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/recovery-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ValidatorProvider,\n type ExtendedValidatorProviderParams,\n} from \"./base.js\";\nimport {\n RecoveryValidator,\n type RecoveryConfig,\n type RecoveryValidatorParams,\n} from \"../validator/recovery-validator.js\";\nimport { type Address, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport {\n getChainId,\n getRecoveryData,\n postRecoveryData,\n setSignatures,\n} from \"../api/index.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { CHAIN_ID_TO_NODE, RECOVERY_VALIDATOR_ADDRESS } from \"../constants.js\";\nimport {\n encodeAbiParameters,\n encodeFunctionData,\n parseAbiParameters,\n type Hex,\n keccak256,\n publicActions,\n type TransactionReceipt,\n createPublicClient,\n http,\n decodeAbiParameters,\n} from \"viem\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { base64ToBytes, bytesToBase64, getChain } from \"../utils.js\";\n\nexport interface RecoveryProviderParams\n extends ExtendedValidatorProviderParams<RecoveryValidatorParams> {\n recoveryId?: string;\n enableData?: Hex;\n}\n\nexport class RecoveryProvider extends ValidatorProvider<\n RecoveryValidator,\n RecoveryValidatorParams\n> {\n recoveryId?: string;\n enableData?: Hex;\n constructor(params: RecoveryProviderParams) {\n const chain =\n typeof params.opts?.providerConfig?.chain === \"number\"\n ? getChain(params.opts.providerConfig.chain)\n : params.opts?.providerConfig?.chain ?? polygonMumbai;\n const validator = new RecoveryValidator({\n projectId: params.projectId,\n chain,\n recoveryId: params.recoveryId,\n validatorAddress:\n params.opts?.validatorConfig?.validatorAddress ??\n RECOVERY_VALIDATOR_ADDRESS,\n ...params.opts?.validatorConfig,\n });\n super(\n {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: { ...params.opts?.providerConfig, chain },\n },\n },\n validator\n );\n this.recoveryId = params.recoveryId;\n this.enableData = params.enableData;\n }\n\n public static async init(\n params: RecoveryProviderParams\n ): Promise<RecoveryProvider> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n let accountAddress,\n enableData,\n signatures,\n serializedRecoveryConfig,\n recoveryConfig;\n if (params.recoveryId) {\n ({\n scwAddress: accountAddress,\n enableData,\n recoveryConfig: serializedRecoveryConfig,\n signatures,\n } = await getRecoveryData(params.recoveryId));\n recoveryConfig = RecoveryProvider.deserializeRecoveryConfig(\n serializedRecoveryConfig\n );\n } else if (\n params.opts?.accountConfig?.accountAddress &&\n (!params.opts?.validatorConfig?.guardians ||\n !Object.entries(params.opts?.validatorConfig?.guardians).length ||\n params.opts.validatorConfig.threshold === undefined)\n ) {\n const publicClient = createPublicClient({\n transport: http(CHAIN_ID_TO_NODE[chain?.id ?? polygonMumbai.id]),\n chain: chain ?? polygonMumbai,\n });\n recoveryConfig = await RecoveryValidator.fetchRecoveryConfigFromContract(\n params.opts?.accountConfig?.accountAddress,\n publicClient\n );\n }\n const instance = new RecoveryProvider({\n enableData,\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n accountConfig: {\n accountAddress,\n ...params.opts?.accountConfig,\n },\n validatorConfig: {\n signatures,\n ...recoveryConfig,\n ...params.opts?.validatorConfig,\n },\n },\n });\n return instance;\n }\n\n async getDefaultValidator(): Promise<Address> {\n const publicClient = this.getValidator().getPublicClient();\n const kernelAccountAddress = await this.getAddress();\n return await publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n }\n\n async encodeCalldataAndNonce(enableData: Hex): Promise<Hex> {\n const defaultValidatorAddress = await this.getDefaultValidator();\n const callData = encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n const sender = await this.getAddress();\n const nonce = await (await this.getAccount()).getNonce();\n const encodedCallDataAndNonce = encodeAbiParameters(\n parseAbiParameters(\"address sender, bytes calldata, uint256 nonce\"),\n [sender, callData, nonce]\n );\n return keccak256(encodedCallDataAndNonce);\n }\n\n async enableRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const { selector } = await this.getValidator().getPluginValidatorData();\n const kernelAccountAddress = await this.defaultProvider.getAddress();\n const encodedSetExecData = await this.getAccount().encodeSetExection();\n if (\n await this.getValidator().isPluginEnabled(kernelAccountAddress, selector)\n ) {\n throw Error(\"Plugin already enabled\");\n }\n return await this.defaultProvider.sendUserOperation({\n target: kernelAccountAddress,\n data: encodedSetExecData,\n });\n }\n\n async renewRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const enableData = await this.getValidator().getEnableData();\n const [guardians, weights, threshold, delay] = decodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n enableData\n );\n const encodedRenewData = await this.getValidator().encodeRenew(\n [...guardians],\n [...weights],\n threshold,\n delay\n );\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedRenewData,\n });\n }\n\n async initiateRecovery(enableData: Hex): Promise<string> { // blake 1\n const serializedConfig = this.serializeRecoveryConfig();\n const recoveryId = await postRecoveryData(\n enableData,\n await this.getAddress(),\n serializedConfig\n );\n console.log(recoveryId);\n this.enableData = enableData;\n if (!recoveryId) {\n throw Error(\"Unable to generate the recoveryId\");\n }\n return recoveryId;\n }\n\n serializeRecoveryConfig(): string {\n let recoveryConfig = this.getValidator().getRecoveryConfig();\n const jsonString = JSON.stringify(recoveryConfig);\n const uint8Array = new TextEncoder().encode(jsonString);\n const base64String = bytesToBase64(uint8Array);\n return base64String;\n }\n\n public static deserializeRecoveryConfig(\n recoveryConfig: string\n ): RecoveryConfig {\n const uint8Array = base64ToBytes(recoveryConfig);\n const jsonString = new TextDecoder().decode(uint8Array);\n return JSON.parse(jsonString) as RecoveryConfig;\n }\n\n async approveRecovery(enableData?: Hex): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitialized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApprove(\n callDataAndNonceHash!,\n kernelAccountAddress!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async signRecovery(enableData?: Hex) {\n try {\n if (!this.recoveryId) {\n throw Error(\"RecoveryId not set\");\n }\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const sig = await this.getValidator().signRecoveryHash(\n callDataAndNonceHash\n );\n const { result, data } = await setSignatures(this.recoveryId, sig);\n if (result !== \"success\") {\n throw Error(\"Failed to save the signatures\");\n }\n this.getValidator().setRecoverySignatures(data.signatures);\n } catch (error) {\n console.log(error);\n }\n }\n\n async approveRecoveryWithSig(\n enableData?: Hex,\n sigs?: Hex\n ): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const signatures =\n sigs ?? (await this.getValidator().getRecoverySignatures());\n if (!signatures) {\n throw Error(\"Signatures are not set\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitilized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApproveWithSig(\n callDataAndNonceHash,\n kernelAccountAddress,\n sigs!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async cancelRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const encodedVetoData = await this.getValidator().encodeVeto(\n callDataAndNonceHash\n );\n\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedVetoData,\n });\n }\n\n async submitRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const defaultValidatorAddress = await this.getDefaultValidator();\n const encodedRecoveryActionData =\n await this.getValidator().encodeRecoveryAction(\n fetchedEnableData,\n defaultValidatorAddress\n );\n\n return await this.sendUserOperation({\n target: await this.getAddress(),\n data: encodedRecoveryActionData,\n });\n }\n\n // [TODO]\n // changeGuardian = this.sendEnableUserOperation;\n\n deleteRecoveryData = this.sendDisableUserOperation;\n}\n"]}
1
+ {"version":3,"file":"recovery-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/recovery-provider.ts"],"names":[],"mappings":";;;AAAA,uCAGmB;AACnB,8EAI4C;AAE5C,8CAKyB;AACzB,wCAA4C;AAC5C,kDAA+E;AAC/E,+BAWc;AACd,uEAAiE;AACjE,qEAA+D;AAC/D,0CAAqE;AAQrE,MAAa,gBAAiB,SAAQ,2BAGrC;IAGC,YAAY,MAA8B;QACxC,MAAM,KAAK,GACT,OAAO,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,KAAK,QAAQ;YACpD,CAAC,CAAC,IAAA,mBAAQ,EAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAC5C,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,IAAI,sBAAa,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,yCAAiB,CAAC;YACtC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK;YACL,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,gBAAgB,EACd,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB;gBAC9C,yCAA0B;YAC5B,GAAG,MAAM,CAAC,IAAI,EAAE,eAAe;SAChC,CAAC,CAAC;QACH,KAAK,CACH;YACE,GAAG,MAAM;YACT,IAAI,EAAE;gBACJ,GAAG,MAAM,CAAC,IAAI;gBACd,cAAc,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE;aAC1D;SACF,EACD,SAAS,CACV,CAAC;QAzBJ;;;;;WAAoB;QACpB;;;;;WAAiB;QAsUjB;;;;mBAAqB,IAAI,CAAC,wBAAwB;WAAC;QA7SjD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,MAA8B;QAE9B,MAAM,OAAO,GAAG,MAAM,IAAA,qBAAU,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACtC;QACD,MAAM,KAAK,GAAG,IAAA,mBAAQ,EAAC,OAAO,CAAC,CAAC;QAChC,IAAI,cAAc,EAChB,UAAU,EACV,UAAU,EACV,wBAAwB,EACxB,cAAc,CAAC;QACjB,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,CAAC;gBACC,UAAU,EAAE,cAAc;gBAC1B,UAAU;gBACV,cAAc,EAAE,wBAAwB;gBACxC,UAAU;aACX,GAAG,MAAM,IAAA,0BAAe,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9C,cAAc,GAAG,gBAAgB,CAAC,yBAAyB,CACzD,wBAAwB,CACzB,CAAC;SACH;aAAM,IACL,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc;YAC1C,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS;gBACvC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,MAAM;gBAC/D,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,KAAK,SAAS,CAAC,EACtD;YACA,MAAM,YAAY,GAAG,IAAA,yBAAkB,EAAC;gBACtC,SAAS,EAAE,IAAA,WAAI,EAAC,+BAAgB,CAAC,KAAK,EAAE,EAAE,IAAI,sBAAa,CAAC,EAAE,CAAC,CAAC;gBAChE,KAAK,EAAE,KAAK,IAAI,sBAAa;aAC9B,CAAC,CAAC;YACH,cAAc,GAAG,MAAM,yCAAiB,CAAC,+BAA+B,CACtE,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,EAC1C,YAAY,CACb,CAAC;SACH;QACD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;YACpC,UAAU;YACV,GAAG,MAAM;YACT,IAAI,EAAE;gBACJ,GAAG,MAAM,CAAC,IAAI;gBACd,cAAc,EAAE;oBACd,KAAK;oBACL,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc;iBAC/B;gBACD,aAAa,EAAE;oBACb,cAAc;oBACd,GAAG,MAAM,CAAC,IAAI,EAAE,aAAa;iBAC9B;gBACD,eAAe,EAAE;oBACf,UAAU;oBACV,GAAG,cAAc;oBACjB,GAAG,MAAM,CAAC,IAAI,EAAE,eAAe;iBAChC;aACF;SACF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,eAAe,EAAE,CAAC;QAC3D,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACrD,OAAO,MAAM,YAAY,CAAC,YAAY,CAAC;YACrC,GAAG,EAAE,sCAAgB;YACrB,OAAO,EAAE,oBAAoB;YAC7B,YAAY,EAAE,qBAAqB;SACpC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,UAAe;QAC1C,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAA,yBAAkB,EAAC;YAClC,GAAG,EAAE,wCAAiB;YACtB,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE,CAAC,uBAAuB,EAAE,UAAU,CAAC;SAC5C,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzD,MAAM,uBAAuB,GAAG,IAAA,0BAAmB,EACjD,IAAA,yBAAkB,EAAC,+CAA+C,CAAC,EACnE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAC1B,CAAC;QACF,OAAO,IAAA,gBAAS,EAAC,uBAAuB,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAC7C;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,sBAAsB,EAAE,CAAC;QACxE,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;QACrE,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB,EAAE,CAAC;QACvE,IACE,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,eAAe,CAAC,oBAAoB,EAAE,QAAQ,CAAC,EACzE;YACA,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;SACvC;QACD,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;YAClD,MAAM,EAAE,oBAAoB;YAC5B,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAC7C;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC;QAC7D,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,IAAA,0BAAmB,EAChE,IAAA,yBAAkB,EAChB,uEAAuE,CACxE,EACD,UAAU,CACX,CAAC;QACF,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,CAC5D,CAAC,GAAG,SAAS,CAAC,EACd,CAAC,GAAG,OAAO,CAAC,EACZ,SAAS,EACT,KAAK,CACN,CAAC;QACF,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;YAClD,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,gBAAgB;YAC5C,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAe;QACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,MAAM,IAAA,2BAAgB,EACvC,UAAU,EACV,MAAM,IAAI,CAAC,UAAU,EAAE,EACvB,gBAAgB,CACjB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,KAAK,CAAC,mCAAmC,CAAC,CAAC;SAClD;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,uBAAuB;QACrB,IAAI,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAA,wBAAa,EAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,MAAM,CAAC,yBAAyB,CACrC,cAAsB;QAEtB,MAAM,UAAU,GAAG,IAAA,wBAAa,EAAC,cAAc,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAmB,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAgB;QACpC,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE;YACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;SACzD;QACD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC5D,iBAAiB,CAClB,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YAC3B,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;SAC3C;QACD,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAa,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC;QACZ,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;SAChC;aAAM;YACL,CAAC,OAAO,CAAC,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;SACnD;QACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC;YAC9C,OAAO;YACP,EAAE,EAAE,SAAS,CAAC,UAAU,EAAE;YAC1B,IAAI,EAAE,SAAS,CAAC,aAAa,CAC3B,oBAAqB,EACrB,oBAAqB,CACtB;SACF,CAAC,CAAC;QACH,OAAO,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAgB;QACjC,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,MAAM,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACnC;YACD,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;YACxD,IAAI,CAAC,iBAAiB,EAAE;gBACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;aACzD;YACD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC5D,iBAAiB,CAClB,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,gBAAgB,CACpD,oBAAoB,CACrB,CAAC;YACF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,wBAAa,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YACnE,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAC;aAC9C;YACD,IAAI,CAAC,YAAY,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC5D;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACpB;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,UAAgB,EAChB,IAAU;QAEV,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE;YACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;SACzD;QACD,MAAM,UAAU,GACd,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;SACvC;QACD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC5D,iBAAiB,CAClB,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YAC3B,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC1C;QACD,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAa,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC;QACZ,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;SAChC;aAAM;YACL,CAAC,OAAO,CAAC,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;SACnD;QACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC;YAC9C,OAAO;YACP,EAAE,EAAE,SAAS,CAAC,UAAU,EAAE;YAC1B,IAAI,EAAE,SAAS,CAAC,oBAAoB,CAClC,oBAAoB,EACpB,oBAAoB,EACpB,IAAK,CACN;SACF,CAAC,CAAC;QACH,OAAO,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAgB;QACnC,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE;YACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;SACzD;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAC7C;QACD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC5D,iBAAiB,CAClB,CAAC;QACF,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAC1D,oBAAoB,CACrB,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;YAClD,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,gBAAgB;YAC5C,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAgB;QACnC,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE;YACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;SACzD;QACD,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjE,MAAM,yBAAyB,GAC7B,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,oBAAoB,CAC5C,iBAAiB,EACjB,uBAAuB,CACxB,CAAC;QAEJ,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC;YAClC,MAAM,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YAC/B,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAC;IACL,CAAC;CAMF;AA5UD,4CA4UC","sourcesContent":["import {\n ValidatorProvider,\n type ExtendedValidatorProviderParams,\n} from \"./base.js\";\nimport {\n RecoveryValidator,\n type RecoveryConfig,\n type RecoveryValidatorParams,\n} from \"../validator/recovery-validator.js\";\nimport { type Address, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport {\n getChainId,\n getRecoveryData,\n postRecoveryData,\n setSignatures,\n} from \"../api/index.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { CHAIN_ID_TO_NODE, RECOVERY_VALIDATOR_ADDRESS } from \"../constants.js\";\nimport {\n encodeAbiParameters,\n encodeFunctionData,\n parseAbiParameters,\n type Hex,\n keccak256,\n publicActions,\n type TransactionReceipt,\n createPublicClient,\n http,\n decodeAbiParameters,\n} from \"viem\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { base64ToBytes, bytesToBase64, getChain } from \"../utils.js\";\n\nexport interface RecoveryProviderParams\n extends ExtendedValidatorProviderParams<RecoveryValidatorParams> {\n recoveryId?: string;\n enableData?: Hex;\n}\n\nexport class RecoveryProvider extends ValidatorProvider<\n RecoveryValidator,\n RecoveryValidatorParams\n> {\n recoveryId?: string;\n enableData?: Hex;\n constructor(params: RecoveryProviderParams) {\n const chain =\n typeof params.opts?.providerConfig?.chain === \"number\"\n ? getChain(params.opts.providerConfig.chain)\n : params.opts?.providerConfig?.chain ?? polygonMumbai;\n const validator = new RecoveryValidator({\n projectId: params.projectId,\n chain,\n recoveryId: params.recoveryId,\n validatorAddress:\n params.opts?.validatorConfig?.validatorAddress ??\n RECOVERY_VALIDATOR_ADDRESS,\n ...params.opts?.validatorConfig,\n });\n super(\n {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: { ...params.opts?.providerConfig, chain },\n },\n },\n validator\n );\n this.recoveryId = params.recoveryId;\n this.enableData = params.enableData;\n }\n\n public static async init(\n params: RecoveryProviderParams\n ): Promise<RecoveryProvider> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n let accountAddress,\n enableData,\n signatures,\n serializedRecoveryConfig,\n recoveryConfig;\n if (params.recoveryId) {\n ({\n scwAddress: accountAddress,\n enableData,\n recoveryConfig: serializedRecoveryConfig,\n signatures,\n } = await getRecoveryData(params.recoveryId));\n recoveryConfig = RecoveryProvider.deserializeRecoveryConfig(\n serializedRecoveryConfig\n );\n } else if (\n params.opts?.accountConfig?.accountAddress &&\n (!params.opts?.validatorConfig?.guardians ||\n !Object.entries(params.opts?.validatorConfig?.guardians).length ||\n params.opts.validatorConfig.threshold === undefined)\n ) {\n const publicClient = createPublicClient({\n transport: http(CHAIN_ID_TO_NODE[chain?.id ?? polygonMumbai.id]),\n chain: chain ?? polygonMumbai,\n });\n recoveryConfig = await RecoveryValidator.fetchRecoveryConfigFromContract(\n params.opts?.accountConfig?.accountAddress,\n publicClient\n );\n }\n const instance = new RecoveryProvider({\n enableData,\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n accountConfig: {\n accountAddress,\n ...params.opts?.accountConfig,\n },\n validatorConfig: {\n signatures,\n ...recoveryConfig,\n ...params.opts?.validatorConfig,\n },\n },\n });\n return instance;\n }\n\n async getDefaultValidator(): Promise<Address> {\n const publicClient = this.getValidator().getPublicClient();\n const kernelAccountAddress = await this.getAddress();\n return await publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n }\n\n async encodeCalldataAndNonce(enableData: Hex): Promise<Hex> {\n const defaultValidatorAddress = await this.getDefaultValidator();\n const callData = encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n const sender = await this.getAddress();\n const nonce = await (await this.getAccount()).getNonce();\n const encodedCallDataAndNonce = encodeAbiParameters(\n parseAbiParameters(\"address sender, bytes calldata, uint256 nonce\"),\n [sender, callData, nonce]\n );\n return keccak256(encodedCallDataAndNonce);\n }\n\n async enableRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const { selector } = await this.getValidator().getPluginValidatorData();\n const kernelAccountAddress = await this.defaultProvider.getAddress();\n const encodedSetExecData = await this.getAccount().encodeSetExection();\n if (\n await this.getValidator().isPluginEnabled(kernelAccountAddress, selector)\n ) {\n throw Error(\"Plugin already enabled\");\n }\n return await this.defaultProvider.sendUserOperation({\n target: kernelAccountAddress,\n data: encodedSetExecData,\n });\n }\n\n async renewRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const enableData = await this.getValidator().getEnableData();\n const [guardians, weights, threshold, delay] = decodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n enableData\n );\n const encodedRenewData = await this.getValidator().encodeRenew(\n [...guardians],\n [...weights],\n threshold,\n delay\n );\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedRenewData,\n });\n }\n\n async initiateRecovery(enableData: Hex): Promise<string> {\n const serializedConfig = this.serializeRecoveryConfig();\n const recoveryId = await postRecoveryData(\n enableData,\n await this.getAddress(),\n serializedConfig\n );\n console.log(recoveryId);\n this.enableData = enableData;\n if (!recoveryId) {\n throw Error(\"Unable to generate the recoveryId\");\n }\n return recoveryId;\n }\n\n serializeRecoveryConfig(): string {\n let recoveryConfig = this.getValidator().getRecoveryConfig();\n const jsonString = JSON.stringify(recoveryConfig);\n const uint8Array = new TextEncoder().encode(jsonString);\n const base64String = bytesToBase64(uint8Array);\n return base64String;\n }\n\n public static deserializeRecoveryConfig(\n recoveryConfig: string\n ): RecoveryConfig {\n const uint8Array = base64ToBytes(recoveryConfig);\n const jsonString = new TextDecoder().decode(uint8Array);\n return JSON.parse(jsonString) as RecoveryConfig;\n }\n\n async approveRecovery(enableData?: Hex): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitialized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApprove(\n callDataAndNonceHash!,\n kernelAccountAddress!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async signRecovery(enableData?: Hex) {\n try {\n if (!this.recoveryId) {\n throw Error(\"RecoveryId not set\");\n }\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const sig = await this.getValidator().signRecoveryHash(\n callDataAndNonceHash\n );\n const { result, data } = await setSignatures(this.recoveryId, sig);\n if (result !== \"success\") {\n throw Error(\"Failed to save the signatures\");\n }\n this.getValidator().setRecoverySignatures(data.signatures);\n } catch (error) {\n console.log(error);\n }\n }\n\n async approveRecoveryWithSig(\n enableData?: Hex,\n sigs?: Hex\n ): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const signatures =\n sigs ?? (await this.getValidator().getRecoverySignatures());\n if (!signatures) {\n throw Error(\"Signatures are not set\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitilized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApproveWithSig(\n callDataAndNonceHash,\n kernelAccountAddress,\n sigs!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async cancelRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const encodedVetoData = await this.getValidator().encodeVeto(\n callDataAndNonceHash\n );\n\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedVetoData,\n });\n }\n\n async submitRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const defaultValidatorAddress = await this.getDefaultValidator();\n const encodedRecoveryActionData =\n await this.getValidator().encodeRecoveryAction(\n fetchedEnableData,\n defaultValidatorAddress\n );\n\n return await this.sendUserOperation({\n target: await this.getAddress(),\n data: encodedRecoveryActionData,\n });\n }\n\n // [TODO]\n // changeGuardian = this.sendEnableUserOperation;\n\n deleteRecoveryData = this.sendDisableUserOperation;\n}\n"]}
@@ -17,7 +17,7 @@ export declare const DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000
17
17
  export declare const ERC165_SESSION_KEY_VALIDATOR_ADDRESS = "0xe149290800De29D4b0BF9dB82c508255D81902E6";
18
18
  export declare const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
19
19
  export declare const SESSION_KEY_VALIDATOR_ADDRESS = "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
20
- export declare const RECOVERY_VALIDATOR_ADDRESS = "0xa7e3Bc66086Ae51b20e59b6C84666635A0d0A16C";
20
+ export declare const RECOVERY_VALIDATOR_ADDRESS = "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
21
21
  export declare const RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
22
22
  export declare const oneAddress = "0x0000000000000000000000000000000000000001";
23
23
  export declare const gasTokenChainAddresses: IGasTokenAddresses;
@@ -17,7 +17,7 @@ export const DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff000000000000000
17
17
  export const ERC165_SESSION_KEY_VALIDATOR_ADDRESS = "0xe149290800De29D4b0BF9dB82c508255D81902E6";
18
18
  export const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
19
19
  export const SESSION_KEY_VALIDATOR_ADDRESS = "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
20
- export const RECOVERY_VALIDATOR_ADDRESS = "0xa7e3Bc66086Ae51b20e59b6C84666635A0d0A16C";
20
+ export const RECOVERY_VALIDATOR_ADDRESS = "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
21
21
  export const RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
22
22
  export const oneAddress = "0x0000000000000000000000000000000000000001";
23
23
  export const gasTokenChainAddresses = {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseUnits, type Hex } from \"viem\";\nimport type { IGasTokenAddresses } from \"./paymaster/types.js\";\nimport { polygon } from \"viem/chains\";\n\nexport const DEFAULT_SEND_TX_MAX_RETRIES = 3;\nexport const DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 60000; // 1 minutes\nexport const BUNDLER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/bundler\";\nexport const PAYMASTER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/paymaster\";\nexport const ENTRYPOINT_ADDRESS: Hex =\n \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\";\nexport const MULTISEND_ADDR: Hex = \"0x8ae01fcf7c655655ff2c6ef907b8b4718ab4e17c\";\nexport const BACKEND_URL = \"https://backend-vikp.onrender.com\";\nexport const API_URL = \"https://prod-api.zerodev.app\";\nexport const ECDSA_VALIDATOR_ADDRESS =\n \"0xd9AB5096a832b9ce79914329DAEE236f8Eea0390\";\nexport const KERNEL_FACTORY_ADDRESS =\n \"0x5de4839a76cf55d0c90e2061ef4386d962E15ae3\";\nexport const KERNEL_IMPL_ADDRESS = \"0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5\";\nexport const KILL_SWITCH_VALIDATOR_ADDRESS =\n \"0x7393A7dA58CCfFb78f52adb09705BE6E20F704BC\";\nexport const KILL_SWITCH_ACTION = \"0x3f38e479304c7F18F988269a1bDa7d646bd48243\";\nexport const DUMMY_ECDSA_SIG =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\nexport const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =\n \"0xe149290800De29D4b0BF9dB82c508255D81902E6\";\nexport const TOKEN_ACTION = \"0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1\";\nexport const SESSION_KEY_VALIDATOR_ADDRESS =\n \"0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5\";\nexport const RECOVERY_VALIDATOR_ADDRESS =\n \"0xa7e3Bc66086Ae51b20e59b6C84666635A0d0A16C\";\nexport const RECOVERY_ACTION = \"0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1\";\nexport const oneAddress = \"0x0000000000000000000000000000000000000001\";\n\nexport const gasTokenChainAddresses: IGasTokenAddresses = {\n USDC: {\n 1: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n // 5: \"0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557\",\n 137: \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n // 80001: \"\",\n // 420: \"0x7F5c764cBc14f9669B88837ca1490cCa17c31607\",\n 42161: \"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\n // 421613: \"\",\n 43114: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n // 43113: \"\",\n // 56: \"\",\n // 97: \"\"\n },\n PEPE: {\n 1: \"0x6982508145454Ce325dDbE47a25d4ec3d2311933\",\n },\n};\n\nexport const ERC20_APPROVAL_AMOUNT: { [key: string]: bigint } = {\n // ETH\n [gasTokenChainAddresses[\"USDC\"][1]]: parseUnits(\"100\", 6),\n\n // Goerli\n [gasTokenChainAddresses[\"USDC\"][5]]: parseUnits(\"100\", 6),\n\n // Polygon\n [gasTokenChainAddresses[\"USDC\"][137]]: parseUnits(\"10\", 6),\n\n // Arbitrum\n [gasTokenChainAddresses[\"USDC\"][42161]]: parseUnits(\"10\", 6),\n\n // Avalanche\n [gasTokenChainAddresses[\"USDC\"][43114]]: parseUnits(\"10\", 6),\n\n // ETH\n [gasTokenChainAddresses[\"PEPE\"][1]]: parseUnits(\"50000000\", 18),\n\n \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\": parseUnits(\"100\", 18),\n};\n\nexport const minPriorityFeePerBidDefaults = new Map<number, bigint>([\n [polygon.id, 30_000_000_000n],\n]);\n\nexport const INFURA_API_KEY = \"f36f7f706a58477884ce6fe89165666c\";\nexport const CHAIN_ID_TO_NODE: { [key: number]: string } = {\n 1: `https://mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 5: `https://goerli.infura.io/v3/${INFURA_API_KEY}`,\n 11155111:\n \"https://fittest-ultra-aura.ethereum-sepolia.quiknode.pro/3893d01b1dd411fdfa9b6dd372dd2b4f69fcf1ea/\",\n 137: `https://polygon-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 80001: `https://polygon-mumbai.infura.io/v3/${INFURA_API_KEY}`,\n 10: `https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 420: `https://optimism-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 42161: `https://arbitrum-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n // 42161: 'https://evocative-stylish-dinghy.arbitrum-mainnet.discover.quiknode.pro/80b526d14fa9fd9a8b0db1e65554acaf00c6a1ab/',\n 421613: `https://arbitrum-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 43114: `https://avalanche-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 43113: `https://avalanche-fuji.infura.io/v3/${INFURA_API_KEY}`,\n 1313161554: `https://aurora-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 1313161555: `https://aurora-testnet.infura.io/v3/${INFURA_API_KEY}`,\n 56: \"https://neat-greatest-layer.bsc.quiknode.pro/9405a499ceee314e5f2f68c9d47518d3537fce6a/\",\n 8453: \"https://twilight-red-tree.base-mainnet.quiknode.pro/dc6eb27bf0f917df215922488dd97f4de7d9b08e/\",\n 84531:\n \"https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596/\",\n 100: \"https://thrilling-fluent-film.xdai.quiknode.pro/305955cffb9868cdd95b5e3dc9775f20678ad9ac/\",\n 10200: \"https://nd-810-853-201.p2pify.com/e828b09f0d43591de96c297b3f36fffd\",\n 59144: `https://linea-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 59140: `https://linea-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 204: \"https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b\",\n 42069: \"https://rpc.op-testnet.gelato.digital\",\n 1261120: \"https://rpc.zkatana.gelato.digital\",\n 84532:\n \"https://floral-old-feather.base-sepolia.quiknode.pro/4c3b4295d0c174410872b1e461a91cc33c7969a9/\",\n 421614: `https://arbitrum-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n 11155420: `https://optimism-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n // 5611: 'opBnb-testnet',\n};\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseUnits, type Hex } from \"viem\";\nimport type { IGasTokenAddresses } from \"./paymaster/types.js\";\nimport { polygon } from \"viem/chains\";\n\nexport const DEFAULT_SEND_TX_MAX_RETRIES = 3;\nexport const DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 60000; // 1 minutes\nexport const BUNDLER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/bundler\";\nexport const PAYMASTER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/paymaster\";\nexport const ENTRYPOINT_ADDRESS: Hex =\n \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\";\nexport const MULTISEND_ADDR: Hex = \"0x8ae01fcf7c655655ff2c6ef907b8b4718ab4e17c\";\nexport const BACKEND_URL = \"https://backend-vikp.onrender.com\";\nexport const API_URL = \"https://prod-api.zerodev.app\";\nexport const ECDSA_VALIDATOR_ADDRESS =\n \"0xd9AB5096a832b9ce79914329DAEE236f8Eea0390\";\nexport const KERNEL_FACTORY_ADDRESS =\n \"0x5de4839a76cf55d0c90e2061ef4386d962E15ae3\";\nexport const KERNEL_IMPL_ADDRESS = \"0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5\";\nexport const KILL_SWITCH_VALIDATOR_ADDRESS =\n \"0x7393A7dA58CCfFb78f52adb09705BE6E20F704BC\";\nexport const KILL_SWITCH_ACTION = \"0x3f38e479304c7F18F988269a1bDa7d646bd48243\";\nexport const DUMMY_ECDSA_SIG =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\nexport const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =\n \"0xe149290800De29D4b0BF9dB82c508255D81902E6\";\nexport const TOKEN_ACTION = \"0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1\";\nexport const SESSION_KEY_VALIDATOR_ADDRESS =\n \"0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5\";\nexport const RECOVERY_VALIDATOR_ADDRESS =\n \"0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6\";\nexport const RECOVERY_ACTION = \"0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1\";\nexport const oneAddress = \"0x0000000000000000000000000000000000000001\";\n\nexport const gasTokenChainAddresses: IGasTokenAddresses = {\n USDC: {\n 1: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n // 5: \"0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557\",\n 137: \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n // 80001: \"\",\n // 420: \"0x7F5c764cBc14f9669B88837ca1490cCa17c31607\",\n 42161: \"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\n // 421613: \"\",\n 43114: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n // 43113: \"\",\n // 56: \"\",\n // 97: \"\"\n },\n PEPE: {\n 1: \"0x6982508145454Ce325dDbE47a25d4ec3d2311933\",\n },\n};\n\nexport const ERC20_APPROVAL_AMOUNT: { [key: string]: bigint } = {\n // ETH\n [gasTokenChainAddresses[\"USDC\"][1]]: parseUnits(\"100\", 6),\n\n // Goerli\n [gasTokenChainAddresses[\"USDC\"][5]]: parseUnits(\"100\", 6),\n\n // Polygon\n [gasTokenChainAddresses[\"USDC\"][137]]: parseUnits(\"10\", 6),\n\n // Arbitrum\n [gasTokenChainAddresses[\"USDC\"][42161]]: parseUnits(\"10\", 6),\n\n // Avalanche\n [gasTokenChainAddresses[\"USDC\"][43114]]: parseUnits(\"10\", 6),\n\n // ETH\n [gasTokenChainAddresses[\"PEPE\"][1]]: parseUnits(\"50000000\", 18),\n\n \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\": parseUnits(\"100\", 18),\n};\n\nexport const minPriorityFeePerBidDefaults = new Map<number, bigint>([\n [polygon.id, 30_000_000_000n],\n]);\n\nexport const INFURA_API_KEY = \"f36f7f706a58477884ce6fe89165666c\";\nexport const CHAIN_ID_TO_NODE: { [key: number]: string } = {\n 1: `https://mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 5: `https://goerli.infura.io/v3/${INFURA_API_KEY}`,\n 11155111:\n \"https://fittest-ultra-aura.ethereum-sepolia.quiknode.pro/3893d01b1dd411fdfa9b6dd372dd2b4f69fcf1ea/\",\n 137: `https://polygon-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 80001: `https://polygon-mumbai.infura.io/v3/${INFURA_API_KEY}`,\n 10: `https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 420: `https://optimism-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 42161: `https://arbitrum-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n // 42161: 'https://evocative-stylish-dinghy.arbitrum-mainnet.discover.quiknode.pro/80b526d14fa9fd9a8b0db1e65554acaf00c6a1ab/',\n 421613: `https://arbitrum-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 43114: `https://avalanche-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 43113: `https://avalanche-fuji.infura.io/v3/${INFURA_API_KEY}`,\n 1313161554: `https://aurora-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 1313161555: `https://aurora-testnet.infura.io/v3/${INFURA_API_KEY}`,\n 56: \"https://neat-greatest-layer.bsc.quiknode.pro/9405a499ceee314e5f2f68c9d47518d3537fce6a/\",\n 8453: \"https://twilight-red-tree.base-mainnet.quiknode.pro/dc6eb27bf0f917df215922488dd97f4de7d9b08e/\",\n 84531:\n \"https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596/\",\n 100: \"https://thrilling-fluent-film.xdai.quiknode.pro/305955cffb9868cdd95b5e3dc9775f20678ad9ac/\",\n 10200: \"https://nd-810-853-201.p2pify.com/e828b09f0d43591de96c297b3f36fffd\",\n 59144: `https://linea-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 59140: `https://linea-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 204: \"https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b\",\n 42069: \"https://rpc.op-testnet.gelato.digital\",\n 1261120: \"https://rpc.zkatana.gelato.digital\",\n 84532:\n \"https://floral-old-feather.base-sepolia.quiknode.pro/4c3b4295d0c174410872b1e461a91cc33c7969a9/\",\n 421614: `https://arbitrum-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n 11155420: `https://optimism-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n // 5611: 'opBnb-testnet',\n};\n"]}
@@ -101,7 +101,7 @@ export const eip1559GasPrice = async (provider) => {
101
101
  fee = fee.standard.maxPriorityFeePerGas;
102
102
  }
103
103
  const tip = BigInt(fee);
104
- const buffer = (tip / 100n) * 13n;
104
+ const buffer = (tip / 100n) * BigInt(provider.gasFeeBufferPecentage);
105
105
  let maxPriorityFeePerGas = tip + buffer;
106
106
  maxPriorityFeePerGas =
107
107
  maxPriorityFeePerGas < provider.minPriorityFeePerBid
@@ -1 +1 @@
1
- {"version":3,"file":"gas-estimator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZeroDevProvider } from \"../provider.js\";\nimport {\n deepHexlify,\n type Hex,\n type UserOperationStruct,\n resolveProperties,\n type BigNumberish,\n type UserOperationEstimateGasResponse,\n} from \"@alchemy/aa-core\";\nimport { ENTRYPOINT_ADDRESS } from \"../constants.js\";\nimport { calcPreVerificationGas } from \"../utils/calc-pre-verification-gas.js\";\nimport { type PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\nexport const withZeroDevGasEstimator = (\n provider: ZeroDevProvider\n): ZeroDevProvider => {\n provider.withFeeDataGetter(async (struct) => {\n let overrides = await resolveProperties({\n maxFeePerGas: struct.maxFeePerGas,\n maxPriorityFeePerGas: struct.maxPriorityFeePerGas,\n });\n\n if (provider.bundlerProvider === \"GELATO\") {\n return { maxFeePerGas: 0n, maxPriorityFeePerGas: 0n };\n }\n\n let maxFeePerGas, maxPriorityFeePerGas;\n\n try {\n ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(\n provider\n ));\n } catch (error: any) {\n console.warn(\n \"getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price.\"\n );\n }\n\n if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {\n const feeData = await getFeeData(provider);\n maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;\n maxPriorityFeePerGas = feeData.maxPriorityFeePerGas\n ? BigInt(feeData.maxPriorityFeePerGas)\n : 0n;\n }\n\n if (overrides.maxFeePerGas || overrides.maxPriorityFeePerGas) {\n return {\n maxFeePerGas: overrides.maxFeePerGas ?? maxFeePerGas,\n maxPriorityFeePerGas:\n overrides.maxPriorityFeePerGas ?? maxPriorityFeePerGas,\n };\n }\n return { maxFeePerGas, maxPriorityFeePerGas };\n });\n\n provider.withGasEstimator(async (struct) => {\n if (\n struct.callGasLimit !== undefined &&\n struct.verificationGasLimit !== undefined &&\n struct.preVerificationGas !== undefined\n ) {\n return struct;\n }\n const initCode = await provider.account?.getInitCode();\n const initGas = await estimateCreationGas(provider, initCode);\n const partialStruct: UserOperationStruct = {\n ...struct,\n callGasLimit:\n initCode !== undefined && initCode.length > 2\n ? BigInt(\"1000000\")\n : BigInt(55000),\n verificationGasLimit: BigInt(110000) + initGas,\n preVerificationGas: BigInt(100000),\n };\n\n partialStruct.preVerificationGas = await getPreVerificationGas(\n partialStruct\n );\n\n const request = deepHexlify(await resolveProperties(partialStruct));\n let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;\n userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(\n request,\n ENTRYPOINT_ADDRESS\n );\n const { preVerificationGas, verificationGasLimit, callGasLimit } =\n userOpGasEstimates;\n request.preVerificationGas =\n (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;\n request.verificationGasLimit =\n BigInt(verificationGasLimit) ?? request.verificationGasLimit;\n request.callGasLimit =\n (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;\n\n return {\n ...struct,\n ...request,\n };\n });\n\n return provider;\n};\n\nexport const estimateCreationGas = async (\n provider: ZeroDevProvider,\n initCode?: string\n): Promise<bigint> => {\n if (initCode == null || initCode === \"0x\") return BigInt(0);\n const deployerAddress = initCode.substring(0, 42) as Hex;\n const deployerCallData = (\"0x\" + initCode.substring(42)) as Hex;\n return await provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: deployerAddress,\n data: deployerCallData,\n });\n};\n\n/**\n * should cover cost of putting calldata on-chain, and some overhead.\n * actual overhead depends on the expected bundle size\n */\nexport const getPreVerificationGas = async (\n userOp: Partial<UserOperationStruct>\n): Promise<number> => {\n const p = await resolveProperties(userOp);\n return calcPreVerificationGas(p);\n};\n\nexport const GAS_PRICE_RPC_METHODS_BY_BUNDLER: {\n [K in PaymasterAndBundlerProviders]: string;\n} = {\n STACKUP: \"eth_maxPriorityFeePerGas\",\n ALCHEMY: \"rundler_maxPriorityFeePerGas\",\n PIMLICO: \"pimlico_getUserOperationGasPrice\",\n GELATO: \"eth_maxPriorityFeePerGas\",\n};\n\nexport const eip1559GasPrice = async (provider: ZeroDevProvider) => {\n let [fee, block] = await Promise.all([\n provider.rpcClient.request({\n method:\n // @ts-expect-error\n GAS_PRICE_RPC_METHODS_BY_BUNDLER[provider.bundlerProvider] ??\n \"eth_maxPriorityFeePerGas\",\n params: [],\n }) as any,\n provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n ]);\n\n if (provider.bundlerProvider === \"PIMLICO\") {\n fee = fee.standard.maxPriorityFeePerGas;\n }\n\n const tip = BigInt(fee);\n const buffer = (tip / 100n) * 13n;\n let maxPriorityFeePerGas = tip + buffer;\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n const maxFeePerGas = block.baseFeePerGas\n ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas\n : maxPriorityFeePerGas;\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\ninterface FeeData {\n maxFeePerGas: BigNumberish | null;\n maxPriorityFeePerGas: BigNumberish | null;\n}\n\nexport const getFeeData = async (\n provider: ZeroDevProvider\n): Promise<FeeData> => {\n const { block, gasPrice } = await resolveProperties({\n block: provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n gasPrice: provider.rpcClient.getGasPrice().catch((error) => {\n console.warn(\"Legacy: Failed to get gas price\", error);\n return null;\n }),\n });\n\n let maxFeePerGas = null;\n let maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas != null) {\n // Set the tip to the min of the tip for the last block and 1.5 gwei\n const minimumTip = BigInt(\"1500000000\");\n maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;\n if (\n maxPriorityFeePerGas == null ||\n maxPriorityFeePerGas - BigInt(0) ||\n maxPriorityFeePerGas > minimumTip\n ) {\n maxPriorityFeePerGas = minimumTip;\n }\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n maxFeePerGas =\n block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);\n }\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\n"]}
1
+ {"version":3,"file":"gas-estimator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZeroDevProvider } from \"../provider.js\";\nimport {\n deepHexlify,\n type Hex,\n type UserOperationStruct,\n resolveProperties,\n type BigNumberish,\n type UserOperationEstimateGasResponse,\n} from \"@alchemy/aa-core\";\nimport { ENTRYPOINT_ADDRESS } from \"../constants.js\";\nimport { calcPreVerificationGas } from \"../utils/calc-pre-verification-gas.js\";\nimport { type PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\nexport const withZeroDevGasEstimator = (\n provider: ZeroDevProvider\n): ZeroDevProvider => {\n provider.withFeeDataGetter(async (struct) => {\n let overrides = await resolveProperties({\n maxFeePerGas: struct.maxFeePerGas,\n maxPriorityFeePerGas: struct.maxPriorityFeePerGas,\n });\n\n if (provider.bundlerProvider === \"GELATO\") {\n return { maxFeePerGas: 0n, maxPriorityFeePerGas: 0n };\n }\n\n let maxFeePerGas, maxPriorityFeePerGas;\n\n try {\n ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(\n provider\n ));\n } catch (error: any) {\n console.warn(\n \"getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price.\"\n );\n }\n\n if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {\n const feeData = await getFeeData(provider);\n maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;\n maxPriorityFeePerGas = feeData.maxPriorityFeePerGas\n ? BigInt(feeData.maxPriorityFeePerGas)\n : 0n;\n }\n\n if (overrides.maxFeePerGas || overrides.maxPriorityFeePerGas) {\n return {\n maxFeePerGas: overrides.maxFeePerGas ?? maxFeePerGas,\n maxPriorityFeePerGas:\n overrides.maxPriorityFeePerGas ?? maxPriorityFeePerGas,\n };\n }\n return { maxFeePerGas, maxPriorityFeePerGas };\n });\n\n provider.withGasEstimator(async (struct) => {\n if (\n struct.callGasLimit !== undefined &&\n struct.verificationGasLimit !== undefined &&\n struct.preVerificationGas !== undefined\n ) {\n return struct;\n }\n const initCode = await provider.account?.getInitCode();\n const initGas = await estimateCreationGas(provider, initCode);\n const partialStruct: UserOperationStruct = {\n ...struct,\n callGasLimit:\n initCode !== undefined && initCode.length > 2\n ? BigInt(\"1000000\")\n : BigInt(55000),\n verificationGasLimit: BigInt(110000) + initGas,\n preVerificationGas: BigInt(100000),\n };\n\n partialStruct.preVerificationGas = await getPreVerificationGas(\n partialStruct\n );\n\n const request = deepHexlify(await resolveProperties(partialStruct));\n let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;\n userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(\n request,\n ENTRYPOINT_ADDRESS\n );\n const { preVerificationGas, verificationGasLimit, callGasLimit } =\n userOpGasEstimates;\n request.preVerificationGas =\n (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;\n request.verificationGasLimit =\n BigInt(verificationGasLimit) ?? request.verificationGasLimit;\n request.callGasLimit =\n (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;\n\n return {\n ...struct,\n ...request,\n };\n });\n\n return provider;\n};\n\nexport const estimateCreationGas = async (\n provider: ZeroDevProvider,\n initCode?: string\n): Promise<bigint> => {\n if (initCode == null || initCode === \"0x\") return BigInt(0);\n const deployerAddress = initCode.substring(0, 42) as Hex;\n const deployerCallData = (\"0x\" + initCode.substring(42)) as Hex;\n return await provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: deployerAddress,\n data: deployerCallData,\n });\n};\n\n/**\n * should cover cost of putting calldata on-chain, and some overhead.\n * actual overhead depends on the expected bundle size\n */\nexport const getPreVerificationGas = async (\n userOp: Partial<UserOperationStruct>\n): Promise<number> => {\n const p = await resolveProperties(userOp);\n return calcPreVerificationGas(p);\n};\n\nexport const GAS_PRICE_RPC_METHODS_BY_BUNDLER: {\n [K in PaymasterAndBundlerProviders]: string;\n} = {\n STACKUP: \"eth_maxPriorityFeePerGas\",\n ALCHEMY: \"rundler_maxPriorityFeePerGas\",\n PIMLICO: \"pimlico_getUserOperationGasPrice\",\n GELATO: \"eth_maxPriorityFeePerGas\",\n};\n\nexport const eip1559GasPrice = async (provider: ZeroDevProvider) => {\n let [fee, block] = await Promise.all([\n provider.rpcClient.request({\n method:\n // @ts-expect-error\n GAS_PRICE_RPC_METHODS_BY_BUNDLER[provider.bundlerProvider] ??\n \"eth_maxPriorityFeePerGas\",\n params: [],\n }) as any,\n provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n ]);\n\n if (provider.bundlerProvider === \"PIMLICO\") {\n fee = fee.standard.maxPriorityFeePerGas;\n }\n\n const tip = BigInt(fee);\n const buffer = (tip / 100n) * BigInt(provider.gasFeeBufferPecentage);\n let maxPriorityFeePerGas = tip + buffer;\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n const maxFeePerGas = block.baseFeePerGas\n ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas\n : maxPriorityFeePerGas;\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\ninterface FeeData {\n maxFeePerGas: BigNumberish | null;\n maxPriorityFeePerGas: BigNumberish | null;\n}\n\nexport const getFeeData = async (\n provider: ZeroDevProvider\n): Promise<FeeData> => {\n const { block, gasPrice } = await resolveProperties({\n block: provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n gasPrice: provider.rpcClient.getGasPrice().catch((error) => {\n console.warn(\"Legacy: Failed to get gas price\", error);\n return null;\n }),\n });\n\n let maxFeePerGas = null;\n let maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas != null) {\n // Set the tip to the min of the tip for the last block and 1.5 gwei\n const minimumTip = BigInt(\"1500000000\");\n maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;\n if (\n maxPriorityFeePerGas == null ||\n maxPriorityFeePerGas - BigInt(0) ||\n maxPriorityFeePerGas > minimumTip\n ) {\n maxPriorityFeePerGas = minimumTip;\n }\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n maxFeePerGas =\n block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);\n }\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\n"]}
@@ -12,6 +12,7 @@ export type ZeroDevProviderConfig = {
12
12
  opts?: SmartAccountProviderOpts & {
13
13
  sendTxMaxRetries?: number;
14
14
  sendTxRetryIntervalMs?: number;
15
+ gasFeeBufferPecentage?: number;
15
16
  };
16
17
  };
17
18
  export declare enum Operation {
@@ -27,6 +28,7 @@ export declare class ZeroDevProvider extends SmartAccountProvider<HttpTransport>
27
28
  private _txMaxRetries;
28
29
  private _txRetryIntervalMs;
29
30
  private _shouldConsume;
31
+ gasFeeBufferPecentage: number;
30
32
  constructor({ projectId, chain, entryPointAddress, rpcUrl, account, bundlerProvider, opts, }: ZeroDevProviderConfig);
31
33
  getProjectId: () => string;
32
34
  shouldConsume: () => boolean;
@@ -71,6 +71,12 @@ export class ZeroDevProvider extends SmartAccountProvider {
71
71
  writable: true,
72
72
  value: true
73
73
  });
74
+ Object.defineProperty(this, "gasFeeBufferPecentage", {
75
+ enumerable: true,
76
+ configurable: true,
77
+ writable: true,
78
+ value: void 0
79
+ });
74
80
  Object.defineProperty(this, "getProjectId", {
75
81
  enumerable: true,
76
82
  configurable: true,
@@ -325,6 +331,7 @@ export class ZeroDevProvider extends SmartAccountProvider {
325
331
  }
326
332
  }
327
333
  });
334
+ this.gasFeeBufferPecentage = opts?.gasFeeBufferPecentage ?? 13;
328
335
  this._txMaxRetries = opts?.txMaxRetries ?? 20;
329
336
  this._txRetryIntervalMs = opts?.txRetryIntervalMs ?? 5000;
330
337
  this.bundlerProvider = bundlerProvider;
@@ -1 +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 getAbiItem,\n} from \"viem\";\nimport {\n deepHexlify,\n resolveProperties,\n type SmartAccountProviderOpts,\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 EntryPointAbi,\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\";\nimport { getChain } from \"./utils.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 = 0,\n DelegateCall = 1,\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 readonly bundlerProvider?: PaymasterAndBundlerProviders;\n private _txMaxRetries: number;\n private _txRetryIntervalMs: number;\n private _shouldConsume: boolean = true;\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 ?? 20,\n txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,\n minPriorityFeePerBid:\n opts?.minPriorityFeePerBid ??\n minPriorityFeePerBidDefaults.get(_chain.id),\n });\n\n this._txMaxRetries = opts?.txMaxRetries ?? 20;\n this._txRetryIntervalMs = opts?.txRetryIntervalMs ?? 5000;\n this.bundlerProvider = bundlerProvider;\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 shouldConsume = (): boolean => this._shouldConsume;\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 buildUserOperation = async <\n T extends UserOperationCallData | BatchUserOperationCallData\n >(\n data: T,\n overrides?: UserOperationOverrides,\n operation: UserOpDataOperationTypes<T> = Operation.Call as UserOpDataOperationTypes<T>\n ): Promise<UserOperationStruct> => {\n this._shouldConsume = false;\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 const nonce = await this.account.getNonce();\n const result = await this._runMiddlewareStack(\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 } as UserOperationStruct,\n overrides\n );\n this._shouldConsume = true;\n return result;\n };\n\n private _runMiddlewareStack = async (\n uo: UserOperationStruct,\n overrides?: UserOperationOverrides\n ): Promise<UserOperationStruct> => {\n const result = await asyncPipe(\n this.dummyPaymasterDataMiddleware,\n this.feeDataGetter,\n this.paymasterDataMiddleware,\n this.gasEstimator,\n this.customMiddleware ?? noOpMiddleware,\n async (struct) => ({ ...struct, ...overrides })\n )(uo);\n\n return deepHexlify(await resolveProperties<UserOperationStruct>(result));\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 (!this._shouldConsume)\n throw new Error(\n \"Cannot send user operation while building user operation\"\n );\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 const nonce = await this.account.getNonce();\n let uoStruct: UserOperationStruct;\n let request: UserOperationStruct;\n let maxFeePerGas, maxPriorityFeePerGas;\n do {\n 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 await this.account.approvePlugin();\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\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 waitForUserOperationTransaction = async (hash: Hash): Promise<Hash> => {\n let blockNumber = await this.rpcClient.getBlockNumber();\n for (let i = 0; i < this._txMaxRetries; i++) {\n if (this.bundlerProvider === \"GELATO\") {\n const receipt = await this.getUserOperationReceipt(\n hash as `0x${string}`\n )\n // TODO: should maybe log the error?\n .catch(() => null);\n if (receipt) {\n return this.getTransaction(receipt.receipt.transactionHash).then(\n (x) => x.hash\n );\n }\n } else {\n const logs = await this.rpcClient.getLogs({\n address: ENTRYPOINT_ADDRESS,\n event: getAbiItem({ abi: EntryPointAbi, name: \"UserOperationEvent\" }),\n args: { userOpHash: hash },\n fromBlock: blockNumber - 100n,\n });\n if (logs.length) {\n return logs[0].transactionHash;\n }\n }\n await new Promise((resolve) =>\n setTimeout(resolve, this._txRetryIntervalMs)\n );\n }\n\n throw new Error(\"Failed to find transaction for User Operation\");\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 = \"0x\";\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 \"eth_signTypedData_v4\":\n //@ts-expect-error\n return this.signTypedData(JSON.parse(params[1]));\n case \"personal_sign\":\n if (!this.account) {\n throw new Error(\"account not connected!\");\n }\n const [data, address] = params!;\n if (address.toLowerCase() !== (await this.getAddress()).toLowerCase()) {\n throw new Error(\n \"cannot sign for address that is not the current account\"\n );\n }\n // @ts-ignore\n return this.account.signMessageWith6492(data);\n default:\n // @ts-ignore\n return this.rpcClient.request(args);\n }\n };\n}\n"]}
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 getAbiItem,\n} from \"viem\";\nimport {\n deepHexlify,\n resolveProperties,\n type SmartAccountProviderOpts,\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 EntryPointAbi,\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\";\nimport { getChain } from \"./utils.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 gasFeeBufferPecentage?: number;\n };\n};\n\nexport enum Operation {\n Call = 0,\n DelegateCall = 1,\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 readonly bundlerProvider?: PaymasterAndBundlerProviders;\n private _txMaxRetries: number;\n private _txRetryIntervalMs: number;\n private _shouldConsume: boolean = true;\n public gasFeeBufferPecentage: 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 ?? 20,\n txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,\n minPriorityFeePerBid:\n opts?.minPriorityFeePerBid ??\n minPriorityFeePerBidDefaults.get(_chain.id),\n });\n\n this.gasFeeBufferPecentage = opts?.gasFeeBufferPecentage ?? 13;\n this._txMaxRetries = opts?.txMaxRetries ?? 20;\n this._txRetryIntervalMs = opts?.txRetryIntervalMs ?? 5000;\n this.bundlerProvider = bundlerProvider;\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 shouldConsume = (): boolean => this._shouldConsume;\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 buildUserOperation = async <\n T extends UserOperationCallData | BatchUserOperationCallData\n >(\n data: T,\n overrides?: UserOperationOverrides,\n operation: UserOpDataOperationTypes<T> = Operation.Call as UserOpDataOperationTypes<T>\n ): Promise<UserOperationStruct> => {\n this._shouldConsume = false;\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 const nonce = await this.account.getNonce();\n const result = await this._runMiddlewareStack(\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 } as UserOperationStruct,\n overrides\n );\n this._shouldConsume = true;\n return result;\n };\n\n private _runMiddlewareStack = async (\n uo: UserOperationStruct,\n overrides?: UserOperationOverrides\n ): Promise<UserOperationStruct> => {\n const result = await asyncPipe(\n this.dummyPaymasterDataMiddleware,\n this.feeDataGetter,\n this.paymasterDataMiddleware,\n this.gasEstimator,\n this.customMiddleware ?? noOpMiddleware,\n async (struct) => ({ ...struct, ...overrides })\n )(uo);\n\n return deepHexlify(await resolveProperties<UserOperationStruct>(result));\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 (!this._shouldConsume)\n throw new Error(\n \"Cannot send user operation while building user operation\"\n );\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 const nonce = await this.account.getNonce();\n let uoStruct: UserOperationStruct;\n let request: UserOperationStruct;\n let maxFeePerGas, maxPriorityFeePerGas;\n do {\n 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 await this.account.approvePlugin();\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\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 waitForUserOperationTransaction = async (hash: Hash): Promise<Hash> => {\n let blockNumber = await this.rpcClient.getBlockNumber();\n for (let i = 0; i < this._txMaxRetries; i++) {\n if (this.bundlerProvider === \"GELATO\") {\n const receipt = await this.getUserOperationReceipt(\n hash as `0x${string}`\n )\n // TODO: should maybe log the error?\n .catch(() => null);\n if (receipt) {\n return this.getTransaction(receipt.receipt.transactionHash).then(\n (x) => x.hash\n );\n }\n } else {\n const logs = await this.rpcClient.getLogs({\n address: ENTRYPOINT_ADDRESS,\n event: getAbiItem({ abi: EntryPointAbi, name: \"UserOperationEvent\" }),\n args: { userOpHash: hash },\n fromBlock: blockNumber - 100n,\n });\n if (logs.length) {\n return logs[0].transactionHash;\n }\n }\n await new Promise((resolve) =>\n setTimeout(resolve, this._txRetryIntervalMs)\n );\n }\n\n throw new Error(\"Failed to find transaction for User Operation\");\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 = \"0x\";\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 \"eth_signTypedData_v4\":\n //@ts-expect-error\n return this.signTypedData(JSON.parse(params[1]));\n case \"personal_sign\":\n if (!this.account) {\n throw new Error(\"account not connected!\");\n }\n const [data, address] = params!;\n if (address.toLowerCase() !== (await this.getAddress()).toLowerCase()) {\n throw new Error(\n \"cannot sign for address that is not the current account\"\n );\n }\n // @ts-ignore\n return this.account.signMessageWith6492(data);\n default:\n // @ts-ignore\n return this.rpcClient.request(args);\n }\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/recovery-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ValidatorProvider,\n type ExtendedValidatorProviderParams,\n} from \"./base.js\";\nimport {\n RecoveryValidator,\n type RecoveryConfig,\n type RecoveryValidatorParams,\n} from \"../validator/recovery-validator.js\";\nimport { type Address, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport {\n getChainId,\n getRecoveryData,\n postRecoveryData,\n setSignatures,\n} from \"../api/index.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { CHAIN_ID_TO_NODE, RECOVERY_VALIDATOR_ADDRESS } from \"../constants.js\";\nimport {\n encodeAbiParameters,\n encodeFunctionData,\n parseAbiParameters,\n type Hex,\n keccak256,\n publicActions,\n type TransactionReceipt,\n createPublicClient,\n http,\n decodeAbiParameters,\n} from \"viem\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { base64ToBytes, bytesToBase64, getChain } from \"../utils.js\";\n\nexport interface RecoveryProviderParams\n extends ExtendedValidatorProviderParams<RecoveryValidatorParams> {\n recoveryId?: string;\n enableData?: Hex;\n}\n\nexport class RecoveryProvider extends ValidatorProvider<\n RecoveryValidator,\n RecoveryValidatorParams\n> {\n recoveryId?: string;\n enableData?: Hex;\n constructor(params: RecoveryProviderParams) {\n const chain =\n typeof params.opts?.providerConfig?.chain === \"number\"\n ? getChain(params.opts.providerConfig.chain)\n : params.opts?.providerConfig?.chain ?? polygonMumbai;\n const validator = new RecoveryValidator({\n projectId: params.projectId,\n chain,\n recoveryId: params.recoveryId,\n validatorAddress:\n params.opts?.validatorConfig?.validatorAddress ??\n RECOVERY_VALIDATOR_ADDRESS,\n ...params.opts?.validatorConfig,\n });\n super(\n {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: { ...params.opts?.providerConfig, chain },\n },\n },\n validator\n );\n this.recoveryId = params.recoveryId;\n this.enableData = params.enableData;\n }\n\n public static async init(\n params: RecoveryProviderParams\n ): Promise<RecoveryProvider> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n let accountAddress,\n enableData,\n signatures,\n serializedRecoveryConfig,\n recoveryConfig;\n if (params.recoveryId) {\n ({\n scwAddress: accountAddress,\n enableData,\n recoveryConfig: serializedRecoveryConfig,\n signatures,\n } = await getRecoveryData(params.recoveryId));\n recoveryConfig = RecoveryProvider.deserializeRecoveryConfig(\n serializedRecoveryConfig\n );\n } else if (\n params.opts?.accountConfig?.accountAddress &&\n (!params.opts?.validatorConfig?.guardians ||\n !Object.entries(params.opts?.validatorConfig?.guardians).length ||\n params.opts.validatorConfig.threshold === undefined)\n ) {\n const publicClient = createPublicClient({\n transport: http(CHAIN_ID_TO_NODE[chain?.id ?? polygonMumbai.id]),\n chain: chain ?? polygonMumbai,\n });\n recoveryConfig = await RecoveryValidator.fetchRecoveryConfigFromContract(\n params.opts?.accountConfig?.accountAddress,\n publicClient\n );\n }\n const instance = new RecoveryProvider({\n enableData,\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n accountConfig: {\n accountAddress,\n ...params.opts?.accountConfig,\n },\n validatorConfig: {\n signatures,\n ...recoveryConfig,\n ...params.opts?.validatorConfig,\n },\n },\n });\n return instance;\n }\n\n async getDefaultValidator(): Promise<Address> {\n const publicClient = this.getValidator().getPublicClient();\n const kernelAccountAddress = await this.getAddress();\n return await publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n }\n\n async encodeCalldataAndNonce(enableData: Hex): Promise<Hex> {\n const defaultValidatorAddress = await this.getDefaultValidator();\n const callData = encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n const sender = await this.getAddress();\n const nonce = await (await this.getAccount()).getNonce();\n const encodedCallDataAndNonce = encodeAbiParameters(\n parseAbiParameters(\"address sender, bytes calldata, uint256 nonce\"),\n [sender, callData, nonce]\n );\n return keccak256(encodedCallDataAndNonce);\n }\n\n async enableRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const { selector } = await this.getValidator().getPluginValidatorData();\n const kernelAccountAddress = await this.defaultProvider.getAddress();\n const encodedSetExecData = await this.getAccount().encodeSetExection();\n if (\n await this.getValidator().isPluginEnabled(kernelAccountAddress, selector)\n ) {\n throw Error(\"Plugin already enabled\");\n }\n return await this.defaultProvider.sendUserOperation({\n target: kernelAccountAddress,\n data: encodedSetExecData,\n });\n }\n\n async renewRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const enableData = await this.getValidator().getEnableData();\n const [guardians, weights, threshold, delay] = decodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n enableData\n );\n const encodedRenewData = await this.getValidator().encodeRenew(\n [...guardians],\n [...weights],\n threshold,\n delay\n );\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedRenewData,\n });\n }\n\n async initiateRecovery(enableData: Hex): Promise<string> { // blake 1\n const serializedConfig = this.serializeRecoveryConfig();\n const recoveryId = await postRecoveryData(\n enableData,\n await this.getAddress(),\n serializedConfig\n );\n console.log(recoveryId);\n this.enableData = enableData;\n if (!recoveryId) {\n throw Error(\"Unable to generate the recoveryId\");\n }\n return recoveryId;\n }\n\n serializeRecoveryConfig(): string {\n let recoveryConfig = this.getValidator().getRecoveryConfig();\n const jsonString = JSON.stringify(recoveryConfig);\n const uint8Array = new TextEncoder().encode(jsonString);\n const base64String = bytesToBase64(uint8Array);\n return base64String;\n }\n\n public static deserializeRecoveryConfig(\n recoveryConfig: string\n ): RecoveryConfig {\n const uint8Array = base64ToBytes(recoveryConfig);\n const jsonString = new TextDecoder().decode(uint8Array);\n return JSON.parse(jsonString) as RecoveryConfig;\n }\n\n async approveRecovery(enableData?: Hex): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitialized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApprove(\n callDataAndNonceHash!,\n kernelAccountAddress!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async signRecovery(enableData?: Hex) {\n try {\n if (!this.recoveryId) {\n throw Error(\"RecoveryId not set\");\n }\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const sig = await this.getValidator().signRecoveryHash(\n callDataAndNonceHash\n );\n const { result, data } = await setSignatures(this.recoveryId, sig);\n if (result !== \"success\") {\n throw Error(\"Failed to save the signatures\");\n }\n this.getValidator().setRecoverySignatures(data.signatures);\n } catch (error) {\n console.log(error);\n }\n }\n\n async approveRecoveryWithSig(\n enableData?: Hex,\n sigs?: Hex\n ): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const signatures =\n sigs ?? (await this.getValidator().getRecoverySignatures());\n if (!signatures) {\n throw Error(\"Signatures are not set\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitilized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApproveWithSig(\n callDataAndNonceHash,\n kernelAccountAddress,\n sigs!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async cancelRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const encodedVetoData = await this.getValidator().encodeVeto(\n callDataAndNonceHash\n );\n\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedVetoData,\n });\n }\n\n async submitRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const defaultValidatorAddress = await this.getDefaultValidator();\n const encodedRecoveryActionData =\n await this.getValidator().encodeRecoveryAction(\n fetchedEnableData,\n defaultValidatorAddress\n );\n\n return await this.sendUserOperation({\n target: await this.getAddress(),\n data: encodedRecoveryActionData,\n });\n }\n\n // [TODO]\n // changeGuardian = this.sendEnableUserOperation;\n\n deleteRecoveryData = this.sendDisableUserOperation;\n}\n"]}
1
+ {"version":3,"file":"recovery-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/recovery-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ValidatorProvider,\n type ExtendedValidatorProviderParams,\n} from \"./base.js\";\nimport {\n RecoveryValidator,\n type RecoveryConfig,\n type RecoveryValidatorParams,\n} from \"../validator/recovery-validator.js\";\nimport { type Address, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport {\n getChainId,\n getRecoveryData,\n postRecoveryData,\n setSignatures,\n} from \"../api/index.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { CHAIN_ID_TO_NODE, RECOVERY_VALIDATOR_ADDRESS } from \"../constants.js\";\nimport {\n encodeAbiParameters,\n encodeFunctionData,\n parseAbiParameters,\n type Hex,\n keccak256,\n publicActions,\n type TransactionReceipt,\n createPublicClient,\n http,\n decodeAbiParameters,\n} from \"viem\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { base64ToBytes, bytesToBase64, getChain } from \"../utils.js\";\n\nexport interface RecoveryProviderParams\n extends ExtendedValidatorProviderParams<RecoveryValidatorParams> {\n recoveryId?: string;\n enableData?: Hex;\n}\n\nexport class RecoveryProvider extends ValidatorProvider<\n RecoveryValidator,\n RecoveryValidatorParams\n> {\n recoveryId?: string;\n enableData?: Hex;\n constructor(params: RecoveryProviderParams) {\n const chain =\n typeof params.opts?.providerConfig?.chain === \"number\"\n ? getChain(params.opts.providerConfig.chain)\n : params.opts?.providerConfig?.chain ?? polygonMumbai;\n const validator = new RecoveryValidator({\n projectId: params.projectId,\n chain,\n recoveryId: params.recoveryId,\n validatorAddress:\n params.opts?.validatorConfig?.validatorAddress ??\n RECOVERY_VALIDATOR_ADDRESS,\n ...params.opts?.validatorConfig,\n });\n super(\n {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: { ...params.opts?.providerConfig, chain },\n },\n },\n validator\n );\n this.recoveryId = params.recoveryId;\n this.enableData = params.enableData;\n }\n\n public static async init(\n params: RecoveryProviderParams\n ): Promise<RecoveryProvider> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n let accountAddress,\n enableData,\n signatures,\n serializedRecoveryConfig,\n recoveryConfig;\n if (params.recoveryId) {\n ({\n scwAddress: accountAddress,\n enableData,\n recoveryConfig: serializedRecoveryConfig,\n signatures,\n } = await getRecoveryData(params.recoveryId));\n recoveryConfig = RecoveryProvider.deserializeRecoveryConfig(\n serializedRecoveryConfig\n );\n } else if (\n params.opts?.accountConfig?.accountAddress &&\n (!params.opts?.validatorConfig?.guardians ||\n !Object.entries(params.opts?.validatorConfig?.guardians).length ||\n params.opts.validatorConfig.threshold === undefined)\n ) {\n const publicClient = createPublicClient({\n transport: http(CHAIN_ID_TO_NODE[chain?.id ?? polygonMumbai.id]),\n chain: chain ?? polygonMumbai,\n });\n recoveryConfig = await RecoveryValidator.fetchRecoveryConfigFromContract(\n params.opts?.accountConfig?.accountAddress,\n publicClient\n );\n }\n const instance = new RecoveryProvider({\n enableData,\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n accountConfig: {\n accountAddress,\n ...params.opts?.accountConfig,\n },\n validatorConfig: {\n signatures,\n ...recoveryConfig,\n ...params.opts?.validatorConfig,\n },\n },\n });\n return instance;\n }\n\n async getDefaultValidator(): Promise<Address> {\n const publicClient = this.getValidator().getPublicClient();\n const kernelAccountAddress = await this.getAddress();\n return await publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n }\n\n async encodeCalldataAndNonce(enableData: Hex): Promise<Hex> {\n const defaultValidatorAddress = await this.getDefaultValidator();\n const callData = encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n const sender = await this.getAddress();\n const nonce = await (await this.getAccount()).getNonce();\n const encodedCallDataAndNonce = encodeAbiParameters(\n parseAbiParameters(\"address sender, bytes calldata, uint256 nonce\"),\n [sender, callData, nonce]\n );\n return keccak256(encodedCallDataAndNonce);\n }\n\n async enableRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const { selector } = await this.getValidator().getPluginValidatorData();\n const kernelAccountAddress = await this.defaultProvider.getAddress();\n const encodedSetExecData = await this.getAccount().encodeSetExection();\n if (\n await this.getValidator().isPluginEnabled(kernelAccountAddress, selector)\n ) {\n throw Error(\"Plugin already enabled\");\n }\n return await this.defaultProvider.sendUserOperation({\n target: kernelAccountAddress,\n data: encodedSetExecData,\n });\n }\n\n async renewRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const enableData = await this.getValidator().getEnableData();\n const [guardians, weights, threshold, delay] = decodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n enableData\n );\n const encodedRenewData = await this.getValidator().encodeRenew(\n [...guardians],\n [...weights],\n threshold,\n delay\n );\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedRenewData,\n });\n }\n\n async initiateRecovery(enableData: Hex): Promise<string> {\n const serializedConfig = this.serializeRecoveryConfig();\n const recoveryId = await postRecoveryData(\n enableData,\n await this.getAddress(),\n serializedConfig\n );\n console.log(recoveryId);\n this.enableData = enableData;\n if (!recoveryId) {\n throw Error(\"Unable to generate the recoveryId\");\n }\n return recoveryId;\n }\n\n serializeRecoveryConfig(): string {\n let recoveryConfig = this.getValidator().getRecoveryConfig();\n const jsonString = JSON.stringify(recoveryConfig);\n const uint8Array = new TextEncoder().encode(jsonString);\n const base64String = bytesToBase64(uint8Array);\n return base64String;\n }\n\n public static deserializeRecoveryConfig(\n recoveryConfig: string\n ): RecoveryConfig {\n const uint8Array = base64ToBytes(recoveryConfig);\n const jsonString = new TextDecoder().decode(uint8Array);\n return JSON.parse(jsonString) as RecoveryConfig;\n }\n\n async approveRecovery(enableData?: Hex): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitialized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApprove(\n callDataAndNonceHash!,\n kernelAccountAddress!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async signRecovery(enableData?: Hex) {\n try {\n if (!this.recoveryId) {\n throw Error(\"RecoveryId not set\");\n }\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const sig = await this.getValidator().signRecoveryHash(\n callDataAndNonceHash\n );\n const { result, data } = await setSignatures(this.recoveryId, sig);\n if (result !== \"success\") {\n throw Error(\"Failed to save the signatures\");\n }\n this.getValidator().setRecoverySignatures(data.signatures);\n } catch (error) {\n console.log(error);\n }\n }\n\n async approveRecoveryWithSig(\n enableData?: Hex,\n sigs?: Hex\n ): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const signatures =\n sigs ?? (await this.getValidator().getRecoverySignatures());\n if (!signatures) {\n throw Error(\"Signatures are not set\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitilized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApproveWithSig(\n callDataAndNonceHash,\n kernelAccountAddress,\n sigs!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async cancelRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const encodedVetoData = await this.getValidator().encodeVeto(\n callDataAndNonceHash\n );\n\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedVetoData,\n });\n }\n\n async submitRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const defaultValidatorAddress = await this.getDefaultValidator();\n const encodedRecoveryActionData =\n await this.getValidator().encodeRecoveryAction(\n fetchedEnableData,\n defaultValidatorAddress\n );\n\n return await this.sendUserOperation({\n target: await this.getAddress(),\n data: encodedRecoveryActionData,\n });\n }\n\n // [TODO]\n // changeGuardian = this.sendEnableUserOperation;\n\n deleteRecoveryData = this.sendDisableUserOperation;\n}\n"]}
@@ -17,7 +17,7 @@ export declare const DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000
17
17
  export declare const ERC165_SESSION_KEY_VALIDATOR_ADDRESS = "0xe149290800De29D4b0BF9dB82c508255D81902E6";
18
18
  export declare const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
19
19
  export declare const SESSION_KEY_VALIDATOR_ADDRESS = "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
20
- export declare const RECOVERY_VALIDATOR_ADDRESS = "0xa7e3Bc66086Ae51b20e59b6C84666635A0d0A16C";
20
+ export declare const RECOVERY_VALIDATOR_ADDRESS = "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
21
21
  export declare const RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
22
22
  export declare const oneAddress = "0x0000000000000000000000000000000000000001";
23
23
  export declare const gasTokenChainAddresses: IGasTokenAddresses;
@@ -12,6 +12,7 @@ export type ZeroDevProviderConfig = {
12
12
  opts?: SmartAccountProviderOpts & {
13
13
  sendTxMaxRetries?: number;
14
14
  sendTxRetryIntervalMs?: number;
15
+ gasFeeBufferPecentage?: number;
15
16
  };
16
17
  };
17
18
  export declare enum Operation {
@@ -27,6 +28,7 @@ export declare class ZeroDevProvider extends SmartAccountProvider<HttpTransport>
27
28
  private _txMaxRetries;
28
29
  private _txRetryIntervalMs;
29
30
  private _shouldConsume;
31
+ gasFeeBufferPecentage: number;
30
32
  constructor({ projectId, chain, entryPointAddress, rpcUrl, account, bundlerProvider, opts, }: ZeroDevProviderConfig);
31
33
  getProjectId: () => string;
32
34
  shouldConsume: () => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/kernel-zerodev/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,IAAI,EAET,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAE3B,MAAM,MAAM,CAAC;AACd,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAG5B,KAAK,mBAAmB,EAExB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAE5B,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EAAE,0BAA0B,EAAmB,MAAM,cAAc,CAAC;AAM3E,OAAO,KAAK,EACV,4BAA4B,EAC5B,eAAe,EACf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,0BAA0B,CAAC;IACrC,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAC/C,IAAI,CAAC,EAAE,wBAAwB,GAAG;QAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,oBAAY,SAAS;IACnB,IAAI,IAAI;IACR,YAAY,IAAI;CACjB;AAED,KAAK,wBAAwB,CAAC,CAAC,IAAI,CAAC,SAAS,qBAAqB,GAC9D,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,YAAY,GACvC,CAAC,SAAS,0BAA0B,GACpC,SAAS,CAAC,IAAI,GACd,KAAK,CAAC;AAEV,qBAAa,eAAgB,SAAQ,oBAAoB,CAAC,aAAa,CAAC;IACtE,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,4BAA4B,CAAC;IACxD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,cAAc,CAAiB;gBAE3B,EACV,SAAS,EACT,KAAK,EACL,iBAAsC,EACtC,MAAoB,EACpB,OAAO,EACP,eAAe,EACf,IAAI,GACL,EAAE,qBAAqB;IA8BxB,YAAY,QAAO,MAAM,CAAmB;IAE5C,aAAa,QAAO,OAAO,CAAwB;IAEnD,eAAe,YACJ,qBAAqB,cACnB,yBAAyB,qBAAqB,CAAC,KACzD,QAAQ,IAAI,CAAC,CAwBd;IAEF,kBAAkB,sFAIJ,sBAAsB,8CAEjC,QAAQ,mBAAmB,CAAC,CAqD7B;IAEF,OAAO,CAAC,mBAAmB,CAczB;IAEF,iBAAiB,sFAIH,sBAAsB,8CAEjC,QAAQ,uBAAuB,CAAC,CA+GjC;IAEF,oBAAoB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAc3C,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,KAAK;IAsBhC,+BAA+B,SAAgB,IAAI,KAAG,QAAQ,IAAI,CAAC,CA+BjE;IAEF,UAAU,EAAE,MAAM,0BAA0B,CAK1C;IAEF,4BAA4B,EAAE,mBAAmB,CAK/C;IAEF,2BAA2B,CAAC,MAAM,EAAE,eAAe,CAAC,eAAe,CAAC;;;IAUpE,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CA6BjE;CACH"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/kernel-zerodev/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,IAAI,EAET,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAE3B,MAAM,MAAM,CAAC;AACd,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAG5B,KAAK,mBAAmB,EAExB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAE5B,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EAAE,0BAA0B,EAAmB,MAAM,cAAc,CAAC;AAM3E,OAAO,KAAK,EACV,4BAA4B,EAC5B,eAAe,EACf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,0BAA0B,CAAC;IACrC,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAC/C,IAAI,CAAC,EAAE,wBAAwB,GAAG;QAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,oBAAY,SAAS;IACnB,IAAI,IAAI;IACR,YAAY,IAAI;CACjB;AAED,KAAK,wBAAwB,CAAC,CAAC,IAAI,CAAC,SAAS,qBAAqB,GAC9D,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,YAAY,GACvC,CAAC,SAAS,0BAA0B,GACpC,SAAS,CAAC,IAAI,GACd,KAAK,CAAC;AAEV,qBAAa,eAAgB,SAAQ,oBAAoB,CAAC,aAAa,CAAC;IACtE,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,4BAA4B,CAAC;IACxD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,cAAc,CAAiB;IAChC,qBAAqB,EAAE,MAAM,CAAC;gBAEzB,EACV,SAAS,EACT,KAAK,EACL,iBAAsC,EACtC,MAAoB,EACpB,OAAO,EACP,eAAe,EACf,IAAI,GACL,EAAE,qBAAqB;IA+BxB,YAAY,QAAO,MAAM,CAAmB;IAE5C,aAAa,QAAO,OAAO,CAAwB;IAEnD,eAAe,YACJ,qBAAqB,cACnB,yBAAyB,qBAAqB,CAAC,KACzD,QAAQ,IAAI,CAAC,CAwBd;IAEF,kBAAkB,sFAIJ,sBAAsB,8CAEjC,QAAQ,mBAAmB,CAAC,CAqD7B;IAEF,OAAO,CAAC,mBAAmB,CAczB;IAEF,iBAAiB,sFAIH,sBAAsB,8CAEjC,QAAQ,uBAAuB,CAAC,CA+GjC;IAEF,oBAAoB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAc3C,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,KAAK;IAsBhC,+BAA+B,SAAgB,IAAI,KAAG,QAAQ,IAAI,CAAC,CA+BjE;IAEF,UAAU,EAAE,MAAM,0BAA0B,CAK1C;IAEF,4BAA4B,EAAE,mBAAmB,CAK/C;IAEF,2BAA2B,CAAC,MAAM,EAAE,eAAe,CAAC,eAAe,CAAC;;;IAUpE,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CA6BjE;CACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerodev/sdk",
3
- "version": "4.5.2-beta.0",
3
+ "version": "4.5.3",
4
4
  "description": "A collection of ERC-4337 compliant smart contract account interfaces",
5
5
  "author": "ZeroDev",
6
6
  "license": "MIT",
@@ -29,7 +29,7 @@ export const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
29
29
  export const SESSION_KEY_VALIDATOR_ADDRESS =
30
30
  "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
31
31
  export const RECOVERY_VALIDATOR_ADDRESS =
32
- "0xa7e3Bc66086Ae51b20e59b6C84666635A0d0A16C";
32
+ "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
33
33
  export const RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
34
34
  export const oneAddress = "0x0000000000000000000000000000000000000001";
35
35
 
@@ -153,7 +153,7 @@ export const eip1559GasPrice = async (provider: ZeroDevProvider) => {
153
153
  }
154
154
 
155
155
  const tip = BigInt(fee);
156
- const buffer = (tip / 100n) * 13n;
156
+ const buffer = (tip / 100n) * BigInt(provider.gasFeeBufferPecentage);
157
157
  let maxPriorityFeePerGas = tip + buffer;
158
158
  maxPriorityFeePerGas =
159
159
  maxPriorityFeePerGas < provider.minPriorityFeePerBid
@@ -54,6 +54,7 @@ export type ZeroDevProviderConfig = {
54
54
  opts?: SmartAccountProviderOpts & {
55
55
  sendTxMaxRetries?: number;
56
56
  sendTxRetryIntervalMs?: number;
57
+ gasFeeBufferPecentage?: number;
57
58
  };
58
59
  };
59
60
 
@@ -76,6 +77,7 @@ export class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
76
77
  private _txMaxRetries: number;
77
78
  private _txRetryIntervalMs: number;
78
79
  private _shouldConsume: boolean = true;
80
+ public gasFeeBufferPecentage: number;
79
81
 
80
82
  constructor({
81
83
  projectId,
@@ -103,6 +105,7 @@ export class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
103
105
  minPriorityFeePerBidDefaults.get(_chain.id),
104
106
  });
105
107
 
108
+ this.gasFeeBufferPecentage = opts?.gasFeeBufferPecentage ?? 13;
106
109
  this._txMaxRetries = opts?.txMaxRetries ?? 20;
107
110
  this._txRetryIntervalMs = opts?.txRetryIntervalMs ?? 5000;
108
111
  this.bundlerProvider = bundlerProvider;
@@ -200,7 +200,7 @@ export class RecoveryProvider extends ValidatorProvider<
200
200
  });
201
201
  }
202
202
 
203
- async initiateRecovery(enableData: Hex): Promise<string> { // blake 1
203
+ async initiateRecovery(enableData: Hex): Promise<string> {
204
204
  const serializedConfig = this.serializeRecoveryConfig();
205
205
  const recoveryId = await postRecoveryData(
206
206
  enableData,