revm_precompile/
identity.rs1use super::calc_linear_cost_u32;
3use crate::{Precompile, PrecompileError, PrecompileId, PrecompileOutput, PrecompileResult};
4use primitives::Bytes;
5
6pub const FUN: Precompile = Precompile::new(
8 PrecompileId::Identity,
9 crate::u64_to_address(4),
10 identity_run,
11);
12
13pub const IDENTITY_BASE: u64 = 15;
15pub const IDENTITY_PER_WORD: u64 = 3;
17
18pub fn identity_run(input: &[u8], gas_limit: u64) -> PrecompileResult {
24 let gas_used = calc_linear_cost_u32(input.len(), IDENTITY_BASE, IDENTITY_PER_WORD);
25 if gas_used > gas_limit {
26 return Err(PrecompileError::OutOfGas);
27 }
28 Ok(PrecompileOutput::new(
29 gas_used,
30 Bytes::copy_from_slice(input),
31 ))
32}