在 Substrate 中,code: 1012 "Transaction is temporarily banned" 是什么意思?

In Substrate what does code: 1012 "Transaction is temporarily banned" mean?

留言全文为:

{code: 1012, message: "Transaction is temporarily banned"}

这表明交易在 Substrate Runtime 内存池或类似性质的某处进行,但尚不完全清楚可能的原因会触发这种情况,最终结果可能是什么。

例如,

1) 是否从给定帐户、IP 地址或其他地址发送了太多交易?是否达到了某个阈值?

2) 交易是否真的无效?

3) "temporary" 一词的使用表示延迟处理,而不是直接拒绝交易。因此,这是否表明交易有效,但被延迟了?如果有,会持续多久?

substrate runtime core/rpc/src/author/errors.rscore/transaction-pool/graph/src/errors.rs 中的注释并没有更清楚地说明结果是什么。

mempool前面存在一个交易黑名单,可以触发这个错误。具体来说,此错误意味着具有相同哈希值的交易是:

  1. 最近开采的区块的一部分
  2. 在区块生产过程中被检测为无效并从池中移除。

此外,此错误可能发生在以下情况:

  1. 交易达到它的 longevity,即在被导入池后未被开采 TransactionValidation::longevity 个区块。

    By default longevity is set to u64::max so this normally should not be the problem.

无论如何 -ltxpool=log 应该揭示有关此错误的更多详细信息。

一笔交易只是暂时被禁止,因为它会在以下任一情况下从黑名单中删除:

  1. 30 分钟过去了
  2. 黑名单上有4000多笔交易

查看 core/transaction-pool/graph/src/rotator.rs