Skip to content

[BUG] RPC eth_getUserOperationByHash returns Unexpected behaviour on Arbitrum Sepolia #330

@oneleo

Description

@oneleo

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:

  1. 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

  2. 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

  1. Set environment variables:
SKANDHA_ENTRYPOINTS="0x0000000071727De22E5E9d8BAf0edAc6f37da032"
SKANDHA_RPC=<Arbitrum_Sepolia_RPC_URL>
SKANDHA_RECEIPT_LOOKUP_RANGE=499
SKANDHA_BUNDLE_INTERVAL=1000
  1. Run Skandha v2-2.2.5 bundler on Arbitrum Sepolia.
  2. Submit a userOp.
  3. Query the userOp using eth_getUserOperationByHash.
  4. Check debug logs; TransactionNotFoundError may appear.

Additional context

  1. I initially tested the setup on Ethereum Sepolia without encountering this issue; the problem only appears after switching to Arbitrum Sepolia.
  2. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions