1 个不稳定版本

0.1.0-alpha2023年3月13日

#4#optimism

MIT 许可证

68KB
880

archon

build license: MIT archon

archon - 希腊语中的“尺子”;指古代雅典九位主要 法官 中的每一位。

archon 是一个纯 Rust 编写的针对 op-stack 的最高效、最健壮的批量提交服务。

快速入门

首先安装 archup,archon 的安装程序

curl https://raw.githubusercontent.com/refcell/arhcon/main/magup/install | bash

要安装 archon,请运行 archup

配置

archon 的命令行界面维护了一个详细菜单来运行批量服务。要查看所有可用命令的列表,请运行 archon --help。这将打印类似以下内容的输出

archon 0.1.0

USAGE:
    archon [OPTIONS]

OPTIONS:
    -d, --data-dir <DATA_DIR>                [default: /Users/user/.archon/data]
    -h, --help                               Print help information
    -n, --network <NETWORK>                  [default: optimism-goerli]

archon 默认使用的端口

  • 6061 - pprof
  • 7301 - 指标

环境变量

以下环境变量是 archon 配置的默认值。这些可以通过在运行 archon 之前在 shell 中设置环境变量或运行 archon 命令行时设置关联的标志来覆盖。

OP_BATCHER_L1_ETH_RPC=http://l1:8545
OP_BATCHER_L2_ETH_RPC=http://l2:8545
OP_BATCHER_ROLLUP_RPC=http://op-node:8545
OP_BATCHER_MIN_L1_TX_SIZE_BYTES=1
OP_BATCHER_MAX_L1_TX_SIZE_BYTES=120000
OP_BATCHER_TARGET_L1_TX_SIZE_BYTES=624
OP_BATCHER_TARGET_NUM_FRAMES=1
OP_BATCHER_APPROX_COMPR_RATIO=1.0
OP_BATCHER_CHANNEL_TIMEOUT=40
OP_BATCHER_POLL_INTERVAL=1s
OP_BATCHER_NUM_CONFIRMATIONS=1
OP_BATCHER_SAFE_ABORT_NONCE_TOO_LOW_COUNT=3
OP_BATCHER_RESUBMISSION_TIMEOUT=30s
OP_BATCHER_MNEMONIC=test test test test test test test test test test test junk
OP_BATCHER_SEQUENCER_HD_PATH="m/44'/60'/0'/0/2"
OP_BATCHER_SEQUENCER_BATCH_INBOX_ADDRESS="${SEQUENCER_BATCH_INBOX_ADDRESS}"
OP_BATCHER_LOG_TERMINAL="true"
OP_BATCHER_PPROF_ENABLED="true"
OP_BATCHER_METRICS_ENABLED="true"

规格说明

archon 的频道构建过程遵循几个并发规则。

  • 最大限度地填充事务以提高效率,同时在达到共识超时或超出排序窗口之前关闭频道。

批处理器配置

批处理器的通道构建过程同时遵循多个规则:为了最大化气体效率,尽可能使交易完整,但不要长时间保持通道开启,以免触发共识通道超时或超过序列窗口,并且可以限制通道保持开启的总时间,以提供更好的用户体验。配置参数它详细描述了影响通道构建过程的所有配置参数。气体效率为了高效地用压缩的L2批数据填充通道,批处理器的通道构建器通过将输入数据大小乘以一个近似的压缩比ApproxComprRatio来估算压缩数据大小。此比率可以通过过去的实验和经验设置,当前默认为0.4。一个批处理器交易恰好包含一个最大大小的帧MaxL1TxSizeBytes。默认值是120_000字节,因为这接近p2p gossip消息的最大数据大小。此外,通道构建器可以通过设置目标帧数TargetNumFrames来配置目标多个帧的通道,默认值为1。但是,通道构建器实际上只会尝试填充一个目标L1事务大小TargetL1TxSizeBytes的通道。这个额外参数的原因是在最大L1事务大小之间留有安全余地,以便如果最终的压缩输出数据略大于最大L1事务大小,批处理器不必在第二个事务中发送一个小余帧。当通道构建器从压缩数据创建帧时,这些帧将填充到MaxL1TxSizeBytes,而不仅仅是目标大小。目标L1事务大小的默认值是100_000,比最大值小20_000。⚠️注意,这些参数不应用来强制急切发布交易,例如通过设置低目标事务大小。这将在L2事务量高的时期导致性能不佳,因此这些参数应始终设置为现实值,即使在测试网上。如果需要急切发送交易,请使用可选参数最大通道持续时间MaxChannelDuration,请参阅下文部分。

总之,这些通道构建器参数的默认值如下:OP_BATCHER_MAX_L1_TX_SIZE_BYTES:120000 OP_BATCHER_TARGET_L1_TX_SIZE_BYTES:100000 OP_BATCHER_TARGET_NUM_FRAMES:1 OP_BATCHER_APPROX_COMPR_RATIO:0.4

这些可以安全使用,无需显式设置。提交安全边际 如果批处理器总是试图将通道填满到最大,这会导致通道运行超时共识通道超时或错过序列窗口,从而导致无效帧提交到L1。因此,批处理器也监视共识通道超时和序列窗口。因为在这种情况下提交帧交易非常危险,所以有一个提交安全边际参数SubSafetyMargin。这是指定为L1块数的安全边际,以保持远离通道超时或序列窗口的结束。如果批处理器看到L1接近这些超时的时间小于安全边际,它将立即关闭通道并将帧提交给L1。在保证快速包含的测试网上,这可以设置为低值,例如8。但在主网上,应该设置得更高,以确保交易(s)安全地包含在L1上。请注意,如果此值设置得过高或接近通道超时持续时间或SWS,这会有效地导致通道在创建后立即关闭和发送。如果应限制通道持续时间,不要使用此参数,而是使用最大通道持续时间,见下一节。最大通道持续时间(可选)在开发网和测试网上,在L2交易量低的时候通常不希望将交易填充到最大,因为这可能导致通道保持打开几分钟到(一个)小时,具体取决于共识通道超时和SWS。因此,可以设置一个可选的最大通道持续时间MaxChannelDuration,以L1块为单位衡量。在开发网上,这可以低至1,以强制在每个轮询间隔内急切地关闭通道并提交。⚠️不能设置为0,因为0值将禁用此功能。💡请注意,批处理器事务之间的有效距离将是MaxChannelDuration + NumConfirmations,因为,在发送交易后,批处理器当前会阻塞并等待交易被确认NumConfirmations L1块,然后才开始创建新的通道。轮询间隔 轮询间隔决定了多久查询一次L2节点以获取新的不安全L2块。它可以安全地设置为低值,如2秒(2秒)。将其设置得更高可以帮助减少批处理器和其L2节点之间的流量,但也可能导致在看到新L2块和批处理它们时出现可能的延迟。轮询间隔历史 在过去(直到2023年1月中旬),批处理器的轮询间隔决定了通道持续时间,因为在每个轮询间隔,批处理器会查询L2块,打开一个新的通道,将所有L2块放入其中,然后关闭通道并将其作为单个帧提交给L1。轮询间隔是唯一影响通道构建的参数。现在,通道构建遵循上述规则,与轮询间隔完全独立,因为通道现在可以存活超过单个轮询间隔。确认深度 可以通过NumConfirmations参数设置等待多少L1块来考虑交易在L1上被确认。应将其设置为L1上预期的最大重组深度。在开发网上,这可能是1,但在真实网络上应设置得更高。最坏的情况下,如果设置得太低,批处理器可能会将通道注册为已包含在L1上,但它随后被重组出来,该通道中的所有交易都会丢失。示例配置这些配置假设是批处理器的最新版本(>=v1.0.0-rc.3)。开发网OP_BATCHER_POLL_INTERVAL: 1s OP_BATCHER_NUM_CONFIRMATIONS: 1 OP_BATCHER_MAX_CHANNEL_DURATION: 1 OP_BATCHER_SUB_SAFETY_MARGIN: 8 OP_BATCHER_MAX_L1_TX_SIZE_BYTES: 120000 OP_BATCHER_TARGET_L1_TX_SIZE_BYTES: 100000 OP_BATCHER_TARGET_NUM_FRAMES: 1 OP_BATCHER_APPROX_COMPR_RATIO: 0.5

这将导致每次(1(ChannelDuration)+ 1(ConfirmationDepth)= 2 L1-blocks)提交都进行批量提交。将最大通道持续时间增加到更高的值,例如5(1分钟12秒的L1块时间)或10(2分钟),如果只需要较低的批量交易频率。Goerli OP_BATCHER_POLL_INTERVAL: 2s OP_BATCHER_NUM_CONFIRMATIONS: 5 OP_BATCHER_MAX_CHANNEL_DURATION: 5 OP_BATCHER_SUB_SAFETY_MARGIN: 20 OP_BATCHER_MAX_L1_TX_SIZE_BYTES: 120000 OP_BATCHER_TARGET_L1_TX_SIZE_BYTES: 100000 OP_BATCHER_TARGET_NUM_FRAMES: 1 OP_BATCHER_APPROX_COMPR_RATIO: 0.5

这将导致通道在最多1分钟(5 * 12秒L1块时间)加上确认深度后关闭并发送其帧。同时将提交安全边距增加到10,但实际上由于活跃通道持续时间限制,它不会产生任何影响,因为SWS和共识通道超时减去10仍然比5大得多。已弃用参数以下参数已弃用。OP_BATCHER_CHANNEL_TIMEOUT — 从rollup节点查询。OP_BATCHER_SEQUENCER_BATCH_INBOX_ADDRESS — 从rollup节点查询。OP_BATCHER_SEQUENCER_GENESIS_HASH — 已弃用。OP_BATCHER_MIN_L1_TX_SIZE_BYTES — 概念上已弃用。现在有一个目标和最大L1事务字节数。RPC效率op-node支持一个l1.rpckind标志,该标志根据不同的L1基础设施提供商定制节点行为

本机Geth/Erigon/Nethermind/Parity Alchemy/QuickNode/Infura

您可以在这里看到每个l1.rpckind值的作用。这值得尝试;如果使用集中式基础设施,它可以带来显著的成本节省;如果使用自己的节点,它可以带来效率节省。

贡献

所有贡献都受到欢迎。在打开PR之前,请提交一个详细说明错误或功能的issue。在打开PR时,请确保您的贡献基于夜间rust工具链,使用cargo fmt进行了检查,并在适用的情况下包含测试。

免责声明

本代码按原样提供。不提供任何保证、声明或保证,无论是明示的还是默示的,关于代码的安全性或正确性。它尚未经过审计,因此无法保证它将按预期工作,用户可能会遇到延迟、失败、错误、遗漏或丢失传输信息。本存储库中没有任何内容应被视为针对任何特定事实或情况的投资建议或法律建议,也不旨在取代合格的法律顾问。强烈建议您就有关此类问题或疑虑的事项联系您所在司法管辖区内的知名律师。作者不对上述内容的使用承担责任,用户应谨慎行事并自行承担风险。

依赖项

~32–50MB
~878K SLoC