跳至主要内容
本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)

如何管理非ces 以实现可靠交易

在 Kaia 或任何与 EVM 兼容的区块链上构建应用程序时,nonce 管理是其中的一个细节,它可以让您的 dApp 顺利运行,也可以导致交易卡住或失败。 本指南将解释什么是非ces、它们为何重要,以及在发送批量或连续事务时如何有效地处理它们。

什么是 Nonce?

nonce(使用一次的数字)是账户(EOA)的交易计数器。 第一笔交易使用的是 nce 0,之后的每笔交易都以 1 为单位递增。 交易必须严格按照顺序(0、1、2、 …)处理。 这种排序可防止重放,并确保预定的执行顺序。 钱包通常会为终端用户管理这一点,但高吞吐量系统或收费授权流通常需要明确的控制。

常见的 Nonce 问题

当交易使用不正确的 nonce 值发送时,可能会出现几个问题:

nonce 序列中的间隙

之后的交易会卡住,等待缺失的 nonce 被补上。 例如,如果您发送的事务有 nonces 0、1 和 3(跳过 2),则事务 3 及以后的处理要等到 nonce 2 提交后才能进行。

重复的 nonce

具有相同 nce 的两个交易将相互竞争。 谁先得到确认,谁就获胜。 另一个则被放弃。

批量交易碰撞

在没有仔细跟踪 nonce 的情况下快速发送多个事务时,一些事务可能会因 nonce 冲突而失败或停滞。

管理批量交易的 Nonces

在发送大量交易(批量操作、NFT 铸币机、套利机器人)时,不能仅仅依靠钱包自动化。 你需要一个系统的方法。

1. 维护链外 Nonce 存储器

使用数据存储(RedisPostgres 或内存映射)跟踪每个账户的下一个 nonce。 启动会话时,使用 eth_getTransactionCount 与区块链同步。 发送完每笔交易后,立即递增本地 nonce 计数器。

这种方法可让您精确控制 nonce 分配,并防止在快速连续发送事务时发生冲突。

2. 使用 Web3 库实现自动化

诸如ethers.jsweb3.js之类的库可自动处理连续交易的非密钥分配。 对于批量或并行事务,请从 nonce 存储器中手动覆盖 nonce。

3. 并行处理多个账户的交易

如果交易是独立的,则将其分配给多个 EOA。 例如,与其使用一个账户发送 100 个事务(造成 nonce 瓶颈),不如使用 10 个账户,每个账户发送 10 个事务。 这大大提高了吞吐量。

4. 实施稳健的错误处理

检测掉线或卡住的交易(通常是由于气体不足)。 取而代之的是同样的不劳而获,外加更高的油价。 这一过程被称为 "加速",可确保交易队列不断前进。

重试逻辑在生产环境中至关重要。 建立处理临时故障的机制,并在需要时重新提交事务。

5. 与区块链探索者一起监控

使用KaiaScanOKX Explorer或自定义索引器等工具来验证 nonce 进程。 这有助于在事务无法传播或陷入意外状态时进行调试。

6. 可扩展性设计

对于高吞吐量系统(交易机器人、批量造币厂),设计工作流程时应动态分配新的 EOA,使用非王牌队列确保排序,并通过在多个账户间分配交易来横向扩展。

7. 高级用户手动调节

提供在交易卡住时手动设置 nonces 的选项。 大多数钱包(如 MetaMask)已经为需要精细控制的高级用户提供了支持。

示例流程:批量事务管理

以下是典型的 nonce 管理系统在批量交易中的工作原理:

  1. 获取当前的 nonce:查询非证书管理器(例如 Redis),获取发件人地址上次使用的非证书
  2. 递增和分配:在本地递增 nonce 并将其分配给下一笔交易
  3. 发送交易:向网络提交交易
  4. 更新存储:根据发件人地址立即更新数据存储(Redis、数据库)中的 nonce
  5. 处理失败:如果交易失败(例如 Tx(1)),在进行 Tx(2)之前,使用相同的 nonce 执行重试逻辑,收取更高的气体费用

关键在于维护一个集中式的 nonce 管理器,跟踪每个地址最后使用的 nonce。 每个事务都会递增该值(Tx(0) 使用 nonce 0,Tx(1) 使用 nonce 1,依此类推),并以原子方式更新存储。 这样,在快速连续发送事务时,就能防止非 Cce 碰撞。

关于估算加油限额和价格(包括重试时选择更高的费用),请参阅如何估算 Kaia 钱包和 MetaMask 上的加油限额和价格

结论

可靠的 nonce 管理对事务繁重的系统至关重要。 使用链外 nonce 存储、适当的错误处理(相同的 nonce,更高的费用)、监控和水平扩展来保持高吞吐量,避免停滞。 同样的 nonce 规则也适用于收费委托交易。

让这个页面变得更好