GitHubTwitterZKHints

Final (11)

EIP-196: Precompiled contracts for addition and scalar multiplication on the elliptic curve alt_bn128External Link
This EIP is particularly important for understanding ZK cryptography in Ethereum.

TL;DR

This EIP introduces precompiled contracts for elliptic curve operations to enable zkSNARK verification within the block gas limit, enhancing privacy and scalability on Ethereum.

Specification

Two precompiled contracts were added on the alt_bn128 curve (Y^2 = X^3 + 3):

  • Point Addition (ECADD)
    • Address: 0x6
    • Gas Cost: 500
    • Input: Two curve points (x, y).
    • Output: The resulting curve point from the addition.
  • Scalar Multiplication (ECMUL)
    • Address: 0x7
    • Gas Cost: 40,000
    • Input: A curve point (x, y) and a scalar s.
    • Output: The resulting curve point from the multiplication.

Key Details

  • Encoding: Field elements and scalars are 32-byte big-endian numbers. Curve points are (x, y), with infinity as (0, 0).
  • Error Handling: Contracts fail if input points are not on the curve or if coordinates exceed the field modulus.
  • Rationale: The alt_bn128 curve was chosen for its efficiency in pairing-based cryptography and for compatibility with ZCash components.
EIP-197: Precompiled contracts for optimal ate pairing check on the elliptic curve alt_bn128External Link
This EIP is particularly important for understanding ZK cryptography in Ethereum.

TL;DR

This EIP introduces a precompiled contract for pairing checks on the alt_bn128 elliptic curve. This is a crucial component for verifying zkSNARKs efficiently on-chain, complementing EIP-196.

Specification

A precompiled contract was added to perform a pairing check, which is a form of multiplicatively homomorphic operation essential for zkSNARKs.

  • Pairing Check (BNPAIR)
    • Address: 0x8
    • Gas Cost: 80,000 * k + 100,000 (where k is the number of pairs)
    • Input: A series of point pairs (a1, b1, a2, b2, ..., ak, bk).
    • Output: Returns 1 if the pairing equation e(a1, b1) * ... * e(ak, bk) = 1 is satisfied, otherwise 0.

Key Details

  • Groups: The operation involves two groups, G1 (on F_p) and G2 (on F_p^2), both derived from the alt_bn128 curve.
  • Input Encoding: The input is a concatenation of encoded points. The total length must be a multiple of 192 bytes (96 bytes for a G1 point and 96 for a G2 point).
  • Rationale: Instead of evaluating a full pairing, this EIP specifies a pairing *check*. This is sufficient for zkSNARK verification and avoids the complexity of handling the pairing's output field (F_p^12).
EIP-1108: Reduce alt_bn128 precompile gas costsExternal Link

TL;DR

This EIP significantly reduces the gas costs for the alt_bn128 curve operations (ECADD, ECMUL, and pairing checks) to reflect performance improvements in Ethereum clients like Geth and Parity.

Gas Cost Reduction

The gas costs for precompiles introduced in EIP-196 and EIP-197 were updated as follows:

ContractPrevious CostNew Cost
ECADD500150
ECMUL40,0006,000
Pairing Check80,000 * k + 100,00034,000 * k + 45,000

Rationale

The cost reduction makes privacy and scaling solutions (like AZTEC, Matter Labs, and Zether) that rely on these elliptic curve operations much more practical and affordable on the Ethereum mainnet.

ERC-1271: Standard Signature Validation Method for ContractsExternal Link

TL;DR

This EIP defines a standard way for smart contracts to verify signatures, enabling them to act like externally owned accounts (EOAs) for authentication. Contracts can implement an isValidSignature function, allowing other contracts to check if a signature is valid on their behalf. This is crucial for applications like decentralized exchanges with off-chain order books where smart contract wallets need to sign orders.

Specification

A contract that wishes to be able to sign messages must implement the ERC1271 interface, which contains a single function:

function isValidSignature(
  bytes32 _hash,
  bytes memory _signature
) public view returns (bytes4 magicValue);
  • Functionality: When called, this function should return a magic value (0x1626ba7e) if the signature is valid for the given hash. Otherwise, it should return a different value.
  • State: The function must not modify state (it is a view function).
  • Flexibility: The implementation can use any logic to validate the signature, such as checking against a list of authorized signers, using multi-sig logic, or supporting different signature schemes.
ERC-2098: Compact Signature RepresentationExternal Link

TL;DR

This ERC proposes a compact 64-byte signature representation for secp256k1 signatures, down from the standard 65 bytes. It achieves this by storing the yParity bit (recovery ID) in the most significant bit of the s value, which is otherwise unused in canonical signatures. This saves space and gas, especially in contexts like meta-transactions.

Specification

A standard signature consists of r, s, and yParity. Since the top bit of s is always zero for canonical signatures (per EIP-2), this ERC "hijacks" that unused bit to store the yParity. The resulting 64-byte signature is a concatenation of two 32-byte values:

  • r: The first 32 bytes, representing the x-coordinate of the signature point.
  • yParityAndS: The second 32 bytes, which combines the yParity and s.

Visually, the structure is:

[256-bit r value][1-bit yParity value][255-bit s value]
EIP-2537: Precompile for BLS12-381 curve operationsUpdatedExternal Link
This EIP is particularly important for understanding ZK cryptography in Ethereum.

TL;DR

This EIP introduces a set of precompiled contracts for operations on the BLS12-381 curve, providing a higher security level (120+ bits) compared to the older BN254 curve. These operations are essential for advanced cryptographic schemes like BLS signatures, which are critical for Ethereum's scalability and consensus upgrades.

New Precompiles

Seven new precompiles were added to support various operations:

OperationAddressGas Cost
G1 Addition0x0b375
G2 Addition0x0d600
G1 MSM0x0cFormula-based
G2 MSM0x0eFormula-based
Pairing Check0x0f32,600 * k + 37,700
Map Fp to G10x105,500
Map Fp2 to G20x1123,800

Rationale

  • MSM as a separate call: Providing a dedicated Multi-Scalar Multiplication (MSM) precompile is more gas-efficient than performing many individual multiplication and addition calls. It saves on both computational cost (by using algorithms like Pippenger's) and the overhead of multiple CALL opcodes.
  • No dedicated MUL call: A separate multiplication (MUL) precompile is unnecessary because a single multiplication is just an MSM with one pair (k=1). The MSM precompile handles this case efficiently.
EIP-2565: ModExp Gas CostExternal Link

TL;DR

This EIP reprices the ModExp (modular exponentiation) precompile to more accurately reflect its true computational cost. This makes various cryptographic functions that depend on it (like VDFs, SNARKs, and accumulators) cheaper and more practical to use on Ethereum.

New Gas Cost Formula

A new algorithm was introduced to calculate the gas cost, replacing the one from EIP-198. The formula is designed to better approximate the complexity of the underlying "bigint" library operations.

max(200, floor(multiplication_complexity * iteration_count / 3))
  • Multiplication Complexity: Approximates the cost of a multiplication, calculated as (ceil(max(base_length, modulus_length) / 8))^2.
  • Iteration Count: Approximates the number of multiplications needed, based on the bit length of the exponent.

Rationale

The previous formula from EIP-198 was found to be an inaccurate approximation. The new formula better models the performance of modern exponentiation algorithms, and the gas cost is calibrated against other precompiles like ECRecover to ensure network security and prevent DoS vectors.

ERC-5732: Commit InterfaceExternal Link

TL;DR

This ERC defines a standard interface for commit-reveal schemes. It provides a generic commit function that can be added to any contract, allowing users to commit to an action without revealing it immediately. This helps prevent front-running attacks and adds a layer of privacy to applications like voting systems. The reveal mechanism is intentionally left open for developers to implement as needed.

Specification

The standard defines two interfaces for implementing commit-reveal schemes. The core interface is minimal for backward compatibility, while the general interface provides more features.

interface IERC_COMMIT_CORE {
    function commit(bytes32 _commitment) payable external;
}

interface IERC_COMMIT_GENERAL {
    event Commit(
        uint256 indexed _timePoint,
        address indexed _from,
        bytes32 indexed _commitment,
        bytes _extraData);

    function commitFrom(
        address _from,
        bytes32 _commitment,
        bytes calldata _extraData)
    payable external returns(uint256 timePoint);
}
ERC-6492: Signature Validation for Predeploy ContractsExternal Link

TL;DR

This ERC extends EIP-1271 to allow signature verification for smart contracts that have not been deployed yet (counterfactual accounts). It introduces a wrapper format for signatures that includes the necessary data to deploy the contract, enabling dApps to verify signatures from users who haven't made their first on-chain transaction.

Specification

When a contract is not yet deployed, it wraps its standard EIP-1271 signature with deployment data. The wrapper format is detected by a specific magicBytes suffix.

  • Wrapper Format:concat(abi.encode((create2Factory, factoryCalldata, originalSignature)), magicBytes)
  • Magic Suffix: The signature ends with 0x64926492...6492.
  • Verification Process: A verifier checks for the magic suffix. If present, it uses the provided create2Factory and factoryCalldata to deploy the contract. After deployment, it calls the standard isValidSignature function on the now-deployed contract with the original, unwrapped signature.
ERC-7007: Verifiable AI-Generated Content TokenExternal Link

TL;DR

This ERC extends ERC-721 to create verifiable AI-Generated Content (AIGC) NFTs. It provides a standard way to prove that a piece of digital content was generated by a specific AI model with a specific prompt, using techniques like Zero-Knowledge Machine Learning (zkML) or Optimistic Machine Learning (opML). This enables on-chain provenance for AI art and new monetization models for model creators.

Specification

The standard introduces a core interface, IERC7007, which must be implemented alongside ERC-721. It includes:

  • addAigcData(...): A function to associate AI-generated data (the content) and a proof with a token.
  • verify(...): A view function that checks if the AI-generated data is valid for a given prompt and proof. This is where the zkML or opML verification logic resides.
  • Optional Extensions: Includes Enumerable for discovering prompts/tokens and Updatable to handle data changes, which is particularly useful in optimistic systems.

A key design choice is that the tokenId is derived from the hash of the prompt, ensuring that each unique prompt corresponds to a single, unique NFT.

ERC-7734: Decentralized Identity Verification (DID)External Link

TL;DR

This ERC introduces a minimalistic standard for decentralized identity (DID) verification. It allows users to create, verify, and revoke their identity through a smart contract, using cryptographic hashes to keep sensitive data off-chain. The goal is to provide a simple, private, and user-controlled identity layer for dApps without the complexity of other DID solutions.

Specification

The standard defines an IDecentralizedIdentity interface with the following key components:

  • Identity Struct: Stores the user's address, an identity hash, verification hashes, and a boolean isVerified status.
  • Core Functions:
    • createIdentity(bytes32 identityHash): Creates a new identity for the caller.
    • verifyIdentity(bytes32[2] calldata verificationHashes): Verifies the identity by submitting hashes derived from off-chain proofs.
    • revokeIdentity(): Revokes the verification status of an identity.
  • Events: Emits IdentityCreated, IdentityVerified, and IdentityRevoked events for transparency and traceability.

Last Call (1)

ERC-7913: Signature VerifiersUpdatedExternal Link

TL;DR

This ERC provides a standard way to verify signatures from keys that don't have a native Ethereum address, such as those from mobile secure enclaves (secp256r1), RSA hardware, or ZK-based systems. It extends ERC-1271 by introducing shared "verifier" contracts, making it cheaper and easier to integrate diverse cryptographic keys into account abstraction.

Specification

Instead of identifying a signer by a single address, this standard uses a (verifier, key) pair:

  • Verifier: A smart contract that knows how to validate signatures for a specific type of key (e.g., a secp256r1 verifier).
  • Key: The public key material, represented as bytes.

The verifier contract must implement the IERC7913SignatureVerifier interface, which has a single function:

interface IERC7913SignatureVerifier {
  function verify(
    bytes calldata key,
    bytes32 hash,
    bytes calldata signature
  ) external view returns (bytes4);
}

On successful verification, the function must return its own selector (0x024ad318).

Review (2)

ERC-7812: ZK Identity RegistryUpdatedExternal Link

TL;DR

This ERC introduces a singleton on-chain registry for storing private, provable statements. It allows users and protocols to anchor commitments (blinded data) to a shared database and later use Zero-Knowledge proofs to verify claims about this data without revealing it. This creates a standardized, reusable foundation for ZK-based identity, reputation, and other privacy-preserving systems.

Specification

The system is built around a central EvidenceRegistry contract that manages a provable key-value store called EvidenceDB, which is implemented as a Sparse Merkle Tree (SMT).

  • EvidenceRegistry: A singleton contract that acts as the main entry point. It provides functions like addStatement, removeStatement, and updateStatement.
  • Namespace Isolation: Each statement is stored under an isolated key, generated by hashing the sender's address with the provided key. This prevents one registrar from overwriting another's data.
  • Registrars: Developers can build custom "Registrar" contracts for specific use cases (e.g., identity, proof-of-attendance) that interact with the central registry.
  • ZK-Friendly: The standard recommends using ZK-friendly hash functions like Poseidon to make it efficient to generate proofs of inclusion or exclusion for the stored data.
EIP-7951: Precompile for secp256r1 Curve SupportNewExternal Link

TL;DR

This EIP adds a precompile for secp256r1 ECDSA signature verification, enabling native support for signatures from modern hardware like Apple's Secure Enclave and Android Keystore. This is crucial for account abstraction and improves user experience by allowing device-native authentication. It also fixes critical security vulnerabilities found in a previous, similar proposal (RIP-7212).

Specification

A new precompile, P256VERIFY, is introduced at address 0x100.

  • Operation: Performs ECDSA signature verification on the secp256r1 curve.
  • Gas Cost:6900
  • Input: 160 bytes, consisting of the message hash (32 bytes), signature componentsr and s (32 bytes each), and the public key coordinates qx and qy (32 bytes each).
  • Output: Returns 1 on successful verification and an empty response on failure. It includes strict input validation and does not revert on error.

Rationale

This EIP was designed to be a secure replacement for RIP-7212, fixing critical bugs related to point-at-infinity and modular comparison checks. It uses signature verification (rather than key recovery like ecrecover) because it aligns with hardware standards and is more efficient for this curve.

Draft (16)

ERC-6327: Elastic SignatureExternal Link
Authors:
Links:
Github
EIP-6493: SSZ transaction signature schemeExternal Link
ERC-7522: OIDC ZK Verifier for AA AccountExternal Link
ERC-7524: PLUME Signature in WalletsExternal Link
ERC-7597: Signature Validation Extension for PermitExternal Link
ERC-7598: Use contract signature for signed transferExternal Link
EIP-7612: Verkle state transition via an overlay treeExternal Link
ERC-7649: Bonding curve-embedded liquidity for NFTsExternal Link
ERC-7739: Readable Typed Signatures for Smart AccountsExternal Link
EIP-7748: State conversion to Verkle TreeExternal Link
ERC-7766: Signature Aggregation for ERC-4337External Link
EIP-7792: Verifiable logsExternal Link
ERC-7861: ERC-721 Verifiable Credential ExtensionNewExternal Link
ERC-7920: Composite EIP-712 SignaturesNewExternal Link
EIP-7932: Secondary Signature AlgorithmsNewExternal Link
ERC-8004: Trustless AgentsNewExternal Link

Stagnant (30)

EIP-86: Abstraction of transaction origin and signatureExternal Link
EIP-665: Add precompiled contract for Ed25519 signature verificationExternal Link
Authors:
Links:
Github
ERC-1261: Membership Verification Token (MVT)External Link
ERC-1812: Ethereum Verifiable ClaimsExternal Link
EIP-1829: Precompile for Elliptic Curve Linear CombinationsExternal Link
Authors:
Links:
Github
EIP-1895: Support for an Elliptic Curve CycleExternal Link
Authors:
Links:
Github
ERC-1922: zk-SNARK Verifier StandardExternal Link
ERC-1923: zk-SNARK Verifier Registry StandardExternal Link
EIP-1962: EC arithmetic and pairings with runtime definitionsExternal Link
ERC-2333: BLS12-381 Key GenerationExternal Link
ERC-2334: BLS12-381 Deterministic Account HierarchyExternal Link
ERC-2335: BLS12-381 KeystoreExternal Link
ERC-2494: Baby Jubjub Elliptic CurveExternal Link
EIP-2539: BLS12-377 curve operationsExternal Link
EIP-3026: BW6-761 curve operationsExternal Link
EIP-3030: BLS Remote Signer HTTP APIExternal Link
EIP-3068: Precompile for BN256 HashToCurve AlgorithmsExternal Link
ERC-5719: Signature replacement interfaceExternal Link
ERC-5851: On-Chain Verifiable CredentialsExternal Link
EIP-5988: Add Poseidon hash function precompileExternal Link
EIP-6190: Verkle-compatible SELFDESTRUCTExternal Link
ERC-6384: Human-readable offline signaturesExternal Link
EIP-6800: Ethereum state using a unified verkle treeUpdatedExternal Link
EIP-6888: Arithmetic verification at EVM levelUpdatedExternal Link
EIP-7543: EVM arbitrary precision decimal mathExternal Link
Authors:
Links:
Github
EIP-7545: Verkle proof verification precompileExternal Link
EIP-7591: BLS signed transactionsExternal Link
EIP-7657: Sync committee slashingsExternal Link
EIP-7667: Raise gas costs of hash functionsExternal Link
EIP-7736: Leaf-level state expiry in verkle treesExternal Link