Describe the bug
When using Skandha v2-2.2.5 to run an ERC-4337 bundler on Arbitrum Sepolia (a high-block-speed chain), the following issue occurs:
-
When Skandha receives a userOp, it is supposed to attempt bundling the userOp on-chain during bundleInterval using eth_sendRawTransaction. After obtaining the transaction hash, Skandha sets the userOp status to MempoolEntryStatus.Submitted.
Reference: BundlingService classic.ts
-
However, when a client queries the userOp using eth_getUserOperationByHash, the transaction hash often cannot be found on-chain, causing an error.
Reference: eth.ts module
Theoretically, in step 1, the transaction hash has already been marked as Submitted after bundling. However, in step 2, querying the userOp by this transaction hash often fails to locate the corresponding on-chain transaction.
The logs display TransactionNotFoundError, and Skandha returns "Unexpected behaviour":
2025-08-20 10:55:03.848 [02:55:03.797] INFO (1): REQUEST ::
2025-08-20 10:55:03.849 reqId: "req-f"
2025-08-20 10:55:03.849 method: "POST"
2025-08-20 10:55:03.849 url: "/rpc"
2025-08-20 10:55:03.849 body: {
2025-08-20 10:55:03.849 "jsonrpc": "2.0",
2025-08-20 10:55:03.849 "id": 0,
2025-08-20 10:55:03.849 "method": "eth_sendUserOperation",
2025-08-20 10:55:03.849 "params": [
2025-08-20 10:55:03.849 {
2025-08-20 10:55:03.849 "sender": "0x94712300dc84B2aaf56B3Ae2a16f51999833fABf",
2025-08-20 10:55:03.849 "nonce": "0x12",
2025-08-20 10:55:03.849 "callData": "...",
2025-08-20 10:55:03.849 "callGasLimit": "0xfc03",
2025-08-20 10:55:03.849 "verificationGasLimit": "0x16156",
2025-08-20 10:55:03.849 "preVerificationGas": "0xaba4",
2025-08-20 10:55:03.849 "maxFeePerGas": "0x8954400",
2025-08-20 10:55:03.849 "maxPriorityFeePerGas": "0x0",
2025-08-20 10:55:03.849 "signature": "..."
2025-08-20 10:55:03.849 },
2025-08-20 10:55:03.849 "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
2025-08-20 10:55:03.849 ]
2025-08-20 10:55:03.849 }
2025-08-20 10:55:03.850 [02:55:03.799] DEBUG (1): Validating user op before sending to mempool...
2025-08-20 10:55:04.972 [02:55:04.958] DEBUG (1): Opcode validation successful. Trying saving in mempool...
2025-08-20 10:55:04.972 [02:55:04.964] DEBUG (1): Mempool: User op added
2025-08-20 10:55:04.972 [02:55:04.966] DEBUG (1): Saved in mempool
2025-08-20 10:55:04.972 [02:55:04.967] INFO (1): RESPONSE ::
2025-08-20 10:55:04.972 reqId: "req-f"
2025-08-20 10:55:04.972 body: {
2025-08-20 10:55:04.972 "jsonrpc": "2.0",
2025-08-20 10:55:04.972 "id": 0,
2025-08-20 10:55:04.972 "result": "0x793743d33a5993956a1250a52dbd3c2975162d72d49457b59c403515c9cfd997"
2025-08-20 10:55:04.972 }
2025-08-20 10:55:07.025 [02:55:06.386] DEBUG (1): Found some entries, trying to create a bundle
2025-08-20 10:55:07.026 [02:55:06.656] DEBUG (1): Sent new bundle to Skandha relayer...
2025-08-20 10:55:07.026 [02:55:06.906] DEBUG (1): Relayers are busy
2025-08-20 10:55:07.154 [02:55:07.142] DEBUG (1): Trying to submit userops: 0x793743d33a5993956a1250a52dbd3c2975162d72d49457b59c403515c9cfd997
2025-08-20 10:55:07.415 [02:55:07.399] DEBUG (1):
2025-08-20 10:55:07.415 method: "eth_sendRawTransaction"
2025-08-20 10:55:07.415 to: "0x0000000071727De22E5E9d8BAf0edAc6f37da032"
2025-08-20 10:55:07.415 data: "..."
2025-08-20 10:55:07.415 maxPriorityFeePerGas: 0
2025-08-20 10:55:07.415 maxFeePerGas: 144000000
2025-08-20 10:55:07.415 type: "eip1559"
2025-08-20 10:55:07.415 gas: 614464
2025-08-20 10:55:07.415 nonce: 114
2025-08-20 10:55:07.415 params: [
2025-08-20 10:55:07.415 "..."
2025-08-20 10:55:07.415 ]
2025-08-20 10:55:07.932 [02:55:07.896] DEBUG (1): Sent new bundle 0xb49cad0ad745d3643eee48672683fae78b8a6df99cbc59040cbe25398417bc4d
2025-08-20 10:55:07.936 [02:55:07.896] DEBUG (1): Bundle submitted: 0xb49cad0ad745d3643eee48672683fae78b8a6df99cbc59040cbe25398417bc4d
2025-08-20 10:55:07.936 [02:55:07.896] DEBUG (1): User op hashes 0x793743d33a5993956a1250a52dbd3c2975162d72d49457b59c403515c9cfd997
2025-08-20 10:55:07.936 [02:55:07.906] DEBUG (1): Relayers are busy
2025-08-20 10:55:08.446 [02:55:08.277] INFO (1): REQUEST ::
2025-08-20 10:55:08.446 reqId: "req-g"
2025-08-20 10:55:08.447 method: "POST"
2025-08-20 10:55:08.447 url: "/rpc"
2025-08-20 10:55:08.447 body: {
2025-08-20 10:55:08.447 "jsonrpc": "2.0",
2025-08-20 10:55:08.447 "id": 0,
2025-08-20 10:55:08.447 "method": "eth_getUserOperationByHash",
2025-08-20 10:55:08.447 "params": [
2025-08-20 10:55:08.447 "0x793743d33a5993956a1250a52dbd3c2975162d72d49457b59c403515c9cfd997"
2025-08-20 10:55:08.447 ]
2025-08-20 10:55:08.447 }
2025-08-20 10:55:08.580 [02:55:08.515] ERROR (1): Transaction with hash "0xb49cad0ad745d3643eee48672683fae78b8a6df99cbc59040cbe25398417bc4d" could not be found.
2025-08-20 10:55:08.580 Version: viem@2.27.0
2025-08-20 10:55:08.580 err: {
2025-08-20 10:55:08.580 "type": "TransactionNotFoundError",
2025-08-20 10:55:08.580 "message": "Transaction with hash \"0xb49cad0ad745d3643eee48672683fae78b8a6df99cbc59040cbe25398417bc4d\" could not be found.\n\nVersion: viem@2.27.0",
2025-08-20 10:55:08.580 "stack":
2025-08-20 10:55:08.580 TransactionNotFoundError: Transaction with hash "0xb49cad0ad745d3643eee48672683fae78b8a6df99cbc59040cbe25398417bc4d" could not be found.
2025-08-20 10:55:08.580
2025-08-20 10:55:08.580 Version: viem@2.27.0
2025-08-20 10:55:08.580 at getTransaction (file:///usr/app/node_modules/viem/_esm/actions/public/getTransaction.js:51:15)
2025-08-20 10:55:08.580 at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
2025-08-20 10:55:08.580 at async Eth.getUserOperationByHash (file:///usr/app/packages/executor/lib/modules/eth.js:318:35)
2025-08-20 10:55:08.580 at async EthAPI.getUserOperationByHash (file:///usr/app/packages/api/lib/modules/eth.js:47:16)
2025-08-20 10:55:08.580 at async ApiApp.handleRpcRequest (file:///usr/app/packages/api/lib/app.js:223:30)
2025-08-20 10:55:08.580 at async Object.<anonymous> (file:///usr/app/packages/api/lib/app.js:41:28)
2025-08-20 10:55:08.580 "shortMessage": "Transaction with hash \"0xb49cad0ad745d3643eee48672683fae78b8a6df99cbc59040cbe25398417bc4d\" could not be found.",
2025-08-20 10:55:08.580 "version": "2.27.0",
2025-08-20 10:55:08.580 "name": "TransactionNotFoundError"
2025-08-20 10:55:08.580 }
2025-08-20 10:55:08.582 [02:55:08.516] INFO (1): RESPONSE ::
2025-08-20 10:55:08.582 reqId: "req-g"
2025-08-20 10:55:08.582 body: {
2025-08-20 10:55:08.582 "error": "Unexpected behaviour"
2025-08-20 10:55:08.582 }
This problem occurs consistently on Arbitrum Sepolia, while the same setup on Ethereum Sepolia does not produce this error.
Expected behavior
eth_getUserOperationByHash should return the transaction information for submitted userOp without errors.
Steps to reproduce
- Set environment variables:
SKANDHA_ENTRYPOINTS="0x0000000071727De22E5E9d8BAf0edAc6f37da032"
SKANDHA_RPC=<Arbitrum_Sepolia_RPC_URL>
SKANDHA_RECEIPT_LOOKUP_RANGE=499
SKANDHA_BUNDLE_INTERVAL=1000
- Run Skandha v2-2.2.5 bundler on Arbitrum Sepolia.
- Submit a
userOp.
- Query the
userOp using eth_getUserOperationByHash.
- Check debug logs;
TransactionNotFoundError may appear.
Additional context
- I initially tested the setup on Ethereum Sepolia without encountering this issue; the problem only appears after switching to Arbitrum Sepolia.
- Could this out-of-sync behavior be one of the reasons why Skandha v3 transitioned from using Viem to an Ethers.js provider?
Thanks a lot!
Operating system
Linux
Skandha version or commit hash
v2-2.2.5
Describe the bug
When using Skandha v2-2.2.5 to run an ERC-4337 bundler on Arbitrum Sepolia (a high-block-speed chain), the following issue occurs:
When Skandha receives a
userOp, it is supposed to attempt bundling theuserOpon-chain duringbundleIntervalusingeth_sendRawTransaction. After obtaining the transaction hash, Skandha sets theuserOpstatus toMempoolEntryStatus.Submitted.Reference: BundlingService classic.ts
However, when a client queries the
userOpusingeth_getUserOperationByHash, the transaction hash often cannot be found on-chain, causing an error.Reference: eth.ts module
Theoretically, in step 1, the transaction hash has already been marked as
Submittedafter bundling. However, in step 2, querying theuserOpby this transaction hash often fails to locate the corresponding on-chain transaction.The logs display
TransactionNotFoundError, and Skandha returns "Unexpected behaviour":This problem occurs consistently on Arbitrum Sepolia, while the same setup on Ethereum Sepolia does not produce this error.
Expected behavior
eth_getUserOperationByHashshould return the transaction information for submitted userOp without errors.Steps to reproduce
userOp.userOpusingeth_getUserOperationByHash.TransactionNotFoundErrormay appear.Additional context
Thanks a lot!
Operating system
Linux
Skandha version or commit hash
v2-2.2.5