-
Notifications
You must be signed in to change notification settings - Fork 67
/
Copy pathmod.rs
53 lines (45 loc) · 1.56 KB
/
mod.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//! Contains the [KonaHandleRegister] function for registering the FPVM-accelerated precompiles.
//!
//! [KonaHandleRegister]: kona_executor::KonaHandleRegister
use alloc::sync::Arc;
use kona_executor::{TrieDB, TrieDBProvider};
use kona_mpt::TrieHinter;
use revm::{
handler::register::EvmHandler,
primitives::{spec_to_generic, SpecId},
State,
};
mod bls12;
mod bn128_pair;
mod ecrecover;
mod kzg_point_eval;
/// The [KonaHandleRegister] function for registering the FPVM-accelerated precompiles.
///
/// [KonaHandleRegister]: kona_executor::KonaHandleRegister
pub(crate) fn fpvm_handle_register<F, H>(
handler: &mut EvmHandler<'_, (), &mut State<&mut TrieDB<F, H>>>,
) where
F: TrieDBProvider,
H: TrieHinter,
{
let spec_id = handler.cfg.spec_id;
handler.pre_execution.load_precompiles = Arc::new(move || {
let mut ctx_precompiles = spec_to_generic!(spec_id, {
revm::optimism::load_precompiles::<SPEC, (), &mut State<&mut TrieDB<F, H>>>()
});
// Extend with FPVM-accelerated precompiles
let override_precompiles = [
ecrecover::FPVM_ECRECOVER,
bn128_pair::FPVM_ECPAIRING,
kzg_point_eval::FPVM_KZG_POINT_EVAL,
];
ctx_precompiles.extend(override_precompiles);
if spec_id.is_enabled_in(SpecId::GRANITE) {
ctx_precompiles.extend([bn128_pair::FPVM_ECPAIRING_GRANITE]);
}
if spec_id.is_enabled_in(SpecId::ISTHMUS) {
ctx_precompiles.extend([bls12::FPVM_BLS12_PAIRING_ISTHMUS]);
}
ctx_precompiles
});
}