---
title: "ERC-4337 UserOperation 调试器与 Paymaster Decoder"
canonical: https://wavect.io/zh/tools/erc-4337-useroperation-debugger/
language: zh
description: "在浏览器本地解码 ERC-4337 UserOperation、handleOps calldata、paymasterAndData 和 v0.6 至 v0.9 EntryPoint 错误。"
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

浏览器本地 ERC-4337 诊断

# 先打开 UserOperation，别再被不透明的 bundler 错误牵着走。

粘贴 JSON、JSON-RPC 封装、handleOps calldata 或 revert 数据。Doctor 会拆分打包字段、解释 AA 错误、验证版本边界并生成可复现请求。

[打开 Doctor](#tool-app) [查看源码](https://github.com/wavect/erc-4337-useroperation-debugger)

- EntryPoint v0.6 · v0.7 · v0.8 · v0.9
- 输入 JSON · calldata · revert
- 哈希 Legacy · packed · EIP-712
- 网络 不调用 RPC 或钱包

**USEROP DOCTOR**

ENTRYPOINT v0.9 · CHAIN 1 **paymasterSignature: 65B**

结构有效 · 外部状态未验证

真正有用的部分

Doctor 把不透明对象变成可检查字段和可复现请求。它会区分本地格式错误与需要 bundler 或链上状态的结论，并且绝不会发送 operation。

检查真实 OPERATION

## UserOperation Doctor

将计算哈希视为权威结果前，请确认 EntryPoint 版本、地址和 chain。结构解码可立即开始。

不会提交任何内容

**ERC-4337 字段显微镜** 版本感知 · 浏览器本地 · 只读

加载示例 分析

EntryPoint 版本检测结构v0.6v0.7v0.8v0.9 Chain ID EntryPoint 地址

01

### UserOperation、RPC 封装、calldata 或 revert

等待输入

### 用于 callData 的可选账户 ABI

02

### 确定性诊断

尚未分析

分析示例或你的 operation，将本地结构错误与需要外部状态的检查分开。

03

### 打包结构与导出

解码字段、字节片段和可复现 RPC 请求将显示在这里。

### 复现 RPC 请求

解析与哈希留在本地 不请求链或 bundler 绝不要粘贴私钥

从数据块到可复现请求

## 先调试表示，再调试链

许多集成故障无需再发请求或打开区块浏览器就能隔离。

1. 01 - **粘贴失败产物** - 使用 bundler 返回的原始 UserOperation、RPC 封装、handleOps calldata 或嵌套 revert。
2. 02 - **确认版本和域** - 选择 EntryPoint 代际，并在信任哈希前核对地址与 Chain ID。
3. 03 - **导出复现材料** - 把标准化字段、请求、cURL 命令或 Markdown 报告放入负责该故障的 issue 或测试。

生产环境 ACCOUNT ABSTRACTION

## 用于 wallet、bundler、paymaster 与 EntryPoint 互相矛盾的边界

Wavect 在真实且文档不完整的系统上交付过 account abstraction 基础设施和 MetaMask 集成。冻结准确表示通常是找出哪一层改变数据的最快方法。

### 版本感知哈希

v0.6 legacy packing、v0.7 packed hashing 与 v0.8 或 v0.9 EIP-712 域保持明确分离。

### 可见的 Paymaster 后缀

v0.9 签名长度和 magic bytes 与已签名 paymaster 数据分离显示。

### 外部状态保持外部

需要代码、nonce、委托、deposit、策略、模拟或账户逻辑的检查都会明确标注。

明确边界

## Decoder 不是 bundler 模拟器

- 工具验证表示和确定性哈希，不执行 validateUserOp、账户 callData、paymaster 策略或 postOp。
- EIP-7702 哈希依赖委托地址，Doctor 不会虚构该状态。
- 只有提供签名方案或 ABI，才能解释自定义账户签名与 callData。
- 官方 EntryPoint 地址只是便捷默认值，请在目标网络核对地址和已部署代码。

## 关于 UserOperation Doctor

### 调试器会调用 bundler 或链吗？

不会。JSON 解析、ABI 解码、packing 和哈希都在本地完成。生成的 RPC 请求只是供你检查和自行执行的文本。

### 支持哪些 EntryPoint 版本？

支持 v0.6、v0.7、v0.8 和 v0.9。可推断部分结构，但给出权威哈希前必须由你确认版本。

### 能解码 paymasterAndData 吗？

可以。它会分离 paymaster 地址、verification 与 postOp gas、paymaster 数据和可选 v0.9 签名后缀。

### 为什么不计算 EIP-7702 哈希？

EntryPoint 哈希包含当前委托目标。缺少该状态或完整授权时，本地工具无法在不猜测的前提下给出权威值。

免费 · 开源 · 只读

## 冻结 UserOperation，拆开字段，让故障拥有可复现形态。

在本地使用 Doctor，再把标准化请求与诊断带到真正失败的那一层。

[返回 Doctor](#tool-app) [查看源码](https://github.com/wavect/erc-4337-useroperation-debugger)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/zh/tools/erc-4337-useroperation-debugger/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-08-05",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-08-05",
      "url": "https://wavect.io/zh/tools/erc-4337-useroperation-debugger/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "applicationCategory": "DeveloperApplication",
  "browserRequirements": "JavaScript 与支持 Web Crypto 的浏览器",
  "codeRepository": "https://github.com/wavect/erc-4337-useroperation-debugger",
  "description": "在浏览器本地解码 ERC-4337 UserOperation、handleOps calldata、paymasterAndData 和 v0.6 至 v0.9 EntryPoint 错误。",
  "isAccessibleForFree": true,
  "name": "ERC-4337 UserOperation 调试器",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "EUR"
  },
  "operatingSystem": "任意现代浏览器",
  "url": "https://wavect.io/zh/tools/erc-4337-useroperation-debugger/"
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/",
      "name": "首页",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/tools/",
      "name": "有些工作，本来就不该一直这么麻烦。",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/tools/erc-4337-useroperation-debugger/",
      "name": "ERC-4337 UserOperation 调试器",
      "position": 3
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "不会。JSON 解析、ABI 解码、packing 和哈希都在本地完成。生成的 RPC 请求只是供你检查和自行执行的文本。"
      },
      "name": "调试器会调用 bundler 或链吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "支持 v0.6、v0.7、v0.8 和 v0.9。可推断部分结构，但给出权威哈希前必须由你确认版本。"
      },
      "name": "支持哪些 EntryPoint 版本？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "可以。它会分离 paymaster 地址、verification 与 postOp gas、paymaster 数据和可选 v0.9 签名后缀。"
      },
      "name": "能解码 paymasterAndData 吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "EntryPoint 哈希包含当前委托目标。缺少该状态或完整授权时，本地工具无法在不猜测的前提下给出权威值。"
      },
      "name": "为什么不计算 EIP-7702 哈希？"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
