use once_cell::race::OnceBox;
#[cfg(feature = "blst")]
use revm_precompile::bls12_381;
use revm_precompile::{secp256r1, Precompiles};
use std::boxed::Box;
pub(crate) fn fjord() -> &'static Precompiles {
static INSTANCE: OnceBox<Precompiles> = OnceBox::new();
INSTANCE.get_or_init(|| {
let mut precompiles = Precompiles::cancun().clone();
precompiles.extend([
secp256r1::P256VERIFY,
]);
Box::new(precompiles)
})
}
pub(crate) fn granite() -> &'static Precompiles {
static INSTANCE: OnceBox<Precompiles> = OnceBox::new();
INSTANCE.get_or_init(|| {
let mut precompiles = fjord().clone();
precompiles.extend([
crate::optimism::bn128::pair::GRANITE,
]);
Box::new(precompiles)
})
}
pub(crate) fn isthmus() -> &'static Precompiles {
static INSTANCE: OnceBox<Precompiles> = OnceBox::new();
INSTANCE.get_or_init(|| {
let precompiles = granite().clone();
#[cfg(feature = "blst")]
let precompiles = {
let mut precompiles = precompiles;
precompiles.extend(bls12_381::precompiles());
precompiles
};
Box::new(precompiles)
})
}