Alert Source Discuss
Standards Track: Core

EIP-1108: 降低 alt_bn128 预编译的 gas 消耗

Authors Antonio Salazar Cardozo (@shadowfiend), Zachary Williamson (@zac-williamson)
Created 2018-05-21
Requires EIP-196, EIP-197

简短概要

椭圆曲线算术预编译当前定价过高。重新定价预编译将极大地帮助以太坊上的许多隐私解决方案和扩展解决方案。

摘要

2018 年官方 Go 参考实现使用的底层库的更改,导致 alt_bn128 椭圆曲线上 ECADDECMUL 和配对检查预编译合约的性能显著提升。

在 Parity 客户端中,预编译算法使用的字段操作在 2018 年进行了优化,并且最近对 bn crate 使用的配对算法的更改带来了相当大的加速。

以太坊客户端上更快的操作应该反映在降低的 gas 成本中。

动机

最近,官方 Go 参考实现用于实现 ECADD(地址为 0x06)、ECMUL(地址为 0x07)和配对检查(地址为 0x08)预编译合约的底层库已转移到 Cloudflare 的 bn256 库。基于引入此更改的初始 PR,并在稍后的说明中得到证实,ECADDECMUL 和配对检查的计算成本(除了常数)总体上大约下降了一个数量级。

此外,2018 年2019 年 bn 库中的优化被 Parity 客户端使用,导致了显著的性能提升,我们进行了基准测试 并与之前的 结果进行了比较。

规范

以下是当前 gas 成本和新 gas 成本的表格:

合约 地址 当前 Gas 成本 更新后的 Gas 成本
ECADD 0x06 500[1] 150
ECMUL 0x07 40 000[1] 6 000
配对检查 0x08 80 000 * k + 100 000[2] 34 000 * k + 45 000

ECADDECMUL 的 gas 成本是 EIP-196 中列出的成本的更新,而配对检查的 gas 成本是 EIP-197 中列出的成本的更新。根据基准测试[3],更新后的 gas 成本已调整为性能较低的客户端 Parity。

为了得出这些更新后的 gas 成本,ecrecover 预编译的性能被测量为每次 ecrecover 调用 116 微秒。假设 ecrecover gas 价格在 3,000 gas 时是公平的,我们得到每个预编译算法运行时间的每微秒 25.86 gas 的价格。考虑到这一点,配对预编译花费了 3,037 微秒来计算 1 个配对,花费了 14,663 微秒来计算 10 个配对。由此,配对算法具有 1,745 微秒的固定“基本”运行时间,以及每个配对 1,292 微秒。由于算法的结构,我们可以将运行时间分成“固定成本”和“每个配对的线性成本”组成部分。

因此,使用每微秒 25.86 gas 的“公平”价格,我们得到一个 gas 公式,约为 35,000 * k + 45,000 gas,其中 k 是正在计算的配对数。[4]

[1]- 根据 EIP-196

[2]- 根据 EIP-197

[3]- Parity 基准测试。

[4]- PR 评论澄清 gas 成本计算

理由

现有的协议将从更便宜的椭圆曲线密码学中获益匪浅

快速椭圆曲线密码学是构建在以太坊之上越来越多的协议的基石。列举几个:

  • AZTEC 协议利用椭圆曲线预编译来构建私有代币,通过 ERC-1723ERC-1724 标准,实现零知识交易逻辑。
  • Matter Labs 利用预编译来实现 Ignis,这是一种吞吐量为每秒 500 笔交易的扩展解决方案
  • Rollup 利用预编译来创建 L2 扩展解决方案,其中交易的正确性由主网保证,无需额外的共识层
  • ZEther 使用预编译 ECADDECMUL 来构建保密交易

这些都是已经或正在部署到主网的技术。这些协议都将受益于降低预编译的 gas 成本。

举一个具体的例子,目前验证典型 AZTEC 保密交易中的密码学需要 820,000 gas。如果预编译的 gas 时间表正确反映了它们在以太坊网络上的负载,那么这个成本将是 197,000 gas。这大大增加了以太坊上私有资产的潜在用例。AZTEC 计划在以太坊上部署几个密码学协议,但这些协议都在当前预编译成本的实际限制范围内:

  • 保密加权投票
  • 通过加密订单的部分订单填充,用于私有去中心化交易所
  • 匿名身份共享证明(例如,证明你在白名单上,而不透露你是谁)
  • 多对一支付和一对多保密支付,作为主网和 L2 应用程序之间的加密通信通道

对于以太坊上基于 zk-SNARK 的协议,EIP-1108 不仅将大幅降低验证 zk-SNARK 的 gas 成本,还可以帮助批量处理多个 zk-SNARK 证明。这也是一种可以将整体 zk-SNARK 电路分成一批具有较小个体电路尺寸的 zk-SNARK 的技术,这使得 zk-SNARK 更容易构建和部署。

ZEther 交易目前花费约 6,000,000 gas。此 EIP 会将此成本降低到约 1,000,000 gas,这使得该协议更具实用性。

总而言之,主网上目前存在几个协议,这些协议将从此 EIP 中获益匪浅。椭圆曲线密码学可以为以太坊提供有价值的解决方案,例如扩展和隐私,并且如果 bn128 预编译的 gas 成本准确反映了它们在网络上的计算负载,则可以增加这些解决方案的范围和规模。

更便宜的椭圆曲线密码学可以用于交易存储以换取计算

诸如 Rollup 和 Ignis 之类的解决方案可用于将一组个人交易批量处理成一个 zk-SNARK 证明,链上状态由一个小的 Merkle 根表示,而不是多个帐户余额。

如果降低 zk-SNARK 验证成本,则可以将这些解决方案部署用于更广泛的用例,并且每个区块可以处理更多 Rollup 风格的交易。

Parity 和 Geth 已经有快速算法,证明降低 gas 成本是合理的

此 EIP 不需要 Parity 或 Geth 部署新的密码学库,因为快速 bn128 算法已经集成到这些客户端中。提出此 EIP 用于伊斯坦布尔的目标是补充 EIP-1829(通用椭圆曲线上的算术),在开发、定义和部署更高级的解决方案的同时,为昂贵的密码学的紧迫问题提供即时解决方案。

测试用例

由于没有更改任何底层算法,因此没有其他测试用例需要指定。

实现

Parity 和 Geth 客户端都已经实现了足够快的密码学库,可以证明降低预编译 gas 成本是合理的。作为参考,以下是 C++golangrust 中的椭圆曲线库列表,这些库支持 bn128 曲线,并且其运行时间等于或快于 Parity 基准测试。

补充参考

@vbuterin 在此 EIP 最初创建后,以类似的理由独立提出了类似的减少,如 ethereum/EIPs#1187

版权

通过 CC0 放弃版权及相关权利。

Citation

Please cite this document as:

Antonio Salazar Cardozo (@shadowfiend), Zachary Williamson (@zac-williamson), "EIP-1108: 降低 alt_bn128 预编译的 gas 消耗," Ethereum Improvement Proposals, no. 1108, May 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1108.