Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor
  • Loading branch information
harsh-ps-2003 committed Aug 6, 2024
commit a1a488b683dd38f26dc22a5b3c28a15459b3d5bd
57 changes: 24 additions & 33 deletions crates/interpreter/src/instructions/system.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,13 @@ pub fn codecopy<H: Host + ?Sized>(interpreter: &mut Interpreter, _host: &mut H)
let len = as_usize_or_fail!(interpreter, len);
// Inform the optimizer that the bytecode cannot be EOF to remove a bounds check.
assume!(!interpreter.contract.bytecode.is_eof());
let source = interpreter.contract.bytecode.original_byte_slice();
copy_to_memory(
interpreter,
memory_offset,
code_offset,
len,
source as *const [u8],
);
if let Some(memory_offset) = copy_to_memory(interpreter, memory_offset, code_offset, len) {
let source = interpreter.contract.bytecode.original_byte_slice();
// Note: this can't panic because we resized memory to fit.
interpreter
.shared_memory
.set_data(memory_offset, code_offset, len, &*source);
}
}

pub fn calldataload<H: Host + ?Sized>(interpreter: &mut Interpreter, _host: &mut H) {
Expand Down Expand Up @@ -89,14 +88,13 @@ pub fn calldatacopy<H: Host + ?Sized>(interpreter: &mut Interpreter, _host: &mut
pop!(interpreter, memory_offset, data_offset, len);
let len = as_usize_or_fail!(interpreter, len);
let data_offset = as_usize_saturated!(data_offset);
let source = interpreter.contract.input.as_ref();
copy_to_memory(
interpreter,
memory_offset,
data_offset,
len,
source as *const [u8],
);
if let Some(memory_offset) = copy_to_memory(interpreter, memory_offset, data_offset, len) {
let source = interpreter.contract.input.as_ref();
// Note: this can't panic because we resized memory to fit.
interpreter
.shared_memory
.set_data(memory_offset, data_offset, len, source);
};
}

/// EIP-211: New opcodes: RETURNDATASIZE and RETURNDATACOPY
Expand Down Expand Up @@ -125,14 +123,13 @@ pub fn returndatacopy<H: Host + ?Sized, SPEC: Spec>(interpreter: &mut Interprete
return;
}

let source = interpreter.return_data_buffer.as_ref();
copy_to_memory(
interpreter,
memory_offset,
data_offset,
len,
source as *const [u8],
);
if let Some(memory_offset) = copy_to_memory(interpreter, memory_offset, data_offset, len) {
let source = interpreter.return_data_buffer.as_ref();
// Note: this can't panic because we resized memory to fit.
interpreter
.shared_memory
.set_data(memory_offset, data_offset, len, &*source);
};
}

/// Part of EOF `<https://eips.ethereum.org/EIPS/eip-7069>`.
Expand Down Expand Up @@ -163,21 +160,15 @@ fn copy_to_memory(
memory_offset: U256,
data_offset: usize,
len: usize,
source: *const [u8],
) {
) -> Option<usize> {
gas_or_fail!(interpreter, gas::verylowcopy_cost(len as u64));
if len == 0 {
return;
return None;
}
let memory_offset = as_usize_or_fail!(interpreter, memory_offset);
resize_memory!(interpreter, memory_offset, len);

// Note: this can't panic because we resized memory to fit.
unsafe {
interpreter
.shared_memory
.set_data(memory_offset, data_offset, len, &*source);
}
Some(memory_offset)
}

pub fn gas<H: Host + ?Sized>(interpreter: &mut Interpreter, _host: &mut H) {
Expand Down