• 介绍
• 内存池行为
• 按 FIFO 顺序挖掘交易
• 删除和替换事务
• 使用 RPC 方法
• hardhat Tutorials , hardhat 教程
• Contact 联系方式
• 介绍
Hardhat Network 可以配置为 automine 块,在收到每笔交易后立即进行,也可以配置为 interval mining,定期挖掘一个新块,并包含尽可能多的待处理交易。
您可以使用其中一种模式,两者都可以,也可以都不用。默认情况下,仅启用自动挖掘模式。
当自动挖掘被禁用时,每个发送的交易都会被添加到内存池中,其中包含将来可以挖掘的所有交易。默认情况下,Hardhat Network 的内存池遵循与 Geth 相同的规则。这意味着,除其他外,交易的优先级取决于支付给矿工的费用(然后是到达时间),并且无效交易会被丢弃。除了默认的内存池行为外,还提供了可选的 FIFO 行为。
禁用自动挖矿后,可以通过 eth_getBlockByNumber
RPC 方法(以 "pending"
作为块号参数)查询挂起的交易,可以使用 hardhat_dropTransaction
RPC 方法删除它们,可以通过提交替换它们具有相同随机数的新交易,但支付给矿工的费用增加了 10% 以上。
如果两种挖矿模式均未启用,则不会挖出新区块,但您可以使用 evm_mine
RPC 方法手动挖出新区块。这将生成一个包含尽可能多的待处理事务的新块。
• 内存池行为
当自动挖掘被禁用时,每个发送的交易都会被添加到内存池中,其中包含将来可以挖掘的所有交易。默认情况下,Hardhat Network 的内存池遵循与 Geth 相同的规则。除其他外,这意味着:
- 首先包含 Gas 价格较高的交易
- 如果可以包含两笔交易并且都向矿工提供相同的总费用,则首先包含最先收到的交易
- 如果交易无效(例如,它的 nonce 低于发送它的地址的 nonce),则交易被丢弃。
您可以使用“待处理”块标签获取将包含在下一个块中的待处理交易列表:
const pendingBlock = await network.provider.send("eth_getBlockByNumber", [
"pending",
false,
]);
• 按 FIFO 顺序挖掘交易
Hardhat Network 的内存池订购交易的方式是可定制的。默认情况下,它们按照 Geth 的规则进行优先级排序,但您可以启用 FIFO 行为,以确保事务按照发送顺序添加到块中,这对于从其他网络重新创建块很有用。
您可以在配置中启用 FIFO 行为:
networks: {
hardhat: {
mining: {
mempool: {
order: "fifo"
}
}
}
}
• 删除和替换事务
可以使用 dropTransaction
网络助手删除内存池中的事务:
const txHash = "0xabc...";
await helpers.dropTransaction(txHash);
您还可以通过发送一个新的交易来替换一笔交易,该交易的随机数与它已经在内存池中的交易相同,但 gas 价格更高。请记住,就像在 Geth 中一样,要使其生效,新的 gas/费用价格必须至少比当前交易的 gas 价格高 10%。
• 使用 RPC 方法
您可以使用两种 RPC 方法在运行时更改挖掘行为:evm_setAutomine
和 evm_setIntervalMining
。例如,要禁用自动挖掘:
await network.provider.send("evm_setAutomine", [false]);
并启用区间挖掘:
await network.provider.send("evm_setIntervalMining", [5000]);
• hardhat Tutorials , hardhat 教程
CN 中文 Github hardhat 教程 : github.com/565ee/hardhat_CN
CN 中文 CSDN hardhat 教程 : blog.csdn.net/wx468116118
EN 英文 Github hardhat Tutorials : github.com/565ee/hardhat_EN
• Contact 联系方式
Homepage : 565.ee
微信公众号 : wx468116118
微信 QQ : 468116118
GitHub : github.com/565ee
CSDN : blog.csdn.net/wx468116118
Email : [email protected]