@nevermined-io/core-kit 1.17.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,8 +42,59 @@ export declare abstract class ContractBase extends Instantiable {
42
42
  * this to confirm a prior submission instead of resubmitting a duplicate.
43
43
  */
44
44
  getUserOperationReceipt(hash: `0x${string}`): Promise<UserOperationReceipt | null>;
45
+ /**
46
+ * Batched sibling of {@link internalSendSmartAccount}. It submits a UserOp
47
+ * from the same sender by the same route, so the one-deploying-UserOp-per-
48
+ * sender constraint documented there applies here identically — see that
49
+ * docblock before assuming a batched send is exempt (#2702).
50
+ */
45
51
  private internalMulticallSmartAccount;
46
52
  private assertUserOpSucceeded;
53
+ /**
54
+ * Submit one contract call as an ERC-4337 UserOperation from a smart account.
55
+ *
56
+ * ## Concurrency: the nonce channel is handled here, the DEPLOYMENT is not
57
+ *
58
+ * The random `customNonceKey` below (#1579) puts concurrent UserOps from one
59
+ * SCA on distinct EntryPoint nonce channels instead of colliding on the
60
+ * default `key=0n`. That covers the nonce channel and nothing else.
61
+ *
62
+ * A bundler's mempool separately permits at most **one UserOperation carrying
63
+ * deployment data per sender**. While the SCA has no code on-chain, viem
64
+ * attaches `factory`/`factoryData` to every send: `getFactoryArgs()` skips
65
+ * them only once `isDeployed()` has observed code
66
+ * (`viem/account-abstraction/accounts/toSmartAccount`), and that latches
67
+ * AFTER the fact — so two concurrent first-sends both attach deployment data
68
+ * and the second is a conflicting deployment. No nonce key can defeat this;
69
+ * it is a rule about the sender, not about the nonce.
70
+ *
71
+ * ## The symptom differs between production and the local stack
72
+ *
73
+ * - **Production** (non-zero gas fees): the bundler's "replace only on a
74
+ * >=10% higher fee" gate is live, so the second op is REJECTED with
75
+ * `AA10 sender already constructed, bump the gas price by minimum 10%`.
76
+ * - **Local fork stack** (relayer mode zeroes gas fees): that gate degenerates
77
+ * to `0 >= 0` -> true, so alto silently DROPS the FIRST op rather than
78
+ * rejecting the second. It surfaces as a ~90s `waitForUserOperationReceipt`
79
+ * timeout with a `userOpReplaced` / `"reason":"Higher gas fees"` event in
80
+ * the bundler log — i.e. wearing the exact costume of the #1579 nonce
81
+ * collision. Don't chase the nonce key when debugging that locally, and
82
+ * don't expect an e2e here to reproduce the production failure. #2701 had
83
+ * to deploy the SCA up front so its test measures the nonce channel alone.
84
+ *
85
+ * ## If you need concurrent FIRST sends from one SCA
86
+ *
87
+ * Ensure the account is deployed before fanning out — one awaited send, then
88
+ * the rest. **Do not add an in-process lock here**: it would be an incomplete
89
+ * fix that reads as a complete one. It cannot span processes (the API that
90
+ * consumes this SDK runs 2-5 replicas in production), and it would not cover
91
+ * senders that bypass this class entirely — e.g. `WalletMigrationService`'s
92
+ * stablecoin sweep (apps/api) calls `kernelClient.sendUserOperation` directly.
93
+ *
94
+ * Where serialization belongs (core-kit vs. callers vs. a shared lock) is an
95
+ * open decision: see #2702, and #2166 for the Postgres advisory lock that
96
+ * would be the cross-replica mechanism.
97
+ */
47
98
  private internalSendSmartAccount;
48
99
  private internalSimulateSmartAccount;
49
100
  private localAccountSimulate;
@@ -1 +1 @@
1
- {"version":3,"file":"ContractBase.d.ts","sourceRoot":"","sources":["../../src/contracts/ContractBase.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,GAAG,EACH,OAAO,EACP,OAAO,EAQP,kBAAkB,EACnB,MAAM,MAAM,CAAA;AACb,OAAO,EAGL,YAAY,EACZ,oBAAoB,EACrB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAKxD,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,GAAG,CAAA;IACR,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ;AA0CD,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,GAAG,EAAE,CAAA;IACX,EAAE,EAAE,OAAO,CAAA;CACZ;AAED,8BAAsB,YAAa,SAAQ,YAAY;IACrD,SAAgB,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,EAAE,GAAG,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,iBAAiB,CAA+D;gBAE5E,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;cAMlC,IAAI,CAClB,MAAM,EAAE,kBAAkB,EAC1B,cAAc,EAAE;QAAE,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE;IAYzC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBrE,qBAAqB,CAChC,MAAM,EAAE,oBAAoB,GAAG,kBAAkB,GAChD,OAAO,CAAC,kBAAkB,CAAC;IAiBvB,kBAAkB,CACvB,SAAS,EAAE,kBAAkB,GAAG,oBAAoB,EACpD,SAAS,CAAC,EAAE,MAAM,GAOZ,GAAG,EAAE;IAGA,SAAS,CACpB,KAAK,EAAE,cAAc,EAAE,EACvB,IAAI,EAAE,OAAO,GAAG,YAAY,EAC5B,MAAM,GAAE,YAAiB;IAgBd,iBAAiB,CAC5B,KAAK,EAAE,sBAAsB,EAAE,EAC/B,IAAI,EAAE,OAAO,GAAG,YAAY,EAC5B,MAAM,GAAE,YAAiB;IAgBd,QAAQ,CACnB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,GAAG,YAAY,EAC5B,IAAI,EAAE,GAAG,EAAE,EACX,MAAM,GAAE,YAAiB;IAgBd,IAAI,CACf,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,GAAG,YAAY,EAC5B,IAAI,EAAE,GAAG,EAAE,EACX,MAAM,GAAE,YAAiB,GACxB,OAAO,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;IAiBrD;;;;;;;OAOG;IACU,uBAAuB,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;YA8BjF,6BAA6B;IAuF3C,OAAO,CAAC,qBAAqB;YAaf,wBAAwB;YA2MxB,4BAA4B;YAuB5B,oBAAoB;YAuBpB,gBAAgB;YAoIhB,qBAAqB;YAyBrB,6BAA6B;YAqB7B,qCAAqC;IAkEnD,OAAO,CAAC,oBAAoB;IAU5B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAW1B,SAAS,CAAC,aAAa,IAAI,MAAM;IAcjC,OAAO,CAAC,eAAe;CAYxB"}
1
+ {"version":3,"file":"ContractBase.d.ts","sourceRoot":"","sources":["../../src/contracts/ContractBase.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,GAAG,EACH,OAAO,EACP,OAAO,EAQP,kBAAkB,EACnB,MAAM,MAAM,CAAA;AACb,OAAO,EAGL,YAAY,EACZ,oBAAoB,EACrB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAKxD,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,GAAG,CAAA;IACR,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ;AA0CD,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,GAAG,EAAE,CAAA;IACX,EAAE,EAAE,OAAO,CAAA;CACZ;AAED,8BAAsB,YAAa,SAAQ,YAAY;IACrD,SAAgB,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,EAAE,GAAG,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,iBAAiB,CAA+D;gBAE5E,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;cAMlC,IAAI,CAClB,MAAM,EAAE,kBAAkB,EAC1B,cAAc,EAAE;QAAE,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE;IAYzC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBrE,qBAAqB,CAChC,MAAM,EAAE,oBAAoB,GAAG,kBAAkB,GAChD,OAAO,CAAC,kBAAkB,CAAC;IAiBvB,kBAAkB,CACvB,SAAS,EAAE,kBAAkB,GAAG,oBAAoB,EACpD,SAAS,CAAC,EAAE,MAAM,GAOZ,GAAG,EAAE;IAGA,SAAS,CACpB,KAAK,EAAE,cAAc,EAAE,EACvB,IAAI,EAAE,OAAO,GAAG,YAAY,EAC5B,MAAM,GAAE,YAAiB;IAgBd,iBAAiB,CAC5B,KAAK,EAAE,sBAAsB,EAAE,EAC/B,IAAI,EAAE,OAAO,GAAG,YAAY,EAC5B,MAAM,GAAE,YAAiB;IAgBd,QAAQ,CACnB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,GAAG,YAAY,EAC5B,IAAI,EAAE,GAAG,EAAE,EACX,MAAM,GAAE,YAAiB;IAgBd,IAAI,CACf,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,GAAG,YAAY,EAC5B,IAAI,EAAE,GAAG,EAAE,EACX,MAAM,GAAE,YAAiB,GACxB,OAAO,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;IAiBrD;;;;;;;OAOG;IACU,uBAAuB,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IA8B/F;;;;;OAKG;YACW,6BAA6B;IAuF3C,OAAO,CAAC,qBAAqB;IAa7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;YACW,wBAAwB;YA2MxB,4BAA4B;YAuB5B,oBAAoB;YAuBpB,gBAAgB;YAoIhB,qBAAqB;YAyBrB,6BAA6B;YAqB7B,qCAAqC;IAkEnD,OAAO,CAAC,oBAAoB;IAU5B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAW1B,SAAS,CAAC,aAAa,IAAI,MAAM;IAcjC,OAAO,CAAC,eAAe;CAYxB"}
@@ -188,7 +188,12 @@ export class ContractBase extends Instantiable {
188
188
  return null;
189
189
  }
190
190
  }
191
- async internalMulticallSmartAccount(calls, from, txparams, progress) {
191
+ /**
192
+ * Batched sibling of {@link internalSendSmartAccount}. It submits a UserOp
193
+ * from the same sender by the same route, so the one-deploying-UserOp-per-
194
+ * sender constraint documented there applies here identically — see that
195
+ * docblock before assuming a batched send is exempt (#2702).
196
+ */ async internalMulticallSmartAccount(calls, from, txparams, progress) {
192
197
  if (progress) {
193
198
  progress({
194
199
  stage: 'multicall-sending',
@@ -270,7 +275,51 @@ export class ContractBase extends Instantiable {
270
275
  if (txReceipt.success) return;
271
276
  throw new ContractsError(`UserOp inner call reverted for "${method}" on "${this.contractName}". ` + `userOpHash=${userOpHash} txHash=${txReceipt.receipt.transactionHash} ` + `reason=${txReceipt.reason ?? 'unknown'}`);
272
277
  }
273
- async internalSendSmartAccount(name, from, args, txparams, progress) {
278
+ /**
279
+ * Submit one contract call as an ERC-4337 UserOperation from a smart account.
280
+ *
281
+ * ## Concurrency: the nonce channel is handled here, the DEPLOYMENT is not
282
+ *
283
+ * The random `customNonceKey` below (#1579) puts concurrent UserOps from one
284
+ * SCA on distinct EntryPoint nonce channels instead of colliding on the
285
+ * default `key=0n`. That covers the nonce channel and nothing else.
286
+ *
287
+ * A bundler's mempool separately permits at most **one UserOperation carrying
288
+ * deployment data per sender**. While the SCA has no code on-chain, viem
289
+ * attaches `factory`/`factoryData` to every send: `getFactoryArgs()` skips
290
+ * them only once `isDeployed()` has observed code
291
+ * (`viem/account-abstraction/accounts/toSmartAccount`), and that latches
292
+ * AFTER the fact — so two concurrent first-sends both attach deployment data
293
+ * and the second is a conflicting deployment. No nonce key can defeat this;
294
+ * it is a rule about the sender, not about the nonce.
295
+ *
296
+ * ## The symptom differs between production and the local stack
297
+ *
298
+ * - **Production** (non-zero gas fees): the bundler's "replace only on a
299
+ * >=10% higher fee" gate is live, so the second op is REJECTED with
300
+ * `AA10 sender already constructed, bump the gas price by minimum 10%`.
301
+ * - **Local fork stack** (relayer mode zeroes gas fees): that gate degenerates
302
+ * to `0 >= 0` -> true, so alto silently DROPS the FIRST op rather than
303
+ * rejecting the second. It surfaces as a ~90s `waitForUserOperationReceipt`
304
+ * timeout with a `userOpReplaced` / `"reason":"Higher gas fees"` event in
305
+ * the bundler log — i.e. wearing the exact costume of the #1579 nonce
306
+ * collision. Don't chase the nonce key when debugging that locally, and
307
+ * don't expect an e2e here to reproduce the production failure. #2701 had
308
+ * to deploy the SCA up front so its test measures the nonce channel alone.
309
+ *
310
+ * ## If you need concurrent FIRST sends from one SCA
311
+ *
312
+ * Ensure the account is deployed before fanning out — one awaited send, then
313
+ * the rest. **Do not add an in-process lock here**: it would be an incomplete
314
+ * fix that reads as a complete one. It cannot span processes (the API that
315
+ * consumes this SDK runs 2-5 replicas in production), and it would not cover
316
+ * senders that bypass this class entirely — e.g. `WalletMigrationService`'s
317
+ * stablecoin sweep (apps/api) calls `kernelClient.sendUserOperation` directly.
318
+ *
319
+ * Where serialization belongs (core-kit vs. callers vs. a shared lock) is an
320
+ * open decision: see #2702, and #2166 for the Postgres advisory lock that
321
+ * would be the cross-replica mechanism.
322
+ */ async internalSendSmartAccount(name, from, args, txparams, progress) {
274
323
  const functionInputs = getInputsOfFunctionFormatted(this.contract.abi, name, args);
275
324
  const { gasLimit, value } = txparams;
276
325
  if (progress) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/contracts/ContractBase.ts"],"sourcesContent":["import { createKernelAccountClient, createZeroDevPaymasterClient } from '@zerodev/sdk'\nimport {\n estimateUserOperationFees,\n getBundlerRpcUrl,\n getPaymasterRpcUrl,\n isRelayerMode,\n} from '../nevermined/utils/BlockchainViemUtils.js'\nimport {\n Abi,\n Account,\n Address,\n BaseError,\n ContractFunctionRevertedError,\n encodeFunctionData,\n getContract,\n http,\n parseAbi,\n parseEventLogs,\n TransactionReceipt,\n} from 'viem'\nimport {\n createBundlerClient,\n getUserOperationHash,\n SmartAccount,\n UserOperationReceipt,\n} from 'viem/account-abstraction'\nimport { ContractsError, ContractSimulationError } from '../errors/index.js'\nimport { Instantiable, InstantiableConfig } from '../Instantiable.abstract.js'\nimport { TxParameters } from '../models/Transactions.js'\nimport { getInputsOfFunctionFormatted, getTransactionReceipt } from '../nevermined/index.js'\nimport { getRandomBigInt } from '../utils/helpers.js'\nimport { getChain } from '../utils/Network.js'\n\nexport interface MulticallEntry {\n contractName?: string\n contractAddress: Address\n abi: Abi\n functionName: string\n args: any[]\n}\n\n/**\n * When a testnet RPC (Base Sepolia) fails internally, some providers return\n * `eth_estimateGas` values equal to — or even above — the block gas limit\n * instead of a real error. Using that value causes the node to reject the tx\n * with `intrinsic gas too high` before it ever reaches the mempool.\n *\n * `writeContract` in viem re-estimates gas internally when `gas` isn't\n * already set on the request (viem's `simulateContract` only performs\n * `eth_call`, not `eth_estimateGas`). That means the naïve path has no\n * chance to intercept a bogus estimate. We run the estimation ourselves\n * here, sanity-check the result, and always pass an explicit gas value\n * into `writeContract` so it doesn't re-query the misbehaving RPC.\n */\nconst GAS_SANITY_THRESHOLD = 25_000_000n\nconst GAS_FALLBACK_CAP = 5_000_000n\n\n// EntryPoint v0.7: ZeroDev's `toKernelPluginManager` rejects `customNonceKey > maxUint16`.\n// 16 bits = 65 536 channels — collision probability for the SDK's expected concurrency\n// (k=2–5 parallel sends from one SCA) is negligible (< 0.02 %). High-fan-out callers\n// (k > 50) should consider a per-process monotonic counter instead. See issue #1579.\nconst ZERODEV_NONCE_KEY_BITS = 16\n\n// Client-side cap on `waitForUserOperationReceipt`. The userOp is already in the bundler\n// mempool when this fires — a client-side timeout does NOT cancel it. Callers that catch\n// the resulting `ContractsError` MUST poll `bundlerClient.getUserOperationReceipt(hash)`\n// before retrying; otherwise a retry can produce a duplicate on-chain op.\nconst USEROP_RECEIPT_TIMEOUT_MS = 90_000\n\nfunction capForBogusEstimate(\n estimatedGas: bigint,\n logger: { warn: (msg: string) => void },\n): bigint {\n if (estimatedGas < GAS_SANITY_THRESHOLD) return estimatedGas\n logger.warn(\n `Estimated gas (${estimatedGas}) exceeds sanity threshold ` +\n `(${GAS_SANITY_THRESHOLD}); overriding with ${GAS_FALLBACK_CAP} to bypass misbehaving RPC estimate.`,\n )\n return GAS_FALLBACK_CAP\n}\n\nexport interface SimulateMulticallEntry {\n functionName: string\n value?: bigint\n abi: Abi\n args: any[]\n to: Address\n}\n\nexport abstract class ContractBase extends Instantiable {\n public readonly contractName: string\n public contract: any\n public address: Address\n private _zeroDevPaymaster: ReturnType<typeof createZeroDevPaymasterClient> | null = null\n\n constructor(contractName: string, address: Address) {\n super()\n this.contractName = contractName\n this.address = address\n }\n\n protected async init(\n config: InstantiableConfig,\n contractConfig: { address: `0x${string}`; abi: Abi },\n ) {\n this.setInstanceConfig(config)\n this.address = contractConfig.address\n\n this.contract = getContract({\n address: contractConfig.address,\n abi: contractConfig.abi,\n client: { public: this.publicClient, wallet: this.walletClient },\n })\n }\n\n public async call<T>(functionName: string, args: any[], from?: string): Promise<T> {\n try {\n return (await this.client.public.readContract({\n address: this.address,\n abi: this.contract.abi,\n functionName: parseAbi([functionName]),\n args,\n ...(from && { account: from as `0x${string}` }),\n })) as T\n //return await this.contract[functionSignature](...args, { from })\n } catch (err) {\n throw new ContractsError(\n `Calling method \"${functionName}\" on contract \"${this.contractName}\" failed. Args: ${args} - ${err}`,\n )\n }\n }\n\n public async getTransactionReceipt(\n txHash: UserOperationReceipt | TransactionReceipt,\n ): Promise<TransactionReceipt> {\n // Get the transaction receipt depending on the type of txHash\n if ('transactionHash' in txHash) {\n // txHash is TransactionReceipt\n return txHash\n } else if ('userOpHash' in txHash) {\n // txHash is UserOperationReceipt, fetch the actual receipt using the utility function with retry logic\n const hash = txHash.receipt.transactionHash\n return await getTransactionReceipt({\n txHash: hash,\n publicClient: this.client.public,\n })\n } else {\n throw new Error('Unknown transaction type')\n }\n }\n\n public getTransactionLogs(\n txReceipt: TransactionReceipt | UserOperationReceipt,\n eventName?: string,\n ) {\n return parseEventLogs({\n abi: this.contract.abi,\n logs: txReceipt.logs,\n eventName,\n strict: false,\n }) as any[]\n }\n\n public async multicall(\n calls: MulticallEntry[],\n from: Account | SmartAccount,\n params: TxParameters = {},\n ) {\n if (from.type === 'local') {\n this.logger.debug(`Blockchain Multicall using Local account`)\n return await this.localAccountMulticall(calls, from, params, params.progress)\n } else if (from.type === 'json-rpc') {\n this.logger.debug(`Blockchain Multicall using JSON-RPC account`)\n return await this.localAccountMulticall(calls, from, params, params.progress)\n } else if (from.type === 'smart') {\n this.logger.debug(`Blockchain Multicall using ZeroDev account`)\n return await this.internalMulticallSmartAccount(calls, from, params, params.progress)\n } else {\n throw new ContractsError(`Account not supported`)\n }\n }\n\n public async simulateMulticall(\n calls: SimulateMulticallEntry[],\n from: Account | SmartAccount,\n params: TxParameters = {},\n ) {\n if (from.type === 'local') {\n this.logger.debug(`Simulating calls using Local account`)\n return await this.localAccountSimulateMulticall(calls, from, params)\n } else if (from.type === 'json-rpc') {\n this.logger.debug(`Simulating calls using JSON-RPC account`)\n return await this.localAccountSimulateMulticall(calls, from, params)\n } else if (from.type === 'smart') {\n this.logger.debug(`Simulating calls using Smart Account account`)\n return await this.internalSimulateMulticallSmartAccount(calls, from, params)\n } else {\n throw new ContractsError(`Account not supported`)\n }\n }\n\n public async simulate(\n functionName: string,\n from: Account | SmartAccount,\n args: any[],\n params: TxParameters = {},\n ) {\n if (from.type === 'local') {\n this.logger.debug(`Simulating calls using Local account`)\n return await this.localAccountSimulate(functionName, from, args, params)\n } else if (from.type === 'json-rpc') {\n this.logger.debug(`Simulating calls using JSON-RPC account`)\n return await this.localAccountSimulate(functionName, from, args, params)\n } else if (from.type === 'smart') {\n this.logger.debug(`Simulating calls using Smart Account account`)\n return await this.internalSimulateSmartAccount(functionName, from, args, params)\n } else {\n throw new ContractsError(`Account not supported`)\n }\n }\n\n public async send(\n functionName: string,\n from: Account | SmartAccount,\n args: any[],\n params: TxParameters = {},\n ): Promise<TransactionReceipt | UserOperationReceipt> {\n if (from.type === 'local') {\n this.logger.debug(\n `Blockchain Send using Local account with functionName: ${functionName} and following args: ${args}`,\n )\n return await this.localAccountSend(functionName, from, args, params, params.progress)\n } else if (from.type === 'json-rpc') {\n this.logger.debug(`Blockchain Send using JSON-RPC account to ${functionName}`)\n return await this.localAccountSend(functionName, from, args, params, params.progress)\n } else if (from.type === 'smart') {\n this.logger.debug(`Blockchain Send using ZeroDev account`)\n return await this.internalSendSmartAccount(functionName, from, args, params, params.progress)\n } else {\n throw new ContractsError(`Account not supported`)\n }\n }\n\n /**\n * Poll a previously-submitted UserOperation's receipt by hash WITHOUT\n * blocking. Returns the receipt once the bundler has mined it, or `null`\n * while it is still in the mempool / not yet known. A client-side\n * receipt-wait timeout does NOT cancel a submitted UserOp, so callers that\n * persist the hash (e.g. the onchain-mirror worker, nvm-monorepo#1508) use\n * this to confirm a prior submission instead of resubmitting a duplicate.\n */\n public async getUserOperationReceipt(hash: `0x${string}`): Promise<UserOperationReceipt | null> {\n try {\n const bundlerClient = createBundlerClient({\n chain: getChain(this.config.chainId),\n transport: http(this.getBundlerRPC()),\n client: this.client.public,\n })\n return (await bundlerClient.getUserOperationReceipt({ hash })) ?? null\n } catch (err) {\n // A genuinely-absent receipt (UserOp still in the mempool) is expected\n // and benign — some bundlers signal it by throwing rather than returning\n // null. Anything else (RPC/transport/config fault) must NOT masquerade as\n // \"still pending\": surface it at `warn` so a bundler outage is visible\n // instead of silently driving the caller's grace-window logic. Either\n // way we return null so the caller re-polls rather than consuming a retry.\n const message = err instanceof Error ? err.message : String(err)\n if (/not[\\s_]?found|UserOperationReceiptNotFound/i.test(message)) {\n this.logger.debug(`getUserOperationReceipt(${hash}): not yet mined`)\n } else {\n // Redact URLs before logging: the bundler RPC URL embeds the ZeroDev\n // project id, which should not leak into logs.\n const safeMessage = message.replace(/https?:\\/\\/[^\\s'\")]+/gi, '<redacted-url>')\n this.logger.warn(\n `getUserOperationReceipt(${hash}) lookup error (treating as not-yet-mined): ${safeMessage}`,\n )\n }\n return null\n }\n }\n\n private async internalMulticallSmartAccount(\n calls: MulticallEntry[],\n from: SmartAccount,\n txparams: any,\n progress: ((data: any) => void) | undefined,\n ) {\n if (progress) {\n progress({\n stage: 'multicall-sending',\n args: [],\n method: '',\n from: from,\n contractAddress: this.address,\n })\n }\n\n const kernelClient = createKernelAccountClient({\n account: from,\n chain: getChain(this.config.chainId),\n bundlerTransport: http(this.getBundlerRPC()),\n client: this.client.public,\n ...this.getPaymasterConfig(),\n userOperation: {\n estimateFeesPerGas: async ({ bundlerClient }) => {\n return estimateUserOperationFees(bundlerClient, this.client.public)\n },\n },\n })\n\n const encodedCalls: any[] = []\n calls.map((call) => {\n encodedCalls.push({\n to: call.contractAddress || this.address,\n value: txparams.value || 0n,\n data: encodeFunctionData({\n abi: call.abi,\n functionName: call.functionName,\n args: call.args,\n }),\n })\n })\n\n let userOpHash: `0x${string}` | undefined\n try {\n // Random nonce key per send so concurrent userOps from the same SCA\n // hit distinct EntryPoint nonce channels instead of colliding on the\n // default `customNonceKey=0n`. See issue #1579.\n const nonce = await from.getNonce({ key: getRandomBigInt(ZERODEV_NONCE_KEY_BITS) })\n userOpHash = await kernelClient.sendUserOperation({\n callData: await kernelClient.account.encodeCalls(encodedCalls),\n nonce,\n })\n\n if (progress) {\n progress({\n stage: 'multicall-sent',\n args: [],\n method: '',\n from: from,\n contractAddress: this.address,\n })\n }\n\n // Wait for the transaction to be mined\n this.logger.debug(`Waiting for transaction to be mined... ${userOpHash}`)\n const txReceipt = await kernelClient.waitForUserOperationReceipt({\n hash: userOpHash,\n timeout: USEROP_RECEIPT_TIMEOUT_MS,\n })\n this.logger.debug(`Transaction mined - UserOperationHash: ${userOpHash}`)\n this.logger.debug(\n `Transaction receipt - TransactionHash: ${txReceipt.receipt.transactionHash}`,\n )\n this.assertUserOpSucceeded(txReceipt, 'multicall', userOpHash)\n return txReceipt.receipt\n } catch (err) {\n if (err instanceof BaseError) {\n const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError)\n this.logger.error(`revertError: ${String(revertError)}`)\n }\n // Surface userOpHash so callers can poll for eventual inclusion before\n // retrying — a client-side receipt-wait timeout does NOT cancel the userOp.\n const hashSuffix = userOpHash ? ` userOpHash=${userOpHash}` : ''\n throw new ContractsError(`Multicall failed:${hashSuffix} ${err}`, { cause: err })\n }\n }\n\n private assertUserOpSucceeded(\n txReceipt: UserOperationReceipt,\n method: string,\n userOpHash: string,\n ): void {\n if (txReceipt.success) return\n throw new ContractsError(\n `UserOp inner call reverted for \"${method}\" on \"${this.contractName}\". ` +\n `userOpHash=${userOpHash} txHash=${txReceipt.receipt.transactionHash} ` +\n `reason=${txReceipt.reason ?? 'unknown'}`,\n )\n }\n\n private async internalSendSmartAccount(\n name: string,\n from: SmartAccount,\n args: any[],\n txparams: any,\n progress: ((data: any) => void) | undefined,\n ): Promise<UserOperationReceipt> {\n const functionInputs = getInputsOfFunctionFormatted(this.contract.abi, name, args)\n\n const { gasLimit, value } = txparams\n if (progress) {\n progress({\n stage: 'sending',\n args: functionInputs,\n method: name,\n from: from,\n value,\n contractName: this.contractName,\n contractAddress: this.address,\n gasLimit,\n })\n }\n\n try {\n await this.client.public.simulateContract({\n address: this.address,\n abi: this.contract.abi,\n functionName: name,\n args,\n account: from,\n ...(txparams.value && { value: txparams.value }),\n })\n } catch (err) {\n if (err instanceof BaseError) {\n const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError)\n this.logger.error(`revertError: ${String(revertError)}`)\n }\n throw new ContractsError(\n `Calling method \"${name}\" on contract \"${this.contractName}\" failed. Args: ${args} - ${err}`,\n // #2163/#2164/#2478: keep the viem error reachable. Without it the API\n // can only see this message string, so a client mistake and a server\n // fault look identical and both become a 500.\n { cause: err },\n )\n }\n\n const kernelClient = createKernelAccountClient({\n account: from,\n chain: getChain(this.config.chainId),\n bundlerTransport: http(this.getBundlerRPC()),\n client: this.client.public,\n ...this.getPaymasterConfig(),\n userOperation: {\n estimateFeesPerGas: async ({ bundlerClient }) => {\n return estimateUserOperationFees(bundlerClient, this.client.public)\n },\n },\n })\n const data = encodeFunctionData({ abi: this.contract.abi, functionName: name, args })\n\n let userOpHash\n try {\n // Random nonce key per send so concurrent userOps from the same SCA\n // hit distinct EntryPoint nonce channels instead of colliding on the\n // default `customNonceKey=0n`. See issue #1579.\n const nonce = await from.getNonce({ key: getRandomBigInt(ZERODEV_NONCE_KEY_BITS) })\n const callData = await kernelClient.account.encodeCalls([\n {\n to: this.address,\n value: txparams.value || 0n,\n data,\n },\n ])\n\n // When a caller supplies a `progress` callback it may need the UserOp\n // hash BEFORE the send completes — the onchain-mirror worker races the\n // send against a per-tick deadline and must persist the hash even if the\n // send is cut off mid-flight, otherwise it resubmits and double-burns\n // (#1508/#1904). So prepare the UserOp here, surface its hash via\n // `progress({stage:'prepared'})`, and send that exact prepared op so the\n // bundler-returned hash matches. Best-effort and GATED ON `progress`:\n // any failure falls back to the normal send, and callers that pass no\n // progress callback keep the original send path byte-for-byte.\n let preparedUserOp: Awaited<ReturnType<typeof kernelClient.prepareUserOperation>> | undefined\n let preparedHash: `0x${string}` | undefined\n if (progress) {\n try {\n preparedUserOp = await kernelClient.prepareUserOperation({ callData, nonce })\n preparedHash = getUserOperationHash({\n chainId: this.config.chainId,\n entryPointAddress: from.entryPoint.address,\n entryPointVersion: from.entryPoint.version,\n userOperation: preparedUserOp,\n })\n progress({\n stage: 'prepared',\n args: functionInputs,\n userOpHash: preparedHash,\n method: name,\n from: from,\n value,\n contractName: this.contractName,\n contractAddress: this.address,\n gasLimit,\n })\n } catch (prepErr) {\n this.logger.warn(\n `prepareUserOperation (pre-send hash) failed for \"${name}\"; ` +\n `sending without an early hash: ${prepErr}`,\n )\n preparedUserOp = undefined\n preparedHash = undefined\n }\n }\n\n userOpHash = await kernelClient.sendUserOperation(\n // Re-send the exact prepared op (stripping the estimation stub\n // signature so the kernel re-signs) so the bundler hash matches the one\n // emitted above. Falls back to the original {callData, nonce} path\n // (which prepares internally) when no early hash was prepared.\n preparedUserOp\n ? ({ ...preparedUserOp, signature: undefined } as Parameters<\n typeof kernelClient.sendUserOperation\n >[0])\n : { callData, nonce },\n )\n\n // Determinism guard: the 'prepared' hash should equal the bundler's. If a\n // paymaster re-request changed the op it won't — a caller that persisted\n // the 'prepared' hash then just fails to find it and reconciles safely\n // (never a double-burn), but we log so we can see whether the early-hash\n // path is actually holding in practice.\n if (preparedHash && userOpHash !== preparedHash) {\n this.logger.warn(\n `UserOp 'prepared' hash ${preparedHash} != sent hash ${userOpHash} for \"${name}\"; ` +\n `early-hash callers will reconcile via receipt-not-found`,\n )\n }\n } catch (err) {\n if (err instanceof BaseError) {\n const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError)\n this.logger.error(`revertError: ${String(revertError)}`)\n }\n throw new ContractsError(\n `Calling method \"${name}\" on contract \"${this.contractName}\" failed. Args: ${args} - ${err}`,\n // #2163/#2164/#2478: keep the viem error reachable. Without it the API\n // can only see this message string, so a client mistake and a server\n // fault look identical and both become a 500.\n { cause: err },\n )\n }\n\n if (progress) {\n progress({\n stage: 'sent',\n args: functionInputs,\n userOpHash,\n method: name,\n from: from,\n value,\n contractName: this.contractName,\n contractAddress: this.address,\n gasLimit,\n })\n }\n\n let txReceipt: UserOperationReceipt\n try {\n txReceipt = await kernelClient.waitForUserOperationReceipt({\n hash: userOpHash,\n timeout: USEROP_RECEIPT_TIMEOUT_MS,\n })\n } catch (err) {\n // The userOp is already in the bundler mempool — a client-side timeout\n // does NOT cancel it. Surface userOpHash so callers can poll for eventual\n // inclusion before retrying, otherwise a retry can produce a duplicate\n // on-chain op. Wrap symmetric to `internalMulticallSmartAccount`.\n throw new ContractsError(\n `Calling method \"${name}\" on contract \"${this.contractName}\" timed out ` +\n `waiting for UserOp receipt. userOpHash=${userOpHash} — confirm on-chain ` +\n `inclusion before retrying. Underlying: ${err}`,\n )\n }\n\n this.assertUserOpSucceeded(txReceipt, name, userOpHash)\n\n if (progress) {\n progress({\n stage: 'receipt',\n args: functionInputs,\n txReceipt,\n method: name,\n from: from,\n value,\n contractName: this.contractName,\n contractAddress: this.address,\n gasLimit,\n })\n }\n\n return txReceipt\n }\n\n private async internalSimulateSmartAccount(\n name: string,\n from: SmartAccount,\n args: any[],\n txparams: any,\n ) {\n try {\n await this.client.public.simulateContract({\n address: this.address,\n abi: this.contract.abi,\n functionName: name,\n args,\n account: from.address,\n ...(txparams.value && { value: txparams.value }),\n })\n return true\n } catch (err) {\n throw new ContractSimulationError(\n `Error Simulating contract call \"${name}\" on contract \"${this.contractName}\" failed. Args: ${args} - ${err}`,\n )\n }\n }\n\n private async localAccountSimulate(\n name: string,\n from: Account | `0x${string}`,\n args: any[],\n txparams: any,\n ) {\n try {\n await this.client.public.simulateContract({\n address: this.address,\n abi: this.contract.abi,\n functionName: name,\n args,\n account: from,\n ...(txparams.value && { value: txparams.value }),\n })\n } catch (err) {\n throw new ContractSimulationError(\n `Error Simulating contract call \"${name}\" on contract \"${this.contractName}\" failed. Args: ${args} - ${err}`,\n )\n }\n return true\n }\n\n private async localAccountSend(\n name: string,\n from: Account | `0x${string}`,\n args: any[],\n txparams: any,\n progress: ((data: any) => void) | undefined,\n _contractAbi?: Abi,\n _contractAddress?: Address,\n _contractName?: string,\n ) {\n const abi = _contractAbi || this.contract.abi\n const contractAddress = _contractAddress || this.address\n const contractName = _contractName || this.contractName\n\n const functionInputs = getInputsOfFunctionFormatted(abi, name, args)\n // Uncomment to debug contract calls\n // if (name === 'order') {\n // const functionSignature = getSignatureOfFunction(this.contract.abi, name, args)\n // this.logger.info(`Making contract call ....: ${name} - ${from}`)\n // this.logger.info(`With args: `, JSON.stringify(args, jsonReplacer))\n // this.logger.info(`And signature: ${JSON.stringify(functionSignature, jsonReplacer)}`)\n // this.logger.info('And amount: ', txparams.value)\n // }\n // abi.filter(({name, inputs}) => name === 'closeSignals' && inputs.length === 1)\n // const abiFilter = this.contract.abi.filter((abi) => abi.name === name && abi.inputs.length === args.length)\n // const abiFilter = this.contract.abi.filter((abi) => abi.name === name && abi.type === 'function')\n // console.debug('abi', this.contract.abi.filter((abi) => abi.name === name))\n // console.debug('abiFilter', abiFilter)\n // if (!abiFilter)\n // throw new ContractsError(\n // `No ABI found for method \"${name}\" with ${args.length} arguments on contract \"${this.contractName}\"`,\n // )\n\n const { gasLimit, value } = txparams\n // make the call\n if (progress) {\n progress({\n stage: 'sending',\n args: functionInputs,\n method: name,\n from,\n value,\n contractName,\n contractAddress,\n gasLimit,\n })\n }\n\n let txHash: `0x${string}` | undefined\n try {\n const { request } = await this.client.public.simulateContract({\n address: contractAddress,\n abi,\n functionName: name,\n args,\n account: from,\n ...(txparams.value && { value: txparams.value }),\n })\n\n // Resolve gas ourselves so `writeContract` never falls back to its own\n // `eth_estimateGas`. An explicit caller `gasLimit` always wins; otherwise\n // we estimate, apply the block-limit sanity check, and pin the result.\n // If estimation itself fails we still honour any explicit cap.\n let resolvedGas: bigint | undefined = gasLimit\n if (resolvedGas === undefined) {\n try {\n const estimate = await this.client.public.estimateContractGas({\n address: contractAddress,\n abi,\n functionName: name,\n args,\n account: from,\n ...(txparams.value && { value: txparams.value }),\n })\n resolvedGas = capForBogusEstimate(estimate, this.logger)\n } catch (estErr) {\n this.logger.warn(\n `estimateContractGas for \"${name}\" on \"${contractName}\" failed (${estErr}); ` +\n `falling back to ${GAS_FALLBACK_CAP} to avoid a bogus RPC re-estimate in writeContract.`,\n )\n resolvedGas = GAS_FALLBACK_CAP\n }\n }\n\n txHash = await this.client.wallet.writeContract({\n ...request,\n account: from,\n gas: resolvedGas,\n })\n } catch (err) {\n if (err instanceof BaseError) {\n const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError)\n this.logger.error(`revertError: ${String(revertError)}`)\n }\n throw new ContractsError(\n `Calling method \"${name}\" on contract \"${contractName}\" failed. Args: ${args} - ${err}`,\n { cause: err },\n )\n }\n\n if (progress) {\n progress({\n stage: 'sent',\n args: functionInputs,\n txHash,\n method: name,\n from,\n value,\n contractName,\n contractAddress,\n gasLimit,\n })\n }\n const txReceipt = getTransactionReceipt({ txHash, publicClient: this.client.public })\n\n if (progress) {\n progress({\n stage: 'receipt',\n args: functionInputs,\n txReceipt,\n method: name,\n from,\n value,\n contractName,\n contractAddress,\n gasLimit,\n })\n }\n\n return txReceipt\n }\n\n private async localAccountMulticall(\n calls: MulticallEntry[],\n from: Account,\n txparams: any,\n progress: ((data: any) => void) | undefined,\n ): Promise<TransactionReceipt> {\n const receipts: TransactionReceipt[] = []\n for (const call of calls) {\n receipts.push(\n await this.localAccountSend(\n call.functionName,\n from,\n call.args,\n txparams,\n progress,\n call.abi,\n call.contractAddress,\n call.contractName,\n ),\n )\n }\n if (receipts.length > 0) return receipts.pop() as TransactionReceipt\n else throw new ContractsError(`No receipts found for multicall`)\n }\n\n private async localAccountSimulateMulticall(\n calls: SimulateMulticallEntry[],\n from: Account,\n txparams: any,\n ) {\n try {\n const { results } = await this.client.public.simulateCalls({\n calls,\n account: from,\n })\n this.logger.debug(`Simulated multicall - ${results}`)\n return true\n } catch (err) {\n if (err instanceof BaseError) {\n const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError)\n this.logger.error(`revertError: ${String(revertError)}`)\n }\n throw new ContractsError(`Error simulating multicall - ${err}`, { cause: err })\n }\n }\n\n private async internalSimulateMulticallSmartAccount(\n calls: SimulateMulticallEntry[],\n from: SmartAccount,\n txparams: any,\n ) {\n try {\n const kernelClient = createKernelAccountClient({\n account: from,\n chain: getChain(this.config.chainId),\n bundlerTransport: http(this.getBundlerRPC()),\n client: this.client.public,\n ...this.getPaymasterConfig(),\n userOperation: {\n estimateFeesPerGas: async ({ bundlerClient }) => {\n return estimateUserOperationFees(bundlerClient, this.client.public)\n },\n },\n })\n\n const encodedCalls = []\n for (const call of calls) {\n encodedCalls.push({\n to: call.to,\n value: call.value || 0n,\n data: encodeFunctionData({\n abi: call.abi,\n functionName: call.functionName,\n args: call.args,\n }),\n })\n }\n\n // DONT DELETE THE COMMENTED LINES - ARE NECESSARY FOR F***ING ZERODEV DEBUGGING\n\n // this.logger.info(`Encoded multicall - ${JSON.stringify(encodedCalls, jsonReplacer)}`)\n // const code = await this.client.public.getCode({ address: from.address })\n // const isDeployed = code !== undefined && code !== '0x'\n // this.logger.info(`++++++ Smart account ${from.address} deployment status: ${isDeployed ? 'DEPLOYED' : 'NOT DEPLOYED'}`)\n\n // // Log account details\n // this.logger.info(`Account type: ${from.type}`)\n // this.logger.info(`Account address: ${from.address}`)\n\n // // Log the calls being made\n // this.logger.info(`Number of calls: ${encodedCalls.length}`)\n // encodedCalls.forEach((call, index) => {\n // this.logger.info(`Call ${index}: to=${call.to}, value=${call.value}, data=${call.data.slice(0, 10)}...`)\n // })\n\n await kernelClient.prepareUserOperation({\n callData: await kernelClient.account.encodeCalls(encodedCalls),\n })\n\n return true\n } catch (err) {\n this.logger.error(`Error details: ${JSON.stringify(err, null, 2)}`)\n if (err instanceof BaseError) {\n const revertError = err.walk((e) => e instanceof ContractFunctionRevertedError)\n if (revertError) {\n this.logger.error(`Revert error: ${String(revertError)}`)\n }\n }\n throw new ContractSimulationError(`Error Simulating Multicalls - ${err}`)\n }\n }\n\n private getOrCreatePaymaster() {\n if (!this._zeroDevPaymaster) {\n this._zeroDevPaymaster = createZeroDevPaymasterClient({\n chain: getChain(this.config.chainId),\n transport: http(this.getPaymasterRPC()),\n })\n }\n return this._zeroDevPaymaster\n }\n\n /**\n * Builds the `paymaster` partial for `createKernelAccountClient`. In relayer\n * mode (e.g. local `ultra-relay` for tests) returns an empty object so the\n * kernel client submits UserOps without paymaster fields and the bundler\n * pays gas via its executor key. In production returns the ZeroDev paymaster\n * sponsorship callback.\n */\n private getPaymasterConfig() {\n if (isRelayerMode()) return {}\n const zerodevPaymaster = this.getOrCreatePaymaster()\n return {\n paymaster: {\n getPaymasterData: (userOperation: any) =>\n zerodevPaymaster.sponsorUserOperation({ userOperation }),\n },\n }\n }\n\n protected getBundlerRPC(): string {\n // In relayer mode `getBundlerRpcUrl` reads `BUNDLER_RPC_URL_OVERRIDE`\n // and never touches the project id, so an empty value is harmless. In\n // production callers must pass a project id — surface a clear error if\n // the SDK was instantiated without one and we need it.\n const projectId = this.config.zeroDevProjectId\n if (!projectId && !isRelayerMode()) {\n throw new ContractsError(\n 'getBundlerRPC: zeroDevProjectId is required for non-relayer (production) mode',\n )\n }\n return getBundlerRpcUrl(projectId ?? '', this.config.chainId, this.config.useUltraRelay)\n }\n\n private getPaymasterRPC(): string {\n // Only ever consulted when `getPaymasterConfig` decides to attach a\n // paymaster, which is gated on `!isRelayerMode()`. A missing project\n // id at this point is a configuration bug worth surfacing.\n const projectId = this.config.zeroDevProjectId\n if (!projectId) {\n throw new ContractsError(\n 'getPaymasterRPC: zeroDevProjectId is required to build the paymaster URL',\n )\n }\n return getPaymasterRpcUrl(projectId, this.config.chainId)\n }\n}\n"],"names":["createKernelAccountClient","createZeroDevPaymasterClient","estimateUserOperationFees","getBundlerRpcUrl","getPaymasterRpcUrl","isRelayerMode","BaseError","ContractFunctionRevertedError","encodeFunctionData","getContract","http","parseAbi","parseEventLogs","createBundlerClient","getUserOperationHash","ContractsError","ContractSimulationError","Instantiable","getInputsOfFunctionFormatted","getTransactionReceipt","getRandomBigInt","getChain","GAS_SANITY_THRESHOLD","GAS_FALLBACK_CAP","ZERODEV_NONCE_KEY_BITS","USEROP_RECEIPT_TIMEOUT_MS","capForBogusEstimate","estimatedGas","logger","warn","ContractBase","contractName","address","_zeroDevPaymaster","init","config","contractConfig","setInstanceConfig","contract","abi","client","public","publicClient","wallet","walletClient","call","functionName","args","from","readContract","account","err","txHash","hash","receipt","transactionHash","Error","getTransactionLogs","txReceipt","eventName","logs","strict","multicall","calls","params","type","debug","localAccountMulticall","progress","internalMulticallSmartAccount","simulateMulticall","localAccountSimulateMulticall","internalSimulateMulticallSmartAccount","simulate","localAccountSimulate","internalSimulateSmartAccount","send","localAccountSend","internalSendSmartAccount","getUserOperationReceipt","bundlerClient","chain","chainId","transport","getBundlerRPC","message","String","test","safeMessage","replace","txparams","stage","method","contractAddress","kernelClient","bundlerTransport","getPaymasterConfig","userOperation","estimateFeesPerGas","encodedCalls","map","push","to","value","data","userOpHash","nonce","getNonce","key","sendUserOperation","callData","encodeCalls","waitForUserOperationReceipt","timeout","assertUserOpSucceeded","revertError","walk","error","hashSuffix","cause","success","reason","name","functionInputs","gasLimit","simulateContract","preparedUserOp","preparedHash","prepareUserOperation","entryPointAddress","entryPoint","entryPointVersion","version","prepErr","undefined","signature","_contractAbi","_contractAddress","_contractName","request","resolvedGas","estimate","estimateContractGas","estErr","writeContract","gas","receipts","length","pop","results","simulateCalls","JSON","stringify","e","getOrCreatePaymaster","getPaymasterRPC","zerodevPaymaster","paymaster","getPaymasterData","sponsorUserOperation","projectId","zeroDevProjectId","useUltraRelay"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/contracts/ContractBase.ts"],"sourcesContent":["import { createKernelAccountClient, createZeroDevPaymasterClient } from '@zerodev/sdk'\nimport {\n estimateUserOperationFees,\n getBundlerRpcUrl,\n getPaymasterRpcUrl,\n isRelayerMode,\n} from '../nevermined/utils/BlockchainViemUtils.js'\nimport {\n Abi,\n Account,\n Address,\n BaseError,\n ContractFunctionRevertedError,\n encodeFunctionData,\n getContract,\n http,\n parseAbi,\n parseEventLogs,\n TransactionReceipt,\n} from 'viem'\nimport {\n createBundlerClient,\n getUserOperationHash,\n SmartAccount,\n UserOperationReceipt,\n} from 'viem/account-abstraction'\nimport { ContractsError, ContractSimulationError } from '../errors/index.js'\nimport { Instantiable, InstantiableConfig } from '../Instantiable.abstract.js'\nimport { TxParameters } from '../models/Transactions.js'\nimport { getInputsOfFunctionFormatted, getTransactionReceipt } from '../nevermined/index.js'\nimport { getRandomBigInt } from '../utils/helpers.js'\nimport { getChain } from '../utils/Network.js'\n\nexport interface MulticallEntry {\n contractName?: string\n contractAddress: Address\n abi: Abi\n functionName: string\n args: any[]\n}\n\n/**\n * When a testnet RPC (Base Sepolia) fails internally, some providers return\n * `eth_estimateGas` values equal to — or even above — the block gas limit\n * instead of a real error. Using that value causes the node to reject the tx\n * with `intrinsic gas too high` before it ever reaches the mempool.\n *\n * `writeContract` in viem re-estimates gas internally when `gas` isn't\n * already set on the request (viem's `simulateContract` only performs\n * `eth_call`, not `eth_estimateGas`). That means the naïve path has no\n * chance to intercept a bogus estimate. We run the estimation ourselves\n * here, sanity-check the result, and always pass an explicit gas value\n * into `writeContract` so it doesn't re-query the misbehaving RPC.\n */\nconst GAS_SANITY_THRESHOLD = 25_000_000n\nconst GAS_FALLBACK_CAP = 5_000_000n\n\n// EntryPoint v0.7: ZeroDev's `toKernelPluginManager` rejects `customNonceKey > maxUint16`.\n// 16 bits = 65 536 channels — collision probability for the SDK's expected concurrency\n// (k=2–5 parallel sends from one SCA) is negligible (< 0.02 %). High-fan-out callers\n// (k > 50) should consider a per-process monotonic counter instead. See issue #1579.\nconst ZERODEV_NONCE_KEY_BITS = 16\n\n// Client-side cap on `waitForUserOperationReceipt`. The userOp is already in the bundler\n// mempool when this fires — a client-side timeout does NOT cancel it. Callers that catch\n// the resulting `ContractsError` MUST poll `bundlerClient.getUserOperationReceipt(hash)`\n// before retrying; otherwise a retry can produce a duplicate on-chain op.\nconst USEROP_RECEIPT_TIMEOUT_MS = 90_000\n\nfunction capForBogusEstimate(\n estimatedGas: bigint,\n logger: { warn: (msg: string) => void },\n): bigint {\n if (estimatedGas < GAS_SANITY_THRESHOLD) return estimatedGas\n logger.warn(\n `Estimated gas (${estimatedGas}) exceeds sanity threshold ` +\n `(${GAS_SANITY_THRESHOLD}); overriding with ${GAS_FALLBACK_CAP} to bypass misbehaving RPC estimate.`,\n )\n return GAS_FALLBACK_CAP\n}\n\nexport interface SimulateMulticallEntry {\n functionName: string\n value?: bigint\n abi: Abi\n args: any[]\n to: Address\n}\n\nexport abstract class ContractBase extends Instantiable {\n public readonly contractName: string\n public contract: any\n public address: Address\n private _zeroDevPaymaster: ReturnType<typeof createZeroDevPaymasterClient> | null = null\n\n constructor(contractName: string, address: Address) {\n super()\n this.contractName = contractName\n this.address = address\n }\n\n protected async init(\n config: InstantiableConfig,\n contractConfig: { address: `0x${string}`; abi: Abi },\n ) {\n this.setInstanceConfig(config)\n this.address = contractConfig.address\n\n this.contract = getContract({\n address: contractConfig.address,\n abi: contractConfig.abi,\n client: { public: this.publicClient, wallet: this.walletClient },\n })\n }\n\n public async call<T>(functionName: string, args: any[], from?: string): Promise<T> {\n try {\n return (await this.client.public.readContract({\n address: this.address,\n abi: this.contract.abi,\n functionName: parseAbi([functionName]),\n args,\n ...(from && { account: from as `0x${string}` }),\n })) as T\n //return await this.contract[functionSignature](...args, { from })\n } catch (err) {\n throw new ContractsError(\n `Calling method \"${functionName}\" on contract \"${this.contractName}\" failed. Args: ${args} - ${err}`,\n )\n }\n }\n\n public async getTransactionReceipt(\n txHash: UserOperationReceipt | TransactionReceipt,\n ): Promise<TransactionReceipt> {\n // Get the transaction receipt depending on the type of txHash\n if ('transactionHash' in txHash) {\n // txHash is TransactionReceipt\n return txHash\n } else if ('userOpHash' in txHash) {\n // txHash is UserOperationReceipt, fetch the actual receipt using the utility function with retry logic\n const hash = txHash.receipt.transactionHash\n return await getTransactionReceipt({\n txHash: hash,\n publicClient: this.client.public,\n })\n } else {\n throw new Error('Unknown transaction type')\n }\n }\n\n public getTransactionLogs(\n txReceipt: TransactionReceipt | UserOperationReceipt,\n eventName?: string,\n ) {\n return parseEventLogs({\n abi: this.contract.abi,\n logs: txReceipt.logs,\n eventName,\n strict: false,\n }) as any[]\n }\n\n public async multicall(\n calls: MulticallEntry[],\n from: Account | SmartAccount,\n params: TxParameters = {},\n ) {\n if (from.type === 'local') {\n this.logger.debug(`Blockchain Multicall using Local account`)\n return await this.localAccountMulticall(calls, from, params, params.progress)\n } else if (from.type === 'json-rpc') {\n this.logger.debug(`Blockchain Multicall using JSON-RPC account`)\n return await this.localAccountMulticall(calls, from, params, params.progress)\n } else if (from.type === 'smart') {\n this.logger.debug(`Blockchain Multicall using ZeroDev account`)\n return await this.internalMulticallSmartAccount(calls, from, params, params.progress)\n } else {\n throw new ContractsError(`Account not supported`)\n }\n }\n\n public async simulateMulticall(\n calls: SimulateMulticallEntry[],\n from: Account | SmartAccount,\n params: TxParameters = {},\n ) {\n if (from.type === 'local') {\n this.logger.debug(`Simulating calls using Local account`)\n return await this.localAccountSimulateMulticall(calls, from, params)\n } else if (from.type === 'json-rpc') {\n this.logger.debug(`Simulating calls using JSON-RPC account`)\n return await this.localAccountSimulateMulticall(calls, from, params)\n } else if (from.type === 'smart') {\n this.logger.debug(`Simulating calls using Smart Account account`)\n return await this.internalSimulateMulticallSmartAccount(calls, from, params)\n } else {\n throw new ContractsError(`Account not supported`)\n }\n }\n\n public async simulate(\n functionName: string,\n from: Account | SmartAccount,\n args: any[],\n params: TxParameters = {},\n ) {\n if (from.type === 'local') {\n this.logger.debug(`Simulating calls using Local account`)\n return await this.localAccountSimulate(functionName, from, args, params)\n } else if (from.type === 'json-rpc') {\n this.logger.debug(`Simulating calls using JSON-RPC account`)\n return await this.localAccountSimulate(functionName, from, args, params)\n } else if (from.type === 'smart') {\n this.logger.debug(`Simulating calls using Smart Account account`)\n return await this.internalSimulateSmartAccount(functionName, from, args, params)\n } else {\n throw new ContractsError(`Account not supported`)\n }\n }\n\n public async send(\n functionName: string,\n from: Account | SmartAccount,\n args: any[],\n params: TxParameters = {},\n ): Promise<TransactionReceipt | UserOperationReceipt> {\n if (from.type === 'local') {\n this.logger.debug(\n `Blockchain Send using Local account with functionName: ${functionName} and following args: ${args}`,\n )\n return await this.localAccountSend(functionName, from, args, params, params.progress)\n } else if (from.type === 'json-rpc') {\n this.logger.debug(`Blockchain Send using JSON-RPC account to ${functionName}`)\n return await this.localAccountSend(functionName, from, args, params, params.progress)\n } else if (from.type === 'smart') {\n this.logger.debug(`Blockchain Send using ZeroDev account`)\n return await this.internalSendSmartAccount(functionName, from, args, params, params.progress)\n } else {\n throw new ContractsError(`Account not supported`)\n }\n }\n\n /**\n * Poll a previously-submitted UserOperation's receipt by hash WITHOUT\n * blocking. Returns the receipt once the bundler has mined it, or `null`\n * while it is still in the mempool / not yet known. A client-side\n * receipt-wait timeout does NOT cancel a submitted UserOp, so callers that\n * persist the hash (e.g. the onchain-mirror worker, nvm-monorepo#1508) use\n * this to confirm a prior submission instead of resubmitting a duplicate.\n */\n public async getUserOperationReceipt(hash: `0x${string}`): Promise<UserOperationReceipt | null> {\n try {\n const bundlerClient = createBundlerClient({\n chain: getChain(this.config.chainId),\n transport: http(this.getBundlerRPC()),\n client: this.client.public,\n })\n return (await bundlerClient.getUserOperationReceipt({ hash })) ?? null\n } catch (err) {\n // A genuinely-absent receipt (UserOp still in the mempool) is expected\n // and benign — some bundlers signal it by throwing rather than returning\n // null. Anything else (RPC/transport/config fault) must NOT masquerade as\n // \"still pending\": surface it at `warn` so a bundler outage is visible\n // instead of silently driving the caller's grace-window logic. Either\n // way we return null so the caller re-polls rather than consuming a retry.\n const message = err instanceof Error ? err.message : String(err)\n if (/not[\\s_]?found|UserOperationReceiptNotFound/i.test(message)) {\n this.logger.debug(`getUserOperationReceipt(${hash}): not yet mined`)\n } else {\n // Redact URLs before logging: the bundler RPC URL embeds the ZeroDev\n // project id, which should not leak into logs.\n const safeMessage = message.replace(/https?:\\/\\/[^\\s'\")]+/gi, '<redacted-url>')\n this.logger.warn(\n `getUserOperationReceipt(${hash}) lookup error (treating as not-yet-mined): ${safeMessage}`,\n )\n }\n return null\n }\n }\n\n /**\n * Batched sibling of {@link internalSendSmartAccount}. It submits a UserOp\n * from the same sender by the same route, so the one-deploying-UserOp-per-\n * sender constraint documented there applies here identically — see that\n * docblock before assuming a batched send is exempt (#2702).\n */\n private async internalMulticallSmartAccount(\n calls: MulticallEntry[],\n from: SmartAccount,\n txparams: any,\n progress: ((data: any) => void) | undefined,\n ) {\n if (progress) {\n progress({\n stage: 'multicall-sending',\n args: [],\n method: '',\n from: from,\n contractAddress: this.address,\n })\n }\n\n const kernelClient = createKernelAccountClient({\n account: from,\n chain: getChain(this.config.chainId),\n bundlerTransport: http(this.getBundlerRPC()),\n client: this.client.public,\n ...this.getPaymasterConfig(),\n userOperation: {\n estimateFeesPerGas: async ({ bundlerClient }) => {\n return estimateUserOperationFees(bundlerClient, this.client.public)\n },\n },\n })\n\n const encodedCalls: any[] = []\n calls.map((call) => {\n encodedCalls.push({\n to: call.contractAddress || this.address,\n value: txparams.value || 0n,\n data: encodeFunctionData({\n abi: call.abi,\n functionName: call.functionName,\n args: call.args,\n }),\n })\n })\n\n let userOpHash: `0x${string}` | undefined\n try {\n // Random nonce key per send so concurrent userOps from the same SCA\n // hit distinct EntryPoint nonce channels instead of colliding on the\n // default `customNonceKey=0n`. See issue #1579.\n const nonce = await from.getNonce({ key: getRandomBigInt(ZERODEV_NONCE_KEY_BITS) })\n userOpHash = await kernelClient.sendUserOperation({\n callData: await kernelClient.account.encodeCalls(encodedCalls),\n nonce,\n })\n\n if (progress) {\n progress({\n stage: 'multicall-sent',\n args: [],\n method: '',\n from: from,\n contractAddress: this.address,\n })\n }\n\n // Wait for the transaction to be mined\n this.logger.debug(`Waiting for transaction to be mined... ${userOpHash}`)\n const txReceipt = await kernelClient.waitForUserOperationReceipt({\n hash: userOpHash,\n timeout: USEROP_RECEIPT_TIMEOUT_MS,\n })\n this.logger.debug(`Transaction mined - UserOperationHash: ${userOpHash}`)\n this.logger.debug(\n `Transaction receipt - TransactionHash: ${txReceipt.receipt.transactionHash}`,\n )\n this.assertUserOpSucceeded(txReceipt, 'multicall', userOpHash)\n return txReceipt.receipt\n } catch (err) {\n if (err instanceof BaseError) {\n const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError)\n this.logger.error(`revertError: ${String(revertError)}`)\n }\n // Surface userOpHash so callers can poll for eventual inclusion before\n // retrying — a client-side receipt-wait timeout does NOT cancel the userOp.\n const hashSuffix = userOpHash ? ` userOpHash=${userOpHash}` : ''\n throw new ContractsError(`Multicall failed:${hashSuffix} ${err}`, { cause: err })\n }\n }\n\n private assertUserOpSucceeded(\n txReceipt: UserOperationReceipt,\n method: string,\n userOpHash: string,\n ): void {\n if (txReceipt.success) return\n throw new ContractsError(\n `UserOp inner call reverted for \"${method}\" on \"${this.contractName}\". ` +\n `userOpHash=${userOpHash} txHash=${txReceipt.receipt.transactionHash} ` +\n `reason=${txReceipt.reason ?? 'unknown'}`,\n )\n }\n\n /**\n * Submit one contract call as an ERC-4337 UserOperation from a smart account.\n *\n * ## Concurrency: the nonce channel is handled here, the DEPLOYMENT is not\n *\n * The random `customNonceKey` below (#1579) puts concurrent UserOps from one\n * SCA on distinct EntryPoint nonce channels instead of colliding on the\n * default `key=0n`. That covers the nonce channel and nothing else.\n *\n * A bundler's mempool separately permits at most **one UserOperation carrying\n * deployment data per sender**. While the SCA has no code on-chain, viem\n * attaches `factory`/`factoryData` to every send: `getFactoryArgs()` skips\n * them only once `isDeployed()` has observed code\n * (`viem/account-abstraction/accounts/toSmartAccount`), and that latches\n * AFTER the fact — so two concurrent first-sends both attach deployment data\n * and the second is a conflicting deployment. No nonce key can defeat this;\n * it is a rule about the sender, not about the nonce.\n *\n * ## The symptom differs between production and the local stack\n *\n * - **Production** (non-zero gas fees): the bundler's \"replace only on a\n * >=10% higher fee\" gate is live, so the second op is REJECTED with\n * `AA10 sender already constructed, bump the gas price by minimum 10%`.\n * - **Local fork stack** (relayer mode zeroes gas fees): that gate degenerates\n * to `0 >= 0` -> true, so alto silently DROPS the FIRST op rather than\n * rejecting the second. It surfaces as a ~90s `waitForUserOperationReceipt`\n * timeout with a `userOpReplaced` / `\"reason\":\"Higher gas fees\"` event in\n * the bundler log — i.e. wearing the exact costume of the #1579 nonce\n * collision. Don't chase the nonce key when debugging that locally, and\n * don't expect an e2e here to reproduce the production failure. #2701 had\n * to deploy the SCA up front so its test measures the nonce channel alone.\n *\n * ## If you need concurrent FIRST sends from one SCA\n *\n * Ensure the account is deployed before fanning out — one awaited send, then\n * the rest. **Do not add an in-process lock here**: it would be an incomplete\n * fix that reads as a complete one. It cannot span processes (the API that\n * consumes this SDK runs 2-5 replicas in production), and it would not cover\n * senders that bypass this class entirely — e.g. `WalletMigrationService`'s\n * stablecoin sweep (apps/api) calls `kernelClient.sendUserOperation` directly.\n *\n * Where serialization belongs (core-kit vs. callers vs. a shared lock) is an\n * open decision: see #2702, and #2166 for the Postgres advisory lock that\n * would be the cross-replica mechanism.\n */\n private async internalSendSmartAccount(\n name: string,\n from: SmartAccount,\n args: any[],\n txparams: any,\n progress: ((data: any) => void) | undefined,\n ): Promise<UserOperationReceipt> {\n const functionInputs = getInputsOfFunctionFormatted(this.contract.abi, name, args)\n\n const { gasLimit, value } = txparams\n if (progress) {\n progress({\n stage: 'sending',\n args: functionInputs,\n method: name,\n from: from,\n value,\n contractName: this.contractName,\n contractAddress: this.address,\n gasLimit,\n })\n }\n\n try {\n await this.client.public.simulateContract({\n address: this.address,\n abi: this.contract.abi,\n functionName: name,\n args,\n account: from,\n ...(txparams.value && { value: txparams.value }),\n })\n } catch (err) {\n if (err instanceof BaseError) {\n const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError)\n this.logger.error(`revertError: ${String(revertError)}`)\n }\n throw new ContractsError(\n `Calling method \"${name}\" on contract \"${this.contractName}\" failed. Args: ${args} - ${err}`,\n // #2163/#2164/#2478: keep the viem error reachable. Without it the API\n // can only see this message string, so a client mistake and a server\n // fault look identical and both become a 500.\n { cause: err },\n )\n }\n\n const kernelClient = createKernelAccountClient({\n account: from,\n chain: getChain(this.config.chainId),\n bundlerTransport: http(this.getBundlerRPC()),\n client: this.client.public,\n ...this.getPaymasterConfig(),\n userOperation: {\n estimateFeesPerGas: async ({ bundlerClient }) => {\n return estimateUserOperationFees(bundlerClient, this.client.public)\n },\n },\n })\n const data = encodeFunctionData({ abi: this.contract.abi, functionName: name, args })\n\n let userOpHash\n try {\n // Random nonce key per send so concurrent userOps from the same SCA\n // hit distinct EntryPoint nonce channels instead of colliding on the\n // default `customNonceKey=0n`. See issue #1579.\n const nonce = await from.getNonce({ key: getRandomBigInt(ZERODEV_NONCE_KEY_BITS) })\n const callData = await kernelClient.account.encodeCalls([\n {\n to: this.address,\n value: txparams.value || 0n,\n data,\n },\n ])\n\n // When a caller supplies a `progress` callback it may need the UserOp\n // hash BEFORE the send completes — the onchain-mirror worker races the\n // send against a per-tick deadline and must persist the hash even if the\n // send is cut off mid-flight, otherwise it resubmits and double-burns\n // (#1508/#1904). So prepare the UserOp here, surface its hash via\n // `progress({stage:'prepared'})`, and send that exact prepared op so the\n // bundler-returned hash matches. Best-effort and GATED ON `progress`:\n // any failure falls back to the normal send, and callers that pass no\n // progress callback keep the original send path byte-for-byte.\n let preparedUserOp: Awaited<ReturnType<typeof kernelClient.prepareUserOperation>> | undefined\n let preparedHash: `0x${string}` | undefined\n if (progress) {\n try {\n preparedUserOp = await kernelClient.prepareUserOperation({ callData, nonce })\n preparedHash = getUserOperationHash({\n chainId: this.config.chainId,\n entryPointAddress: from.entryPoint.address,\n entryPointVersion: from.entryPoint.version,\n userOperation: preparedUserOp,\n })\n progress({\n stage: 'prepared',\n args: functionInputs,\n userOpHash: preparedHash,\n method: name,\n from: from,\n value,\n contractName: this.contractName,\n contractAddress: this.address,\n gasLimit,\n })\n } catch (prepErr) {\n this.logger.warn(\n `prepareUserOperation (pre-send hash) failed for \"${name}\"; ` +\n `sending without an early hash: ${prepErr}`,\n )\n preparedUserOp = undefined\n preparedHash = undefined\n }\n }\n\n userOpHash = await kernelClient.sendUserOperation(\n // Re-send the exact prepared op (stripping the estimation stub\n // signature so the kernel re-signs) so the bundler hash matches the one\n // emitted above. Falls back to the original {callData, nonce} path\n // (which prepares internally) when no early hash was prepared.\n preparedUserOp\n ? ({ ...preparedUserOp, signature: undefined } as Parameters<\n typeof kernelClient.sendUserOperation\n >[0])\n : { callData, nonce },\n )\n\n // Determinism guard: the 'prepared' hash should equal the bundler's. If a\n // paymaster re-request changed the op it won't — a caller that persisted\n // the 'prepared' hash then just fails to find it and reconciles safely\n // (never a double-burn), but we log so we can see whether the early-hash\n // path is actually holding in practice.\n if (preparedHash && userOpHash !== preparedHash) {\n this.logger.warn(\n `UserOp 'prepared' hash ${preparedHash} != sent hash ${userOpHash} for \"${name}\"; ` +\n `early-hash callers will reconcile via receipt-not-found`,\n )\n }\n } catch (err) {\n if (err instanceof BaseError) {\n const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError)\n this.logger.error(`revertError: ${String(revertError)}`)\n }\n throw new ContractsError(\n `Calling method \"${name}\" on contract \"${this.contractName}\" failed. Args: ${args} - ${err}`,\n // #2163/#2164/#2478: keep the viem error reachable. Without it the API\n // can only see this message string, so a client mistake and a server\n // fault look identical and both become a 500.\n { cause: err },\n )\n }\n\n if (progress) {\n progress({\n stage: 'sent',\n args: functionInputs,\n userOpHash,\n method: name,\n from: from,\n value,\n contractName: this.contractName,\n contractAddress: this.address,\n gasLimit,\n })\n }\n\n let txReceipt: UserOperationReceipt\n try {\n txReceipt = await kernelClient.waitForUserOperationReceipt({\n hash: userOpHash,\n timeout: USEROP_RECEIPT_TIMEOUT_MS,\n })\n } catch (err) {\n // The userOp is already in the bundler mempool — a client-side timeout\n // does NOT cancel it. Surface userOpHash so callers can poll for eventual\n // inclusion before retrying, otherwise a retry can produce a duplicate\n // on-chain op. Wrap symmetric to `internalMulticallSmartAccount`.\n throw new ContractsError(\n `Calling method \"${name}\" on contract \"${this.contractName}\" timed out ` +\n `waiting for UserOp receipt. userOpHash=${userOpHash} — confirm on-chain ` +\n `inclusion before retrying. Underlying: ${err}`,\n )\n }\n\n this.assertUserOpSucceeded(txReceipt, name, userOpHash)\n\n if (progress) {\n progress({\n stage: 'receipt',\n args: functionInputs,\n txReceipt,\n method: name,\n from: from,\n value,\n contractName: this.contractName,\n contractAddress: this.address,\n gasLimit,\n })\n }\n\n return txReceipt\n }\n\n private async internalSimulateSmartAccount(\n name: string,\n from: SmartAccount,\n args: any[],\n txparams: any,\n ) {\n try {\n await this.client.public.simulateContract({\n address: this.address,\n abi: this.contract.abi,\n functionName: name,\n args,\n account: from.address,\n ...(txparams.value && { value: txparams.value }),\n })\n return true\n } catch (err) {\n throw new ContractSimulationError(\n `Error Simulating contract call \"${name}\" on contract \"${this.contractName}\" failed. Args: ${args} - ${err}`,\n )\n }\n }\n\n private async localAccountSimulate(\n name: string,\n from: Account | `0x${string}`,\n args: any[],\n txparams: any,\n ) {\n try {\n await this.client.public.simulateContract({\n address: this.address,\n abi: this.contract.abi,\n functionName: name,\n args,\n account: from,\n ...(txparams.value && { value: txparams.value }),\n })\n } catch (err) {\n throw new ContractSimulationError(\n `Error Simulating contract call \"${name}\" on contract \"${this.contractName}\" failed. Args: ${args} - ${err}`,\n )\n }\n return true\n }\n\n private async localAccountSend(\n name: string,\n from: Account | `0x${string}`,\n args: any[],\n txparams: any,\n progress: ((data: any) => void) | undefined,\n _contractAbi?: Abi,\n _contractAddress?: Address,\n _contractName?: string,\n ) {\n const abi = _contractAbi || this.contract.abi\n const contractAddress = _contractAddress || this.address\n const contractName = _contractName || this.contractName\n\n const functionInputs = getInputsOfFunctionFormatted(abi, name, args)\n // Uncomment to debug contract calls\n // if (name === 'order') {\n // const functionSignature = getSignatureOfFunction(this.contract.abi, name, args)\n // this.logger.info(`Making contract call ....: ${name} - ${from}`)\n // this.logger.info(`With args: `, JSON.stringify(args, jsonReplacer))\n // this.logger.info(`And signature: ${JSON.stringify(functionSignature, jsonReplacer)}`)\n // this.logger.info('And amount: ', txparams.value)\n // }\n // abi.filter(({name, inputs}) => name === 'closeSignals' && inputs.length === 1)\n // const abiFilter = this.contract.abi.filter((abi) => abi.name === name && abi.inputs.length === args.length)\n // const abiFilter = this.contract.abi.filter((abi) => abi.name === name && abi.type === 'function')\n // console.debug('abi', this.contract.abi.filter((abi) => abi.name === name))\n // console.debug('abiFilter', abiFilter)\n // if (!abiFilter)\n // throw new ContractsError(\n // `No ABI found for method \"${name}\" with ${args.length} arguments on contract \"${this.contractName}\"`,\n // )\n\n const { gasLimit, value } = txparams\n // make the call\n if (progress) {\n progress({\n stage: 'sending',\n args: functionInputs,\n method: name,\n from,\n value,\n contractName,\n contractAddress,\n gasLimit,\n })\n }\n\n let txHash: `0x${string}` | undefined\n try {\n const { request } = await this.client.public.simulateContract({\n address: contractAddress,\n abi,\n functionName: name,\n args,\n account: from,\n ...(txparams.value && { value: txparams.value }),\n })\n\n // Resolve gas ourselves so `writeContract` never falls back to its own\n // `eth_estimateGas`. An explicit caller `gasLimit` always wins; otherwise\n // we estimate, apply the block-limit sanity check, and pin the result.\n // If estimation itself fails we still honour any explicit cap.\n let resolvedGas: bigint | undefined = gasLimit\n if (resolvedGas === undefined) {\n try {\n const estimate = await this.client.public.estimateContractGas({\n address: contractAddress,\n abi,\n functionName: name,\n args,\n account: from,\n ...(txparams.value && { value: txparams.value }),\n })\n resolvedGas = capForBogusEstimate(estimate, this.logger)\n } catch (estErr) {\n this.logger.warn(\n `estimateContractGas for \"${name}\" on \"${contractName}\" failed (${estErr}); ` +\n `falling back to ${GAS_FALLBACK_CAP} to avoid a bogus RPC re-estimate in writeContract.`,\n )\n resolvedGas = GAS_FALLBACK_CAP\n }\n }\n\n txHash = await this.client.wallet.writeContract({\n ...request,\n account: from,\n gas: resolvedGas,\n })\n } catch (err) {\n if (err instanceof BaseError) {\n const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError)\n this.logger.error(`revertError: ${String(revertError)}`)\n }\n throw new ContractsError(\n `Calling method \"${name}\" on contract \"${contractName}\" failed. Args: ${args} - ${err}`,\n { cause: err },\n )\n }\n\n if (progress) {\n progress({\n stage: 'sent',\n args: functionInputs,\n txHash,\n method: name,\n from,\n value,\n contractName,\n contractAddress,\n gasLimit,\n })\n }\n const txReceipt = getTransactionReceipt({ txHash, publicClient: this.client.public })\n\n if (progress) {\n progress({\n stage: 'receipt',\n args: functionInputs,\n txReceipt,\n method: name,\n from,\n value,\n contractName,\n contractAddress,\n gasLimit,\n })\n }\n\n return txReceipt\n }\n\n private async localAccountMulticall(\n calls: MulticallEntry[],\n from: Account,\n txparams: any,\n progress: ((data: any) => void) | undefined,\n ): Promise<TransactionReceipt> {\n const receipts: TransactionReceipt[] = []\n for (const call of calls) {\n receipts.push(\n await this.localAccountSend(\n call.functionName,\n from,\n call.args,\n txparams,\n progress,\n call.abi,\n call.contractAddress,\n call.contractName,\n ),\n )\n }\n if (receipts.length > 0) return receipts.pop() as TransactionReceipt\n else throw new ContractsError(`No receipts found for multicall`)\n }\n\n private async localAccountSimulateMulticall(\n calls: SimulateMulticallEntry[],\n from: Account,\n txparams: any,\n ) {\n try {\n const { results } = await this.client.public.simulateCalls({\n calls,\n account: from,\n })\n this.logger.debug(`Simulated multicall - ${results}`)\n return true\n } catch (err) {\n if (err instanceof BaseError) {\n const revertError = err.walk((err) => err instanceof ContractFunctionRevertedError)\n this.logger.error(`revertError: ${String(revertError)}`)\n }\n throw new ContractsError(`Error simulating multicall - ${err}`, { cause: err })\n }\n }\n\n private async internalSimulateMulticallSmartAccount(\n calls: SimulateMulticallEntry[],\n from: SmartAccount,\n txparams: any,\n ) {\n try {\n const kernelClient = createKernelAccountClient({\n account: from,\n chain: getChain(this.config.chainId),\n bundlerTransport: http(this.getBundlerRPC()),\n client: this.client.public,\n ...this.getPaymasterConfig(),\n userOperation: {\n estimateFeesPerGas: async ({ bundlerClient }) => {\n return estimateUserOperationFees(bundlerClient, this.client.public)\n },\n },\n })\n\n const encodedCalls = []\n for (const call of calls) {\n encodedCalls.push({\n to: call.to,\n value: call.value || 0n,\n data: encodeFunctionData({\n abi: call.abi,\n functionName: call.functionName,\n args: call.args,\n }),\n })\n }\n\n // DONT DELETE THE COMMENTED LINES - ARE NECESSARY FOR F***ING ZERODEV DEBUGGING\n\n // this.logger.info(`Encoded multicall - ${JSON.stringify(encodedCalls, jsonReplacer)}`)\n // const code = await this.client.public.getCode({ address: from.address })\n // const isDeployed = code !== undefined && code !== '0x'\n // this.logger.info(`++++++ Smart account ${from.address} deployment status: ${isDeployed ? 'DEPLOYED' : 'NOT DEPLOYED'}`)\n\n // // Log account details\n // this.logger.info(`Account type: ${from.type}`)\n // this.logger.info(`Account address: ${from.address}`)\n\n // // Log the calls being made\n // this.logger.info(`Number of calls: ${encodedCalls.length}`)\n // encodedCalls.forEach((call, index) => {\n // this.logger.info(`Call ${index}: to=${call.to}, value=${call.value}, data=${call.data.slice(0, 10)}...`)\n // })\n\n await kernelClient.prepareUserOperation({\n callData: await kernelClient.account.encodeCalls(encodedCalls),\n })\n\n return true\n } catch (err) {\n this.logger.error(`Error details: ${JSON.stringify(err, null, 2)}`)\n if (err instanceof BaseError) {\n const revertError = err.walk((e) => e instanceof ContractFunctionRevertedError)\n if (revertError) {\n this.logger.error(`Revert error: ${String(revertError)}`)\n }\n }\n throw new ContractSimulationError(`Error Simulating Multicalls - ${err}`)\n }\n }\n\n private getOrCreatePaymaster() {\n if (!this._zeroDevPaymaster) {\n this._zeroDevPaymaster = createZeroDevPaymasterClient({\n chain: getChain(this.config.chainId),\n transport: http(this.getPaymasterRPC()),\n })\n }\n return this._zeroDevPaymaster\n }\n\n /**\n * Builds the `paymaster` partial for `createKernelAccountClient`. In relayer\n * mode (e.g. local `ultra-relay` for tests) returns an empty object so the\n * kernel client submits UserOps without paymaster fields and the bundler\n * pays gas via its executor key. In production returns the ZeroDev paymaster\n * sponsorship callback.\n */\n private getPaymasterConfig() {\n if (isRelayerMode()) return {}\n const zerodevPaymaster = this.getOrCreatePaymaster()\n return {\n paymaster: {\n getPaymasterData: (userOperation: any) =>\n zerodevPaymaster.sponsorUserOperation({ userOperation }),\n },\n }\n }\n\n protected getBundlerRPC(): string {\n // In relayer mode `getBundlerRpcUrl` reads `BUNDLER_RPC_URL_OVERRIDE`\n // and never touches the project id, so an empty value is harmless. In\n // production callers must pass a project id — surface a clear error if\n // the SDK was instantiated without one and we need it.\n const projectId = this.config.zeroDevProjectId\n if (!projectId && !isRelayerMode()) {\n throw new ContractsError(\n 'getBundlerRPC: zeroDevProjectId is required for non-relayer (production) mode',\n )\n }\n return getBundlerRpcUrl(projectId ?? '', this.config.chainId, this.config.useUltraRelay)\n }\n\n private getPaymasterRPC(): string {\n // Only ever consulted when `getPaymasterConfig` decides to attach a\n // paymaster, which is gated on `!isRelayerMode()`. A missing project\n // id at this point is a configuration bug worth surfacing.\n const projectId = this.config.zeroDevProjectId\n if (!projectId) {\n throw new ContractsError(\n 'getPaymasterRPC: zeroDevProjectId is required to build the paymaster URL',\n )\n }\n return getPaymasterRpcUrl(projectId, this.config.chainId)\n }\n}\n"],"names":["createKernelAccountClient","createZeroDevPaymasterClient","estimateUserOperationFees","getBundlerRpcUrl","getPaymasterRpcUrl","isRelayerMode","BaseError","ContractFunctionRevertedError","encodeFunctionData","getContract","http","parseAbi","parseEventLogs","createBundlerClient","getUserOperationHash","ContractsError","ContractSimulationError","Instantiable","getInputsOfFunctionFormatted","getTransactionReceipt","getRandomBigInt","getChain","GAS_SANITY_THRESHOLD","GAS_FALLBACK_CAP","ZERODEV_NONCE_KEY_BITS","USEROP_RECEIPT_TIMEOUT_MS","capForBogusEstimate","estimatedGas","logger","warn","ContractBase","contractName","address","_zeroDevPaymaster","init","config","contractConfig","setInstanceConfig","contract","abi","client","public","publicClient","wallet","walletClient","call","functionName","args","from","readContract","account","err","txHash","hash","receipt","transactionHash","Error","getTransactionLogs","txReceipt","eventName","logs","strict","multicall","calls","params","type","debug","localAccountMulticall","progress","internalMulticallSmartAccount","simulateMulticall","localAccountSimulateMulticall","internalSimulateMulticallSmartAccount","simulate","localAccountSimulate","internalSimulateSmartAccount","send","localAccountSend","internalSendSmartAccount","getUserOperationReceipt","bundlerClient","chain","chainId","transport","getBundlerRPC","message","String","test","safeMessage","replace","txparams","stage","method","contractAddress","kernelClient","bundlerTransport","getPaymasterConfig","userOperation","estimateFeesPerGas","encodedCalls","map","push","to","value","data","userOpHash","nonce","getNonce","key","sendUserOperation","callData","encodeCalls","waitForUserOperationReceipt","timeout","assertUserOpSucceeded","revertError","walk","error","hashSuffix","cause","success","reason","name","functionInputs","gasLimit","simulateContract","preparedUserOp","preparedHash","prepareUserOperation","entryPointAddress","entryPoint","entryPointVersion","version","prepErr","undefined","signature","_contractAbi","_contractAddress","_contractName","request","resolvedGas","estimate","estimateContractGas","estErr","writeContract","gas","receipts","length","pop","results","simulateCalls","JSON","stringify","e","getOrCreatePaymaster","getPaymasterRPC","zerodevPaymaster","paymaster","getPaymasterData","sponsorUserOperation","projectId","zeroDevProjectId","useUltraRelay"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,4 +5,5 @@ export * from './nevermined/Nevermined.js';
5
5
  export * from './errors/index.js';
6
6
  export * from './Instantiable.abstract.js';
7
7
  export * from './utils/index.js';
8
+ export { payAsYouGoTemplateAddress } from './artifacts/generated.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAG1C,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAG1C,cAAc,kBAAkB,CAAA;AAIhC,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA"}
package/dist/index.js CHANGED
@@ -6,5 +6,8 @@ export * from './errors/index.js';
6
6
  export * from './Instantiable.abstract.js';
7
7
  // Utils
8
8
  export * from './utils/index.js';
9
+ // Selected deployment address constants (from generated artifacts) that
10
+ // consumers need for template classification without a Nevermined instance.
11
+ export { payAsYouGoTemplateAddress } from './artifacts/generated.js';
9
12
 
10
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './contracts/index.js'\nexport * from './models/index.js'\nexport * from './nevermined/index.js'\nexport * from './nevermined/Nevermined.js'\nexport * from './errors/index.js'\nexport * from './Instantiable.abstract.js'\n\n// Utils\nexport * from './utils/index.js'\n"],"names":[],"mappings":"AAAA,cAAc,uBAAsB;AACpC,cAAc,oBAAmB;AACjC,cAAc,wBAAuB;AACrC,cAAc,6BAA4B;AAC1C,cAAc,oBAAmB;AACjC,cAAc,6BAA4B;AAE1C,QAAQ;AACR,cAAc,mBAAkB"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './contracts/index.js'\nexport * from './models/index.js'\nexport * from './nevermined/index.js'\nexport * from './nevermined/Nevermined.js'\nexport * from './errors/index.js'\nexport * from './Instantiable.abstract.js'\n\n// Utils\nexport * from './utils/index.js'\n\n// Selected deployment address constants (from generated artifacts) that\n// consumers need for template classification without a Nevermined instance.\nexport { payAsYouGoTemplateAddress } from './artifacts/generated.js'\n"],"names":["payAsYouGoTemplateAddress"],"mappings":"AAAA,cAAc,uBAAsB;AACpC,cAAc,oBAAmB;AACjC,cAAc,wBAAuB;AACrC,cAAc,6BAA4B;AAC1C,cAAc,oBAAmB;AACjC,cAAc,6BAA4B;AAE1C,QAAQ;AACR,cAAc,mBAAkB;AAEhC,wEAAwE;AACxE,4EAA4E;AAC5E,SAASA,yBAAyB,QAAQ,2BAA0B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nevermined-io/core-kit",
3
- "version": "1.17.0",
3
+ "version": "1.18.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",