Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update EIP-196: Fix coordinate description #8741

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion EIPS/eip-196.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---

Check failure on line 1 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble is missing header(s): `description`, `discussions-to`

error[preamble-req]: preamble is missing header(s): `description`, `discussions-to` --> EIPS/eip-196.md | | = help: see https://ethereum.github.io/eipw/preamble-req/

Check failure on line 1 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble is missing header(s): `description`, `discussions-to`

error[preamble-req]: preamble is missing header(s): `description`, `discussions-to` --> EIPS/eip-196.md | | = help: see https://ethereum.github.io/eipw/preamble-req/

Check failure on line 1 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble is missing header(s): `description`, `discussions-to`

error[preamble-req]: preamble is missing header(s): `description`, `discussions-to` --> EIPS/eip-196.md | | = help: see https://ethereum.github.io/eipw/preamble-req/
eip: 196
title: Precompiled contracts for addition and scalar multiplication on the elliptic curve alt_bn128

Check failure on line 3 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `title` value is too long (max 44)

error[preamble-len-title]: preamble header `title` value is too long (max 44) --> EIPS/eip-196.md:3:7 | 3 | title: Precompiled contracts for addition and scalar multiplication on the elliptic curve alt_bn128 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ too long | = help: see https://ethereum.github.io/eipw/preamble-len-title/

Check failure on line 3 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `title` value is too long (max 44)

error[preamble-len-title]: preamble header `title` value is too long (max 44) --> EIPS/eip-196.md:3:7 | 3 | title: Precompiled contracts for addition and scalar multiplication on the elliptic curve alt_bn128 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ too long | = help: see https://ethereum.github.io/eipw/preamble-len-title/

Check failure on line 3 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `title` value is too long (max 44)

error[preamble-len-title]: preamble header `title` value is too long (max 44) --> EIPS/eip-196.md:3:7 | 3 | title: Precompiled contracts for addition and scalar multiplication on the elliptic curve alt_bn128 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ too long | = help: see https://ethereum.github.io/eipw/preamble-len-title/
author: Christian Reitwiessner <[email protected]>

Check failure on line 4 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `author` must contain at least one GitHub username

error[preamble-author]: preamble header `author` must contain at least one GitHub username --> EIPS/eip-196.md | 4 | author: Christian Reitwiessner <[email protected]> | = help: see https://ethereum.github.io/eipw/preamble-author/

Check failure on line 4 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `author` must contain at least one GitHub username

error[preamble-author]: preamble header `author` must contain at least one GitHub username --> EIPS/eip-196.md | 4 | author: Christian Reitwiessner <[email protected]> | = help: see https://ethereum.github.io/eipw/preamble-author/

Check failure on line 4 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `author` must contain at least one GitHub username

error[preamble-author]: preamble header `author` must contain at least one GitHub username --> EIPS/eip-196.md | 4 | author: Christian Reitwiessner <[email protected]> | = help: see https://ethereum.github.io/eipw/preamble-author/
type: Standards Track

Check failure on line 5 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `type` is out of order

error[preamble-order]: preamble header `type` is out of order --> EIPS/eip-196.md | 5 | type: Standards Track | = help: `type` should come after `status` = help: see https://ethereum.github.io/eipw/preamble-order/

Check failure on line 5 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `type` is out of order

error[preamble-order]: preamble header `type` is out of order --> EIPS/eip-196.md | 5 | type: Standards Track | = help: `type` should come after `status` = help: see https://ethereum.github.io/eipw/preamble-order/

Check failure on line 5 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `type` is out of order

error[preamble-order]: preamble header `type` is out of order --> EIPS/eip-196.md | 5 | type: Standards Track | = help: `type` should come after `status` = help: see https://ethereum.github.io/eipw/preamble-order/
category: Core
status: Final
created: 2017-02-02
---

Check failure on line 10 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body is missing section(s): `Security Considerations`

error[markdown-req-section]: body is missing section(s): `Security Considerations` --> EIPS/eip-196.md | | = help: must be at the second level (`## Heading`) = help: see https://ethereum.github.io/eipw/markdown-req-section/

Check failure on line 10 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body is missing section(s): `Security Considerations`

error[markdown-req-section]: body is missing section(s): `Security Considerations` --> EIPS/eip-196.md | | = help: must be at the second level (`## Heading`) = help: see https://ethereum.github.io/eipw/markdown-req-section/

Check failure on line 10 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body is missing section(s): `Security Considerations`

error[markdown-req-section]: body is missing section(s): `Security Considerations` --> EIPS/eip-196.md | | = help: must be at the second level (`## Heading`) = help: see https://ethereum.github.io/eipw/markdown-req-section/
## Simple Summary

Check failure on line 11 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body has extra section(s)

error[markdown-order-section]: body has extra section(s) --> EIPS/eip-196.md | 11 | ## Simple Summary | ::: EIPS/eip-196.md | 92 | ## Implementation | = help: see https://ethereum.github.io/eipw/markdown-order-section/

Check failure on line 11 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body has extra section(s)

error[markdown-order-section]: body has extra section(s) --> EIPS/eip-196.md | 11 | ## Simple Summary | ::: EIPS/eip-196.md | 92 | ## Implementation | = help: see https://ethereum.github.io/eipw/markdown-order-section/

Check failure on line 11 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body has extra section(s)

error[markdown-order-section]: body has extra section(s) --> EIPS/eip-196.md | 11 | ## Simple Summary | ::: EIPS/eip-196.md | 92 | ## Implementation | = help: see https://ethereum.github.io/eipw/markdown-order-section/

Precompiled contracts for elliptic curve operations are required in order to perform zkSNARK verification within the block gas limit.

Expand All @@ -31,7 +31,7 @@
Address for MUL: 0x7

The curve is defined by:
```

Check failure on line 34 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-196.md:34 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 34 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-196.md:34 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 34 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-196.md:34 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]
Y^2 = X^3 + 3
over the field F_p with
p = 21888242871839275222246405745257275088696311157297823662689037894645226208583
Expand All @@ -39,7 +39,7 @@

### Encoding

Field elements and scalars are encoded as 32 byte big-endian numbers. Curve points are encoded as two field elements `(x, y)`, where the point at infinity is encoded as `(0, 0)`.
Field elements and scalars are encoded as 32 byte big-endian numbers. Curve points are encoded as two field elements `(x, y)` representing the affine coordinates, where the point at infinity is encoded as `(0, 0)`.

Tuples of objects are encoded as their concatenation.

Expand All @@ -51,12 +51,12 @@

Invalid input: For both contracts, if any input point does not lie on the curve or any of the field elements (point coordinates) is equal or larger than the field modulus p, the contract fails. The scalar can be any number between `0` and `2**256-1`.

#### ADD

Check failure on line 54 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### ADD"]

EIPS/eip-196.md:54 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### ADD"]

Check failure on line 54 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### ADD"]

EIPS/eip-196.md:54 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### ADD"]

Check failure on line 54 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### ADD"]

EIPS/eip-196.md:54 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### ADD"]
Input: two curve points `(x, y)`.
Output: curve point `x + y`, where `+` is point addition on the elliptic curve `alt_bn128` specified above.
Fails on invalid input and consumes all gas provided.

#### MUL

Check failure on line 59 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### MUL"]

EIPS/eip-196.md:59 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### MUL"]

Check failure on line 59 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### MUL"]

EIPS/eip-196.md:59 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### MUL"]

Check failure on line 59 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### MUL"]

EIPS/eip-196.md:59 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "#### MUL"]
Input: curve point and scalar `(x, s)`.
Output: curve point `s * x`, where `*` is the scalar multiplication on the elliptic curve `alt_bn128` specified above.
Fails on invalid input and consumes all gas.
Expand Down Expand Up @@ -93,12 +93,12 @@

Implementation of these primitives are available here:

- [libff](https://github.com/scipr-lab/libff/blob/master/libff/algebra/curves/alt_bn128/alt_bn128_g1.cpp) (C++)

Check failure on line 96 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

error[markdown-rel-links]: non-relative link or image --> EIPS/eip-196.md | 96 | - [libff](https://github.com/scipr-lab/libff/blob/master/libff/algebra/curves/alt_bn128/alt_bn128_g1.cpp) (C++) | = help: see https://ethereum.github.io/eipw/markdown-rel-links/

Check failure on line 96 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

error[markdown-rel-links]: non-relative link or image --> EIPS/eip-196.md | 96 | - [libff](https://github.com/scipr-lab/libff/blob/master/libff/algebra/curves/alt_bn128/alt_bn128_g1.cpp) (C++) | = help: see https://ethereum.github.io/eipw/markdown-rel-links/

Check failure on line 96 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

error[markdown-rel-links]: non-relative link or image --> EIPS/eip-196.md | 96 | - [libff](https://github.com/scipr-lab/libff/blob/master/libff/algebra/curves/alt_bn128/alt_bn128_g1.cpp) (C++) | = help: see https://ethereum.github.io/eipw/markdown-rel-links/
- [bn](https://github.com/zcash/bn/blob/master/src/groups/mod.rs) (Rust)

Check failure on line 97 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

error[markdown-rel-links]: non-relative link or image --> EIPS/eip-196.md | 97 | - [bn](https://github.com/zcash/bn/blob/master/src/groups/mod.rs) (Rust) |

Check failure on line 97 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

error[markdown-rel-links]: non-relative link or image --> EIPS/eip-196.md | 97 | - [bn](https://github.com/zcash/bn/blob/master/src/groups/mod.rs) (Rust) |

Check failure on line 97 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

error[markdown-rel-links]: non-relative link or image --> EIPS/eip-196.md | 97 | - [bn](https://github.com/zcash/bn/blob/master/src/groups/mod.rs) (Rust) |

In both codebases, a specific group on the curve alt_bn128 is used and is called G1.

- [Python](https://github.com/ethereum/py_pairing/blob/master/py_ecc/bn128/bn128_curve.py) - probably most self-contained and best readable.

Check failure on line 101 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

error[markdown-rel-links]: non-relative link or image --> EIPS/eip-196.md | 101 | - [Python](https://github.com/ethereum/py_pairing/blob/master/py_ecc/bn128/bn128_curve.py) - probably most self-contained and best readable. |

Check failure on line 101 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

error[markdown-rel-links]: non-relative link or image --> EIPS/eip-196.md | 101 | - [Python](https://github.com/ethereum/py_pairing/blob/master/py_ecc/bn128/bn128_curve.py) - probably most self-contained and best readable. |

Check failure on line 101 in EIPS/eip-196.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

non-relative link or image

error[markdown-rel-links]: non-relative link or image --> EIPS/eip-196.md | 101 | - [Python](https://github.com/ethereum/py_pairing/blob/master/py_ecc/bn128/bn128_curve.py) - probably most self-contained and best readable. |

## Copyright

Expand Down
2 changes: 1 addition & 1 deletion EIPS/eip-197.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
created: 2017-02-06
---

## Simple Summary

Check failure on line 11 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body has extra section(s)

error[markdown-order-section]: body has extra section(s) --> EIPS/eip-197.md | 11 | ## Simple Summary | ::: EIPS/eip-197.md | 107 | ## Implementation |

Check failure on line 11 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body has extra section(s)

error[markdown-order-section]: body has extra section(s) --> EIPS/eip-197.md | 11 | ## Simple Summary | ::: EIPS/eip-197.md | 107 | ## Implementation |

Check failure on line 11 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

body has extra section(s)

error[markdown-order-section]: body has extra section(s) --> EIPS/eip-197.md | 11 | ## Simple Summary | ::: EIPS/eip-197.md | 107 | ## Implementation |

Precompiled contracts for elliptic curve pairing operations are required in order to perform zkSNARK verification within the block gas limit.

Expand Down Expand Up @@ -57,7 +57,7 @@
The group `G_1` is defined on the curve `Y^2 = X^3 + 3` over the field `F_p` with `p = 21888242871839275222246405745257275088696311157297823662689037894645226208583` with generator `P1 = (1, 2)`.

The group `G_2` is defined on the curve `Y^2 = X^3 + 3/(i+9)` over a different field `F_p^2 = F_p[i] / (i^2 + 1)` (p is the same as above) with generator
```

Check failure on line 60 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:60 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 60 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:60 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 60 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:60 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]
P2 = (
11559732032986387107991004021392285783925812861821192530917403151452391805634 * i +
10857046999023057135944570762232829481370756359578518086990519993285655852781,
Expand All @@ -75,7 +75,7 @@

Elements `a * i + b` of `F_p^2` are encoded as two elements of `F_p`, `(a, b)`.

Elliptic curve points are encoded as a Jacobian pair `(X, Y)` where the point at infinity is encoded as `(0, 0)`.
Elliptic curve points are encoded as as two field elements `(x, y)` representing the affine coordinates where the point at infinity is encoded as `(0, 0)`.

Note that the number `k` is derived from the input length.

Expand Down Expand Up @@ -112,16 +112,16 @@
(2) `e` is non-degenerate

Now observe that
```

Check failure on line 115 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:115 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 115 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:115 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 115 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:115 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]
log_P1(a1) * log_P2(b1) + ... + log_P1(ak) * log_P2(bk) = 0 (in F_q)
```

Check failure on line 117 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:117 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 117 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:117 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 117 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:117 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]
if and only if
```

Check failure on line 119 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:119 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 119 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:119 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 119 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:119 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]
e(P1, P2)^(log_P1(a1) * log_P2(b1) + ... + log_P1(ak) * log_P2(bk)) = 1 (in G_T)
```

Furthermore, the left hand side of this equation is equal to
```

Check failure on line 124 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:124 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 124 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:124 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]

Check failure on line 124 in EIPS/eip-197.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Fenced code blocks should be surrounded by blank lines [Context: "```"]

EIPS/eip-197.md:124 MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]
e(log_P1(a1) * P1, log_P2(b1) * P2) * ... * e(log_P1(ak) * P1, log_P2(bk) * P2)
= e(a1, b1) * ... * e(ak, bk)
```
Expand Down
Loading