费用机制


费用机制

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上,情况正好相反:为合约部署相同的字节码,而只改变构造函数参数,可以节省大量费用。