Monad项目分析

今年4月9日,Layer1区块链项目Monad Labs宣布完成2.25亿美元的融资,该轮融资由Paradigm领投,其他投资方也都是知名投资机构,包括Electric Capital,SevenX Ventures、IOSG Ventures和Greenoaks等。加上2023年2月宣布的1900万美元的种子轮融资,该项目融资金额已达2.44亿美元,估值30亿美元。

抛开创始人的身份(三位创始人有两位来自Jump Trading团队),我们一起来看看这个项目到底有何过人之处?

Monad解决了什么问题?

Monad是兼容以太坊EVM的L1, 主要对标的是Solana和Sui,以提升交易的可拓展性作为项目的核心,并同时保证去中心化环境和更低的成本。在3月的测试环境中,Monad的TPS达到10k+,远远高于现有的区块链项目。

数据来源:https://www.coingecko.com/research/publications/fastest-blockchains

Monad的技术原理是什么?

总的来说,Monad通过交易的并行执行来提升交易的TPS。我们知道,以太坊拟机 (EVM) 是串行执行交易。在交易1行完成之前,交易2必须等待。而在Monad的交易机制下,交易1,交易2可以并行执行,从而减少等待时间, 提升交易速度。但在这种情况下,Monad需要解决的第一个问题是:

交易1和交易2中有互相依赖的交易关系,该如何输出正确的交易结果?

乐观并行执行

Monad采取的是乐观执行交易,也就是说,Monad 将在区块中较早的交易完成之前开始执行下一笔交易。有时这会导致执行不正确,甚至会遇到长“交易链“,造成大量的交易失败。

假设有两笔交易(按区块中的顺序):

-交易 1 读取并更新账户 A 的余额(例如,它收到来自账户 B 的转账)

-交易 2 读取并更新账户 A 的余额(例如,向账户 C 转账)

如果这两个交易并行运行,而交易 2 在交易1 完成之前开始运行,那么它读取的帐户 A 余额可能与按顺序运行时不同。这就会导致执行不正确。

而在Monad的并行机制下,会跟踪执行交易2 时使用的输入,并将它们与交易 1 的输出进行比较。如果它们不同,就会检测到交易 2 在执行时使用了不正确的数据,需要使用正确的数据再次执行。

当 Monad 并行执行交易时,每个交易的更新状态会按顺序“合并”,以检查上面提到不正确的执行情况。

此外,Monad 有一个静态代码分析器,可以尝试提前确定交易之间的依赖关系,之后再安排交易执行,避免大量交易失败而浪费链上资源。在乐观的情况下,Monad 可以提前预测大部分依赖关系;如果不能,Monad 会退回到最初的合并后再次执行的流程。至于其他关于避免重新执行交易的探索,Monad也还没有给出答案。

那么,Monad如何解决其并行执行所需要的与以太坊数据交互的i/o异步问题呢?

Monad数据库

MonadDb 在磁盘和内存中原生实现了以太坊使用的Patricia Trie 数据结构来实现数据的一致性。同时,Monad充分利用了最新的异步支持内核(在 Linux 上是io_uring),避免了执行异步工作时需要生成大量内核线程来处理待处理的 i/o 请求的问题。简单来说,Monad构建了一个数据库,在处理异步请求时,使所有输入都缓存在内存中,这同时提升了访问速度并减少了与以太坊数据交互时访问状态的次数及开销。

回到执行的速度本身,Monad怎样提升共识效率以提升交易速度呢?

MonadBFT

MonadBFT 是一种高性能共识机制,用于在拜占庭参与者存在的情况下在部分同步条件下就交易排序达成一致。它是HotStuff的衍生品,并采用了Jolteon / DiemBFT / Fast-HotStuff中提出的改进,即在领导者超时的情况下利用二次通信复杂度将三轮减少到两轮。

Monad还通过分离执行和共识,以及延迟执行来提高性能。其核心思想是,如果放宽执行条件,以便在达成共识之前完成执行,就可以并行运行执行和共识,从而为两者增加额外的时间。

总结

在支持以太坊EVM的项目中,Monad在TPS上优势明显,在交易的异步处理上也有创新。然而,Monad所提到的并行,与Polkadot和Paralism的并行并不相同,其并行指并行交易,整个链还是基于串行链。那么,这就无可避免的会受限于串行链链容量等性能的局限,而使TPS达到难以突破的上限。并行最终要解决的是智能合约的异步,我们也很高兴看到了各个项目在并行上越来越多的尝试。

也许我们还记得,Solana 在测试网上TPS达到了50k,但目前看来,主网上TPS仍在1k徘徊。而Monad 虽然在其内部测试网上实现了 1 0K+的TPS,主网上线后的性能表现如何,我们将拭目以待。

参考资料:https://docs.monad.xyz/