# 关于zkSync Era必须要了解的知识(十四) **Published by:** [zkSync](https://paragraph.com/@zksync-13/) **Published on:** 2023-05-18 **URL:** https://paragraph.com/@zksync-13/zksync-era-14 ## Content #收费机制 zkSync Era 的收费模式类似于以太坊,gas按计算生成本、链上发布数据生成本和存储效率收费。但是,zkSync Era 打包发布到L1 和证明生成的外部费用。 由于发布数据(在L1上)的L1自然价格波动很大,因此所需要的L2数量gas是可变的。因此,对于每个块,zkSync Era定序器确定义了以下动态参数: A gasPrice:单位 gas 的价格,以 gwei 为单位。 B gasPerPubdatagas:在以太坊上发布了一个字节数据的量。 重点 1 只有L2状态存储槽更新发布在L1上。 2 例如,如果同一个储槽在同一个汇总中更新了 10 次,则只有最后一次更新发布在以太坊上,因此只有一次 gas 费用。 #收费模式概览 在 zkSync 时代,与每个操作码都有固定 gas 价格的以太坊不同,由于 L1 上 gas 价格的波动,存储写入费用保持动态。其他操作码价格不变,类似于以太坊。可以参阅zkSync 操作码文档了解Era如何计算它们。 与以太坊一样,成为本最高的操作是存储更新。算术运算的操作相对方便,因为它只涉及计算而不需要更新存储。 我们相对于optimistic rollups的一个相当大的优势是,zkSync Era不会将所有交易数据发布到L1,而只是发布状态差,因此向L1发布的数据要少得多。另一个优势是具有成本效益的合同重新部署。一个示例是 DEX,它具有用于不同 Pair 池的 PairFactory 合约。 Pair 的合约字节码仅在第一个实例部署时发布。 之后,后续部署只涉及更新一个存储槽,该存储槽在新部署的 Pair 地址上设置合约代码哈希。 #设计建议 1 尽可能少地更新存储槽:检查您的代码是否可以避免不必要的存储更新。 2 尽可能多地重新使用存储槽:只有最极端的状态差异才会在以太坊上发布。 3 尽可能重用合约代码: 4>在以太坊上,避免免费构造函数将其放入常量中可以减少少量合约部分时的一些气体成本。 5>在zkSync Era上恰恰相反:由于合约字节码只发布了一次,只更新构造生成函数就可以节省大量费用。 ## Publication Information - [zkSync](https://paragraph.com/@zksync-13/): Publication homepage - [All Posts](https://paragraph.com/@zksync-13/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@zksync-13): Subscribe to updates