L2(OPR+ZKR) L1 (EVM)

常用工具:

L2BEAT – The state of the layer two ecosystem

DefiLlama

EVM

EVM 是一个基于 256 位堆栈的图灵机。

由于 EVM 是「图灵完备」的,它会受到「停机问题」的困扰。

简而言之,在程序执行之前,没有办法确定它未来是否会终止。EVM 解决这个问题的方法是通过「Gas」计量计算单位,一般来说,这与执行指令所需的物理资源成比例。

每个交易的 Gas 量是有限制的,交易的发起者必须支付与交易消耗的 Gas 成比例的 ETH。

这个策略的影响之一是,如果有两个功能上相同的智能合约,消耗更少 Gas 的合约将被更多采用。这导致协议竞争极端的 Gas 效率,工程师努力最小化特定任务的 Gas 消耗。

此外,当调用一个合约时,它会创建一个执行上下文。在这个上下文中,合约有一个堆栈用于操作和处理,一个线性内存实例用于读写,一个本地持久性存储用于合约读写,并且附加到调用的数据「calldata」可以被读取但不能被写入。

关于内存的一个重要说明是,虽然它的大小没有确定的「上限」,但仍然是有限的。

扩展内存的 Gas 成本是动态:一旦达到阈值,扩展内存的成本将呈二次方增长,也就是说 Gas 成本与额外内存分配的平方成正比。

合约也可以使用一些不同的指令来调用其他合约。

「call」指令将数据和可选的 ETH 发送到目标合约,然后创建自己的执行上下文,直到目标合约的执行停止。

「staticcall」指令与 「call」相同,但增加了一个检查,即在静态调用完成之前,断言全局状态的任何部分都未被更新。

最后, 「delegatecall」指令的行为类似于 「call」,只是它会保留先前上下文的一些环境信息。这通常用于外部库和代理合约。