费用机制
费用机制
Note
本节文档正在审查中,以反映对系统合约的修改(见changelog)。修订后的版本很快就会推出。
在zkSync,我们的目标是与以太坊兼容,这意味着我们旨在分享相似性,同时尽量减少巨大的差异,其中一个相似性是zkSync的气体费用模型。
zkSync的 "gas "版本就像以太坊一样被称为 "gas",它不仅代表了计算的成本,也代表了在链上发布数据和影响存储的成本。
由于在L1上发布calldata的成本非常不稳定,改变一个存储槽所需的gas
数量并不恒定。对于每个区块,操作员定义了以下动态参数。
gas_price
- 每个代币中当前基本价格的表格。这个参数的值用于确定每个令牌中虚拟机执行的成本。gas_per_pubdata
- 向以太坊发布一个字节的数据的gas
价格。
请注意,公共数据只对状态差异进行发布.如果同一个存储槽在同一个滚动块中被更新10次,只有最后的更新会被发布到以太坊上,因此只对公共数据收费一次。
收费模式:ZkSync与Ethereum对比
我们想表明我们的收费模式和以太坊的收费模式之间的明显区别。 另外,与以太坊不同的是,在以太坊中,大多数操作码都有非常明显的气体价格,在zkSync中,操作码的成本是不同的,因此zkEVM操作码可能会有类似的 "气体 "价格。 一般来说,执行本身(算术操作,不涉及存储更新)是非常便宜的。正如在以太坊中,大部分的成本是由存储更新产生的。
这对我意味着什么?
尽管存在差异,但收费模式与以太坊的收费模式相当相似;最昂贵的操作是存储变化。zk rollups比optimistic rollups的优势之一是,zk rollups可以不发布所有交易数据,而只发布状态差异,从而减少存储变化。
正如已经说过的,如果同一个存储槽在一个区块中被多次更新,那么只有最后一次更新会被公布在以太坊上,而存储变化的成本只会被收取一次;但它超越了简单的存储槽。例如,一个DEX和一个PairFactory
工厂用于不同的Pair
池。Pair
的合约字节码只需要在部署第一个实例时发布。在Pair
的代码被发布一次后,后续的部署只需要改变一个存储槽--在新部署的Pair
的地址上设置契约代码哈希。
因此,充分利用zkSync收费系统的提示是以下几点。
- 尽可能少地更新存储槽执行的成本比存储更新的成本小得多。
- 尽可能多地重复使用存储槽只在以太坊上发布状态差异。
- 用户应尽可能多地共享存储槽如果100个用户在一个区块中更新你的合约的存储槽,差异将只被发布一次。在未来,我们将为用户引入报销,这样更新共享存储槽的费用将在用户之间分摊。
- 尽可能重复使用合约代码在以太坊上,避免构造器参数并将其放入常量,可以减少合约部署时的一些气体成本。在zkSync上,情况正好相反:为合约部署相同的字节码,而只改变构造函数参数,可以节省大量费用。