Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Nashtare committed Feb 21, 2024
1 parent 546136a commit c57b56a
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 1 deletion.
85 changes: 85 additions & 0 deletions evm_arithmetization/src/cpu/kernel/tests/blobhash.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
use anyhow::Result;
use ethereum_types::{H256, U256};
use plonky2::field::goldilocks_field::GoldilocksField as F;
use rand::{thread_rng, Rng};

use crate::cpu::kernel::aggregator::KERNEL;
use crate::cpu::kernel::constants::context_metadata::ContextMetadata::GasLimit;
use crate::cpu::kernel::constants::global_metadata::GlobalMetadata;
use crate::cpu::kernel::interpreter::Interpreter;
use crate::memory::segments::Segment;
use crate::witness::memory::MemoryContextState;

#[test]
fn test_valid_blobhash() -> Result<()> {
let blobhash_label = KERNEL.global_labels["sys_blobhash"];
let retdest = (0xDEADBEEFu64 + (1 << 32)).into(); // kexit_info

let versioned_hashes: Vec<U256> = vec![U256::from_big_endian(&thread_rng().gen::<H256>().0); 5];
let index = 3;
let target_hash = versioned_hashes[index];

let mut interpreter: Interpreter<F> = Interpreter::new_with_kernel(blobhash_label, vec![]);
interpreter
.generation_state
.memory
.contexts
.push(MemoryContextState::default());
interpreter.set_context(1);
interpreter.set_memory_segment(Segment::TxnBlobVersionedHashes, versioned_hashes);
interpreter.set_global_metadata_field(GlobalMetadata::BlobVersionedHashesLen, 5.into());

interpreter.set_context_metadata_field(1, GasLimit, U256::from(1000000000000u64));

interpreter.push(index.into()); // target hash index
interpreter.push(retdest); // kexit_info

interpreter.run()?;

let result = interpreter.stack();
assert_eq!(interpreter.stack_len(), 1);
assert_eq!(
result[0], target_hash,
"Resulting blobhash {:?} different from expected hash {:?}",
result[0], target_hash
);

Ok(())
}

#[test]
fn test_invalid_blobhash() -> Result<()> {
let blobhash_label = KERNEL.global_labels["sys_blobhash"];
let retdest = (0xDEADBEEFu64 + (1 << 32)).into(); // kexit_info

let versioned_hashes: Vec<U256> = vec![U256::from_big_endian(&thread_rng().gen::<H256>().0); 5];
let index = 7;
let target_hash = U256::zero(); // out of bound indexing yields 0.

let mut interpreter: Interpreter<F> = Interpreter::new_with_kernel(blobhash_label, vec![]);
interpreter
.generation_state
.memory
.contexts
.push(MemoryContextState::default());
interpreter.set_context(1);
interpreter.set_memory_segment(Segment::TxnBlobVersionedHashes, versioned_hashes);
interpreter.set_global_metadata_field(GlobalMetadata::BlobVersionedHashesLen, 5.into());

interpreter.set_context_metadata_field(1, GasLimit, U256::from(1000000000000u64));

interpreter.push(index.into()); // target hash index
interpreter.push(retdest); // kexit_info

interpreter.run()?;

let result = interpreter.stack();
assert_eq!(interpreter.stack_len(), 1);
assert_eq!(
result[0], target_hash,
"Resulting blobhash {:?} different from expected hash {:?}",
result[0], target_hash
);

Ok(())
}
1 change: 1 addition & 0 deletions evm_arithmetization/src/cpu/kernel/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ mod add11;
mod balance;
mod bignum;
mod blake2_f;
mod blobhash;
mod block_hash;
mod bls381;
mod bn254;
Expand Down
2 changes: 1 addition & 1 deletion evm_arithmetization/src/memory/segments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ impl Segment {
Segment::ContextCheckpoints => "SEGMENT_CONTEXT_CHECKPOINTS",
Segment::BlockHashes => "SEGMENT_BLOCK_HASHES",
Segment::CreatedContracts => "SEGMENT_CREATED_CONTRACTS",
Self::TxnBlobVersionedHashes => "SEGMENT_TXN_BLOB_VERSIONED_HASHES",
Segment::TxnBlobVersionedHashes => "SEGMENT_TXN_BLOB_VERSIONED_HASHES",
}
}

Expand Down

0 comments on commit c57b56a

Please sign in to comment.