Skip to content

Commit

Permalink
Updated EIP-1108
Browse files Browse the repository at this point in the history
  • Loading branch information
zac-williamson committed May 3, 2019
1 parent bda2a4f commit 119027b
Showing 1 changed file with 45 additions and 9 deletions.
54 changes: 45 additions & 9 deletions EIPS/eip-1108.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
eip: 1108
title: Reduce alt_bn128 precompile gas costs
author: Antonio Salazar Cardozo (@shadowfiend)
author: Antonio Salazar Cardozo (@shadowfiend), Zachary Williamson (@zac-williamson)
status: Draft
type: Standards Track
category: Core
Expand All @@ -11,12 +11,12 @@ requires: 196, 197

## Short Description

Recent changes to the underlying library used by the official Go reference
Changes in 2018 to the underlying library used by the official Go reference
implementation led to significant performance gains for the `ECADD`, `ECMUL`,
and pairing check precompiled contracts on the `alt_bn128` elliptic curve.

What is more, the performance boost for those operations can be also observed
for Parity client.
In the Parity client, field operations used by the precompile algorithms were optimized in 2018,
and recent changes to the pairing algorithm used by the `bn` crate have brought considerable speedups.

Faster operations on Ethereum clients should be reflected in reduced gas costs.

Expand All @@ -33,12 +33,48 @@ note](https://github.com/ethereum/go-ethereum/pull/16301#issuecomment-372687543)
the computational cost of `ECADD`, `ECMUL`, and pairing checks (excepting the
constant) has dropped roughly an order of magnitude across the board.

Also, [optimisations in the bn library](https://github.com/paritytech/bn/pull/9)
Also, optimizations in the bn library [in 2018](https://github.com/paritytech/bn/pull/9) and [2019](https://github.com/paritytech/bn/pull/14)
used by the [Parity client](https://github.com/paritytech/parity-ethereum) led to a
significant performance boost we
[benchmarked](https://gist.github.com/pdyraga/4649b74436940a01e8221d85e80bfeef)
and compared against the [previous
results](https://github.com/ethereum/benchmarking/blob/master/constantinople/analysis2.md).
results](https://gist.github.com/zac-williamson/838410a3da179d47d31b25b586c15e53).

## The Rationale Behind Lowering Gas Costs

### Existing protocols would benefit immensely from cheaper elliptic curve cryptography

Fast elliptic curve cryptography is a keystone of a number of protocols built on top of Ethereum. To list a few:

[The AZTEC protocol](https://github.com/AztecProtocol/AZTEC) utilizes the elliptic curve precompiles to construct private tokens, with zero-knowledge transaction logic, via the [ERC1723](https://github.com/ethereum/EIPs/issues/1723) and [ERC1724](https://github.com/ethereum/EIPs/issues/1724) standard.
[Matter Labs](https://github.com/matter-labs/matter-network) utilizes the precompiles to implement Ignis, a scaling solution with a throughput of 500txns per second
[Rollup](https://github.com/rollup/rollup) utilizes the precompiles to create L2 scaling solutions, where the correctness of transactions is gauranteed by main-net, without an additional consensus layer
[ZEther](https://crypto.stanford.edu/~buenz/papers/zether.pdf) uses precompiles `0x06` and `0x07` to construct confidential transactions

These are all technologies that have been, or are in the process of being, deployed to main-net. There protocols would all benefit from reducing the gas cost of the precompiles.

To give a concrete example, it currently costs `820,000` gas to validate the cryptography in a typical AZTEC confidential transaction. If the gas schedule for the precompiles correctly reflected their load on the Ethereum network, this cost would be `197,000` gas. This significantly increases the potential use cases for private assets on Ethereum. AZTEC has a number of cryptographic protocols that we plan deploy to Ethereum, but are at the limits of what is practical given the current precompile costs:

* Confidential weighted voting
* Partial-order filling over encrypted orders, for private decentralized exchanges
* Anonymous identity sharing proofs (e.g. proving you are on a whitelist, without revealing who you are)
* Many-to-one payments and one-to-many confidential payments, as encrypted communication channels between main-net and L2 applications

For ZK-SNARK based protocols on Ethereum, EIP-1108 will not only reduce the gas costs of verifying ZK-SNARKs substantially, but can also aid in [batching together multiple ZK-SNARK proofs](https://github.com/matter-labs/Groth16BatchVerifier). This is also a technique that can be used to split up monolithic ZK-SNARK circuits into a batch of ZK-SNARKs with smaller individual circuit sizes, which makes ZK-SNARKs both easier to construct and deploy.

ZEther transactions currently cost ~`6,000,000` gas. This EIP would would reduce this to ~`1,000,000` gas, which makes the protocol more practical.

To summarise, the are a number of protocols that currently exist on main-net, that would benefit immensely from this EIP. Elliptic curve cryptography can provide valuable solutions for Ethereum, such as scaling and privacy, and the scope and scale of these solutions can be increased if the gas costs for the `bn128` precompiles accurately reflects their computational load on the network.

### Cheaper elliptic curve cryptography can be used to trade storage for computation

Solutions such as Rollup and Ignis can be used to batch groups of individal transactions into a zk-snark proof, with the on-chain state being represented by a small Merkle root, instead of a large number of account balances.

If ZK-SNARK verification costs are decreased, these solutions can be deployed for a wider range of use cases and more Rollup-style transactions can be processed per block.

### Parity and Geth already have fast algorithms that justify reduced gas costs

This EIP does not require Parith or Geth to deploy new cryptographic libraries, as fast bn128 algorithms have already been integrated into these clients. This goal of proposing this EIP for Istanbul, is to supplement [EIP-1829](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1829.md) (arithmetic over generic elliptic curves), providing an immediate solution to the pressing problem of expensive cryptography, while more advanced solutions are developed, defined and deployed.

## Specification

Expand All @@ -48,15 +84,15 @@ Following is a table with the current gas cost and new gas cost:
| ------------- | --------- | ----------------------------- | ------------------- |
| `ECADD` | `0x06` | 500<sup>[1]</sup> | 150 |
| `ECMUL` | `0x07` | 40 000<sup>[1]</sup> | 6 000 |
| Pairing check | `0x08` | 80 000 * k + 100 000<sup>[2]</sup>| 28 300 * k + 35 450 |
| Pairing check | `0x08` | 80 000 * k + 100 000<sup>[2]</sup>| 34 000 * k + 45 000 |

The gas costs for `ECADD` and `ECMUL` are updates to the costs listed in
EIP-196, while the gas costs for the pairing check are updates to the cost
listed in EIP-197. Updated gas costs have been adjusted to the less performant
client which is Parity, according to benchmarks<sup>[3]</sup>.
client which is Parity, according to benchmarks<sup>[3]</sup>. The updated gas costs are scaled relative to the `ecrecover` precompile.

[1]- Per [EIP-196](https://github.com/ethereum/EIPs/blob/984cf5de90bbf5fbe7e49be227b0c2f9567e661e/EIPS/eip-196.md#gas-costs).

[2]- Per [EIP-197](https://github.com/ethereum/EIPs/blob/df132cd37efb3986f9cd3ef4922b15a767d2c54a/EIPS/eip-197.md#specification).

[3]- [Parity benchmarks.](https://gist.github.com/pdyraga/4649b74436940a01e8221d85e80bfeef)
[3]- [Parity benchmarks.](https://gist.github.com/zac-williamson/838410a3da179d47d31b25b586c15e53)

0 comments on commit 119027b

Please sign in to comment.