Geth 中的 JSON-RPC 增强

该项目旨在增强 Geth 的 JSON-RPC API,通过实现新的trace_*命名空间,特别是trace_filter,引入eth_getTransactionBySenderAndNonce来增强交易查询功能,标准化错误代码,并使用flood进行基准测试和优化,从而提高互操作性和性能。项目将涉及数据库索引的创建,性能优化,以及与其他以太坊客户端的合作。

Geth 中的 JSON-RPC 增强

标语

增强 Geth 中的 JSON-RPC 功能,以实现更好的跟踪、交易查询以及跨客户端的标准化。

动机

当前 Geth 中 JSON-RPC 的实现缺乏某些高级功能和标准化。本项目旨在解决以下问题:

  • 实现 trace_* 命名空间,特别是 trace_filter,这需要在数据库中添加一个额外的索引。此功能对于需要详细交易跟踪的开发人员和分析师至关重要。
  • 引入 eth_getTransactionBySenderAndNonce 以增强交易查询功能,该功能可用于按 EOA 地址及其 nonce(随机数) 查询交易。
  • 跨 JSON-RPC 客户端标准化错误代码,以提高互操作性和一致性。
  • 使用 flood 对 JSON-RPC 方法进行基准测试和优化,并比较不同以太坊客户端的性能。

项目描述

本项目建议通过实现新功能、标准化错误代码和优化现有方法来显着增强 Geth 中的 JSON-RPC API。以下是每个组件的详细描述:

trace_* 命名空间实现

trace_* 命名空间提供交易的详细执行跟踪,这对于开发人员、审计人员和分析师调试和分析智能合约至关重要。 当前的 Geth 实现包括跟踪器的基本构建块,但缺乏其他客户端(例如:erigon, reth)中可用的全面 trace_filtertrace_block 方法。

实现 trace_* 涉及创建一个额外的索引和额外的存储空间,用于将原始数据存储在 Geth 数据库中,以有效地支持过滤操作。由于跟踪结果是与区块生成实时生成的,因此我们需要存储不同跟踪器的所有结果(例如:callTracer、prestateTracer...),并且应优化存储以处理大量数据。我们还需要考虑链重组。

  • 跟踪方法:
    • trace_filter: 此方法将允许用户根据诸如 from/to 地址之类的条件来过滤跟踪。
    • trace_block: 此方法将允许用户获取区块的跟踪。
  • 集成: 新的跟踪器将集成到现有的 JSON-RPC 接口中,确保它们以与其他 Geth API 方法一致的方式进行访问。

eth_getTransactionBySenderAndNonce

eth_getTransactionBySenderAndNonce 方法将允许用户根据发送者的地址和 nonce(随机数) 检索交易。此功能对于需要有效管理和跟踪用户交易的钱包和应用程序特别有用。

我们可以首先在交易池中查找 sender+nonce 作为短路,如果未找到,则我们可以在数据库中查找,在数据库端,我们可以构建一个诸如 sender+nonce -> txhash 的索引,该索引可以与 tx-lookup 或新区块的挖掘一起更新。

  • 用例: 此功能将改善应用程序中的交易管理,从而实现更精确的交易跟踪和冲突解决。

错误代码标准化

目前,不同的以太坊客户端在大多数情况下对成功结果返回相同的响应,但对于类似错误情况可能会返回不同的错误代码和消息,从而导致为构建跨客户端应用程序的开发人员带来不一致和混乱。本项目旨在跨 JSON-RPC 客户端标准化错误代码。

让我们协作并维护 execution-apis 以包含大部分错误代码。

基准测试和优化(可选)

这是可选的,如果我们有足够的时间,我们可以采用它。

性能对于 JSON-RPC API 至关重要,尤其是在它们被与以太坊网络交互的应用程序广泛使用时。 本项目将对 Geth 的 JSON-RPC 方法进行基准测试,并对其进行优化以获得更好的性能。

  • Flood 基准测试工具: 利用 flood 工具对 Geth 中各种 JSON-RPC 方法的性能进行基准测试。 Flood 模拟高负载并测量响应时间,从而帮助识别瓶颈。
  • 优化: 根据基准测试结果,优化 JSON-RPC 方法的实现以减少延迟并提高吞吐量。 这可能涉及优化数据库查询、改进缓存机制以及优化 JSON 序列化/反序列化过程。
  • 比较: 将 Geth 的性能与其他以太坊客户端进行比较,以了解相对性能并找出需要进一步改进的领域。

规范

trace_* 命名空间

  • 通过在 Geth 数据库中创建一个额外的索引来实现 trace_filter
  • 利用 Geth 中跟踪器的现有构建模块来构建此功能。
  • 确保与现有的 debug_trace 功能兼容。

eth_getTransactionBySenderAndNonce

  • 遵循 issue #494 中提供的规范和指南。
  • 实现有效的索引和查询机制以支持此方法。

错误代码标准化

  • 与其他以太坊客户端开发人员合作以标准化错误代码。
  • 在 Geth 的 JSON-RPC API 中实现标准化的错误代码。
  • 记录更改并为其他客户端采用该标准提供指南。

基准测试和优化

  • 使用 flood 对 Geth 中的 JSON-RPC 方法进行基准测试。
  • 分析基准测试结果并确定优化机会。
  • 实施性能改进并将结果与其他以太坊客户端进行比较。

路线图

  1. 第 1 个月:

    • trace_* 命名空间中实现 trace_filtertrace_block
    • 开始研究 eth_getTransactionBySenderAndNonce
  2. 第 2 个月:

    • 完成 eth_getTransactionBySenderAndNonce 的实现。
    • 开始与其他以太坊客户端开发人员讨论标准化错误代码。
  3. 第 3 个月:

    • 最终确定错误代码标准化并在 Geth 中实施更改。
    • 使用 flood 进行基准测试并开始优化工作。
  4. 第 4 个月:

    • 根据基准测试结果完成 JSON-RPC 方法的优化。
    • 将性能与其他客户端进行比较并记录结果。
  5. 第 5 个月:

    • 待定

可能的挑战

  • 创建一个额外的索引用于 trace_filter,而不会显着影响性能。
  • 在多个以太坊客户端之间就错误代码标准化达成共识。
  • 确保新功能不会引入安全漏洞或降低现有功能的性能。

项目目标

本项目的成功将通过以下方式定义:

  • 成功实现在 trace_* 命名空间中的trace_filtertrace_block
  • eth_getTransactionBySenderAndNonce 方法的可用性。
  • 跨多个以太坊客户端的标准化错误代码。
  • 改进了 Geth 中 JSON-RPC 方法的性能,通过基准测试结果展示了改进。

合作者

研究员

导师

资源

  • 原文链接: github.com/eth-protocol-...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
eth-protocol-fellows
eth-protocol-fellows
江湖只有他的大名,没有他的介绍。