[package]
authors = ["Dragan Rakita <dragan0rakita@gmail.com>"]
description = "revm Precompiles - Ethereum compatible precompiled contracts"
edition = "2021"
keywords = ["no_std", "ethereum", "evm", "revm", "precompiles"]
license = "MIT"
name = "revm-precompile"
repository = "https://github.com/bluealloy/revm"
version = "5.0.0"

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[dependencies]
revm-primitives = { path = "../primitives", version = "3.0.0", default-features = false }
bn = { package = "substrate-bn", version = "0.6", default-features = false }
once_cell = { version = "1.19", default-features = false, features = ["alloc"] }
ripemd = { version = "0.1", default-features = false }
sha2 = { version = "0.10", default-features = false }
# modexp precompile
aurora-engine-modexp = { version = "1.0", default-features = false }

# Optional KZG point evaluation precompile
c-kzg = { version = "0.4.2", default-features = false, optional = true }

# ecRecover precompile
k256 = { version = "0.13.3", default-features = false, features = ["ecdsa"] }
secp256k1 = { version = "0.28.2", default-features = false, features = [
    "alloc",
    "recovery",
], optional = true }


[features]
default = ["std", "c-kzg", "secp256k1", "portable"]
std = [
    "revm-primitives/std",
    "k256/std",
    "once_cell/std",
    "ripemd/std",
    "sha2/std",
    "c-kzg?/std",
    "secp256k1?/std",
]
asm-keccak = ["revm-primitives/asm-keccak"]

optimism = ["revm-primitives/optimism"]
# Optimism default handler enabled Optimism handler register by default in EvmBuilder.
optimism-default-handler = [
    "optimism",
    "revm-primitives/optimism-default-handler",
]
negate-optimism-default-handler = [
    "revm-primitives/negate-optimism-default-handler",
]

# These libraries may not work on all no_std platforms as they depend on C.

# Enables the KZG point evaluation precompile.
c-kzg = ["dep:c-kzg", "revm-primitives/c-kzg"]
portable = ["revm-primitives/portable", "c-kzg?/portable"]

# Use `secp256k1` as a faster alternative to `k256`.
# The problem that `secp256k1` has is it fails to build for `wasm` target on Windows and Mac as it is c lib.
# In Linux it passes. If you don't require to build wasm on win/mac, it is safe to use it and it is enabled by default.
secp256k1 = ["dep:secp256k1"]
