diff --git a/Cargo.toml b/Cargo.toml index a3d0d4865..0d91f3bd6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,4 +79,5 @@ engine = [] contract = ["engine"] evm_bully = [] log = [] +exit-precompiles = ["contract"] integration-test = ["log"] diff --git a/src/precompiles/mod.rs b/src/precompiles/mod.rs index 8a29218e6..48f0b7073 100644 --- a/src/precompiles/mod.rs +++ b/src/precompiles/mod.rs @@ -3,6 +3,7 @@ mod bn128; mod hash; mod identity; mod modexp; +#[cfg(feature = "exit-precompiles")] mod native; mod secp256k1; @@ -11,6 +12,7 @@ use crate::precompiles::bn128::{BN128Add, BN128Mul, BN128Pair}; use crate::precompiles::hash::{RIPEMD160, SHA256}; use crate::precompiles::identity::Identity; use crate::precompiles::modexp::ModExp; +#[cfg(feature = "exit-precompiles")] use crate::precompiles::native::{ExitToEthereum, ExitToNear}; pub(crate) use crate::precompiles::secp256k1::ecrecover; use crate::precompiles::secp256k1::ECRecover; @@ -80,7 +82,9 @@ pub fn homestead_precompiles( ECRecover::ADDRESS => Some(ECRecover::run(input, target_gas, context)), SHA256::ADDRESS => Some(SHA256::run(input, target_gas, context)), RIPEMD160::ADDRESS => Some(RIPEMD160::run(input, target_gas, context)), + #[cfg(feature = "exit-precompiles")] ExitToNear::ADDRESS => Some(ExitToNear::run(input, target_gas, context)), + #[cfg(feature = "exit-precompiles")] ExitToEthereum::ADDRESS => Some(ExitToEthereum::run(input, target_gas, context)), _ => None, } @@ -108,7 +112,9 @@ pub fn byzantium_precompiles( bn128::addresses::ADD => Some(BN128Add::::run(input, target_gas, context)), bn128::addresses::MUL => Some(BN128Mul::::run(input, target_gas, context)), bn128::addresses::PAIR => Some(BN128Pair::::run(input, target_gas, context)), + #[cfg(feature = "exit-precompiles")] ExitToNear::ADDRESS => Some(ExitToNear::run(input, target_gas, context)), + #[cfg(feature = "exit-precompiles")] ExitToEthereum::ADDRESS => Some(ExitToEthereum::run(input, target_gas, context)), _ => None, } @@ -137,7 +143,9 @@ pub fn istanbul_precompiles( bn128::addresses::MUL => Some(BN128Mul::::run(input, target_gas, context)), bn128::addresses::PAIR => Some(BN128Pair::::run(input, target_gas, context)), Blake2F::ADDRESS => Some(Blake2F::run(input, target_gas, context)), + #[cfg(feature = "exit-precompiles")] ExitToNear::ADDRESS => Some(ExitToNear::run(input, target_gas, context)), + #[cfg(feature = "exit-precompiles")] ExitToEthereum::ADDRESS => Some(ExitToEthereum::run(input, target_gas, context)), _ => None, } @@ -166,9 +174,9 @@ pub fn berlin_precompiles( bn128::addresses::MUL => Some(BN128Mul::::run(input, target_gas, context)), bn128::addresses::PAIR => Some(BN128Pair::::run(input, target_gas, context)), Blake2F::ADDRESS => Some(Blake2F::run(input, target_gas, context)), - #[cfg(feature = "contract")] + #[cfg(feature = "exit-precompiles")] ExitToNear::ADDRESS => Some(ExitToNear::run(input, target_gas, context)), - #[cfg(feature = "contract")] + #[cfg(feature = "exit-precompiles")] ExitToEthereum::ADDRESS => Some(ExitToEthereum::run(input, target_gas, context)), _ => None, } diff --git a/src/precompiles/native.rs b/src/precompiles/native.rs index f669ee1be..3163e4698 100644 --- a/src/precompiles/native.rs +++ b/src/precompiles/native.rs @@ -1,9 +1,14 @@ use evm::{Context, ExitError, ExitSucceed}; use super::{Precompile, PrecompileResult}; -use crate::prelude::{is_valid_account_id, Cow, String, Vec, U256}; -use crate::types::AccountId; - +use crate::prelude::Vec; +#[cfg(feature = "exit-precompiles")] +use crate::{ + prelude::{is_valid_account_id, Cow, String, U256}, + types::AccountId, +}; + +#[cfg(feature = "exit-precompiles")] mod costs { use crate::types::Gas; @@ -22,6 +27,7 @@ mod costs { /// Get the current nep141 token associated with the current erc20 token. /// This will fail is none is associated. +#[cfg(feature = "exit-precompiles")] fn get_nep141_from_erc20(_erc20_token: &[u8]) -> Vec { // TODO(#51): Already implemented Vec::new() @@ -43,8 +49,8 @@ impl Precompile for ExitToNear { Ok(costs::EXIT_TO_NEAR_GAS) } - #[cfg(not(feature = "contract"))] - fn run(input: &[u8], target_gas: u64, context: &Context) -> PrecompileResult { + #[cfg(not(feature = "exit-precompiles"))] + fn run(input: &[u8], target_gas: u64, _context: &Context) -> PrecompileResult { if Self::required_gas(input)? > target_gas { return Err(ExitError::OutOfGas); } @@ -52,7 +58,7 @@ impl Precompile for ExitToNear { Ok((ExitSucceed::Returned, Vec::new(), 0)) } - #[cfg(feature = "contract")] + #[cfg(feature = "exit-precompiles")] fn run(input: &[u8], target_gas: u64, context: &Context) -> PrecompileResult { if Self::required_gas(input)? > target_gas { return Err(ExitError::OutOfGas); @@ -142,8 +148,8 @@ impl Precompile for ExitToEthereum { Ok(costs::EXIT_TO_ETHEREUM_GAS) } - #[cfg(not(feature = "contract"))] - fn run(input: &[u8], target_gas: u64, context: &Context) -> PrecompileResult { + #[cfg(not(feature = "exit-precompiles"))] + fn run(input: &[u8], target_gas: u64, _context: &Context) -> PrecompileResult { if Self::required_gas(input)? > target_gas { return Err(ExitError::OutOfGas); } @@ -151,7 +157,7 @@ impl Precompile for ExitToEthereum { Ok((ExitSucceed::Returned, Vec::new(), 0)) } - #[cfg(feature = "contract")] + #[cfg(feature = "exit-precompiles")] fn run(input: &[u8], target_gas: u64, context: &Context) -> PrecompileResult { if Self::required_gas(input)? > target_gas { return Err(ExitError::OutOfGas);