执行
操作码定价是否存在任何差异?
操作码定价是否存在任何差异?
Monad 的乐观并行执行如何处理相互依赖的交易?
Monad 的乐观并行执行如何处理相互依赖的交易?
在乐观并行执行中,如果交易首次执行的输入随后被变更,则会重新执行。如果存在长串的串行依赖交易怎么办?
在乐观并行执行中,如果交易首次执行的输入随后被变更,则会重新执行。如果存在长串的串行依赖交易怎么办?
我需要更改我的代码以利用 Monad 的并行性吗?为了降低两笔交易接触同一合约的概率,将合约拆分成许多合约是否有意义?
我需要更改我的代码以利用 Monad 的并行性吗?为了降低两笔交易接触同一合约的概率,将合约拆分成许多合约是否有意义?
MonadDB 相较于传统数据库在 EVM 状态存储方面引入了哪些具体优化?
MonadDB 相较于传统数据库在 EVM 状态存储方面引入了哪些具体优化?
io_uring 实现异步 I/O 并绕过文件系统,进一步降低了延迟并提高了吞吐量。io_uring 是一种新的 linux 内核技术,允许执行线程在不阻塞或占用线程的情况下发出 I/O 请求。这允许许多 I/O 请求并行发出、由内核排序、并在返回时由第一个可用线程处理。最后,在 MonadDb 中,trie 中的每个节点都是版本化的,允许直观地维护 merkle trie 和高效的状态同步算法。在 statesync 期间仅发送必要的 trie 组件,使引导和恢复更快。为什么 Monad 不将 EIP-2930 访问列表设为强制?这不会使执行更高效吗?
为什么 Monad 不将 EIP-2930 访问列表设为强制?这不会使执行更高效吗?
- 使用访问列表通常会增加交易的大小;长期来看,我们认为带宽是最大的瓶颈
- 在以太坊中,用户使用访问列表提交交易的工作流是:模拟交易,注意访问了哪些存储槽,然后使用访问列表中提到的这些槽提交交易。然而,世界状态可能在模拟和真实执行之间发生变化;我们认为系统应该在底层优雅地处理这一点。
- 这会破坏与不支持 EIP-2930 的现有钱包的集成。
- 请注意,EIP-2930 访问列表实际上是欠规范的,至少从预测状态争用的角度来看。如果两笔交易都从同一存储槽读取(但都不写入),那么就该存储槽而言,没有状态争用 —— 任一交易都无法使另一笔交易的计算无效。仅当较早的交易写入较晚的交易将读取的存储槽时,争用才会发生。EIP-2930 访问列表提到访问了哪些存储槽,但不注明交易是从该存储槽读取还是写入。
共识
Leader 是如何被选择的?
Leader 是如何被选择的?
- epoch 大约每 4 小时 12 分钟(50,000 个区块)发生一次。验证者的质押权重被锁定提前一个 epoch(即 epoch N+1 的任何变化必须在 epoch N 开始之前注册)。
- 在每个 epoch 开始时,每个验证者基于对质押权重运行确定性伪随机函数来计算 leader 时间表。由于函数是确定性的,每个人都会得出相同的 leader 时间表。
有多少节点可以参与共识?参与是否无需许可?
有多少节点可以参与共识?参与是否无需许可?
ACTIVE_VALSET_SIZE 的参数,当前设置为 200。因此,排名前 200 的 validator(按质押权重排序)可以直接参与共识。此参数可能会随时间变化。参与无需许可;只需成为前 ACTIVE_VALSET_SIZE 名 validator 之一即可。Raptorcast
在哪里可以找到 RaptorCast 的详细描述?
在哪里可以找到 RaptorCast 的详细描述?
为什么 RaptorCast 选择 UDP 而不是 TCP?
为什么 RaptorCast 选择 UDP 而不是 TCP?
Raptorcast 与以太坊、Solana 或 L2 中的传播方法有何不同?
Raptorcast 与以太坊、Solana 或 L2 中的传播方法有何不同?
- Monad 使用 Raptor 码,而 Turbine 使用 Reed-Solomon
- Monad 使用两级广播树,每隔一个 validator 作为一级节点,而 Solana 使用更深、结构更少的广播树,一级节点更少,确定广播树的逻辑更复杂。Solana 没有 Monad 那样的区块交付 BFT 保证。
Mempool
如果 nonce 存在缺口,缺口之后的交易是否会保留在 mempool 中?
如果 nonce 存在缺口,缺口之后的交易是否会保留在 mempool 中?
区块状态与最终确认
节点何时可以开始执行区块?
节点何时可以开始执行区块?
节点何时可以确定状态?
节点何时可以确定状态?
RPC
在用旧区块编号调用 eth_call 时,我收到此响应:Block requested not found. Request might be querying historical state that is not available. If possible, reformulate query to point to more recent blocks。这是怎么回事?
在用旧区块编号调用 eth_call 时,我收到此响应:Block requested not found. Request might be querying historical state that is not available. If possible, reformulate query to point to more recent blocks。这是怎么回事?
特性
是否支持 EIP-7951(或 RIP-7212)?
是否支持 EIP-7951(或 RIP-7212)?
0x0100 的预编译。这使得可以使用 P256 曲线在链上验证 WebAuthn/passkey 签名。有关使用详情和 Solidity 示例,请参见预编译。杂项
如果只有 100-200 个投票节点,那么低验证者硬件要求(32 GB RAM、2x 2TB SSD、16 核 CPU)的意义是什么?
如果只有 100-200 个投票节点,那么低验证者硬件要求(32 GB RAM、2x 2TB SSD、16 核 CPU)的意义是什么?
为什么共识客户端选择 rust,而执行选择 C++?
为什么共识客户端选择 rust,而执行选择 C++?
io_uring 和 boost::fibers 等库。Rust 被选中用于共识,以利用更严格的内存安全性,因为共识关注的是稍高级别的系统工程问题。
