在区块链世界中,交易手续费是用户与开发者必须面对的核心成本。作为以太坊 Layer 2 扩容解决方案,Scroll 在保持与以太坊高度兼容的同时,其手续费结构也有其独特之处。本文将深入解析 Scroll 交易手续费的构成、计算方式及优化策略,帮助你更好地理解和控制链上交易成本。
Scroll 交易手续费概览
Scroll Sepolia 测试网的交易费用显著低于以太坊主网,但其费用显示机制与以太坊类似。现有工具、钱包和代码通常可以无缝工作,但需要注意的是,钱包中显示的交易费用并非全部成本,除非软件专门针对 Scroll 的费用计算进行了优化。
由于 Layer 2 rollup 的设计特性,Scroll 的交易成本很大程度上取决于 Layer 1(以太坊)的成本。为了利用以太坊的安全性,Scroll 必须承担将交易数据和证明存储和验证在 L1 上的成本。
与以太坊主网相比,Scroll Sepolia 的交易费用计算引入了新的维度。最终交易费用由两个主要部分组成:
- L2 执行费用:在 Scroll 网络内部执行交易的成本
- L1 数据费用:将交易数据提交到以太坊主网以获得数据可用性的成本
总交易费用的计算公式为:总费用 = L2费用 + L1费用,所有费用均以 ETH 计价,这是 Scroll 网络的原生 gas 代币。
L2 执行费用详解
计算原理与机制
L2 执行费用的计算方式与以太坊传统模式一致,遵循 EIP-1559 之前的计算规则。具体公式为:
L2交易执行费用 = L2交易gas使用量 × L2交易gas价格这个费用取决于两个关键因素:
- 交易的实际 gas 消耗量(由交易复杂度决定)
- 当前网络的市场条件(反映在 gas 价格上)
用户可以通过在 Scroll 节点上调用 estimateGas 接口来预估交易的 gas 使用量,从而提前估算执行成本。
优化 L2 执行费用的策略
降低 L2 执行费用的有效方法包括:
- 选择网络拥堵较低时段进行交易
- 合理设置 gas 价格,避免过高溢价
- 优化智能合约代码,减少不必要的计算和存储操作
L1 数据费用深度解析
数据费用的必要性
每笔交易的调用数据(calldata)都必须提交到以太坊主网,这是确保 Rollup 安全性的关键环节。如果不将数据提交到 L1,就无法仅从 L1 数据重新构建 Scroll 的状态。
交易不是单独提交的,而是以批次形式收集并打包成区块。单个交易的 L1 数据成本根据其负载中的零字节和非零字节数量计算。
L1GasPriceOracle 合约
Scroll 预先部署了 L1GasPriceOracle 合约(地址:0x5300000000000000000000000000000000000002),该合约提供了估算给定交易原始数据的 L1 数据费用的功能。
主要方法包括:
getL1Fee(bytes memory _data):估算给定交易数据的 L1 数据费用- 查询当前 L1 基础费用、开销和缩放因子的各种视图函数
L1 数据费用计算步骤
计算 L1 数据费用的具体流程如下:
读取预言机参数:
从
L1GasPriceOracle合约的指定存储槽读取关键参数:l1BaseFee(槽位 1):当前 L1 基础费用overhead(槽位 2):数据承诺交易的额外 gas 开销scalar(槽位 3):用于计算价格波动的缩放因子
分析交易字节:
- 计算交易中的零字节和非零字节数量
- 根据 EIP-2028 标准,零字节消耗 4 gas,非零字节消耗 16 gas
计算最终费用:
L1 Gas = 零字节数 × 4 + (非零字节数 + 4) × 16 L1 数据费用 = ((L1 Gas + 开销) × L1基础费用 × 缩放因子) / 10^9
在非零字节中额外保留 4 个字节,用于存储 RLP 编码交易中的字节数。
L1GasPriceOracle API 详解
overhead() 函数
function overhead() external view returns (uint256);返回当前的 L1 费用开销,代表将交易和状态根发布到 L1 的每个交易的固定 gas 开销。
scalar() 函数
function scalar() external view returns (uint256);返回当前 L1 费用缩放因子,用于调整基础费用以适应市场条件变化。
l1BaseFee() 函数
function l1BaseFee() external view returns (uint256);返回最新的已知 L1 基础费用,反映以太坊主网的当前拥堵状况。
getL1Fee() 函数
function getL1Fee(bytes memory _data) external view returns (uint256);根据 RLP 编码输入交易的大小、当前 L1 基础费用和各种动态参数计算 L1 部分的费用。
参数:已签名的完全 RLP 编码交易数据
返回值:应为交易支付的 L1 费用
getL1GasUsed() 函数
function getL1GasUsed(bytes memory data) external view returns (uint256);计算用于发布交易的 L1 gas 数量,包括固定开销。
参数:已签名的完全 RLP 编码交易数据
返回值:用于发布交易的 L1 gas 消耗量
未来发展与优化路线
目前,Scroll 和各种证明合作伙伴正在补贴证明生成所需的计算成本。随着证明者网络逐渐去中心化,协议需要将证明生成的激励措施纳入其中,以确保系统的可持续性和可扩展性。
未来的 gas 成本预计将包含证明生成的成本。通过协议的持续优化,用户的证明成本应该保持在最低水平,因为每个证明可以包含大量交易,从而实现规模经济效益。
常见问题
Scroll 上的交易费用为什么比以太坊主网低?
Scroll 作为 Layer 2 解决方案,将大量交易批量处理后再提交到以太坊主网,显著降低了单笔交易的均摊成本。同时,执行环境的高效性也减少了计算资源的消耗。
如何准确预估 Scroll 交易的总成本?
建议使用 L1GasPriceOracle 合约的 getL1Fee 方法结合传统的 gas 估算方法。同时关注以太坊主网的拥堵状况,因为 L1 数据费用直接受其影响。
L1 数据费用在什么情况下会特别高?
当交易包含大量复杂数据(如大规模数据存储操作)或以太坊主网极度拥堵时,L1 数据费用会显著增加。智能合约部署交易通常会产生较高的 L1 数据费用。
普通用户需要直接与 L1GasPriceOracle 交互吗?
大多数情况下不需要。钱包和开发工具应该集成这些计算功能,为用户提供直观的费用显示。开发者需要在 dApp 中正确处理这些费用计算。
Scroll 主网与测试网的费用结构有区别吗?
基本结构相同,但主网涉及真实资金和价值转移,费用计算更加精确和严格。测试网通常有补贴机制,费用可能不能完全反映主网情况。
证明成本未来会增加用户负担吗?
通过协议优化和批量证明技术,单个用户的证明成本将会最小化。去中心化证明网络的效率提升也有助于控制整体成本。