Skip to content

Commit dc1a0c7

Browse files
author
Mason Liang
committed
Add failing empty storage proof tests
1 parent 011fa6a commit dc1a0c7

File tree

1 file changed

+83
-8
lines changed

1 file changed

+83
-8
lines changed

src/tests.rs

Lines changed: 83 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use halo2_proofs::{
1212
use mpt_zktrie::state::{builder::HASH_SCHEME_DONE, witness::WitnessGenerator, ZktrieState};
1313

1414
const N_ROWS: usize = 1024;
15+
const STORAGE_ADDRESS: Address = Address::repeat_byte(1);
1516

1617
fn initial_generator() -> WitnessGenerator {
1718
assert!(*HASH_SCHEME_DONE);
@@ -33,7 +34,7 @@ fn initial_storage_generator() -> WitnessGenerator {
3334
for i in 40..60 {
3435
generator.handle_new_state(
3536
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
36-
Address::repeat_byte(1),
37+
STORAGE_ADDRESS,
3738
U256::one(),
3839
U256::zero(),
3940
Some(U256::from(i)),
@@ -519,7 +520,7 @@ fn empty_storage_type_1_update_a() {
519520
let mut generator = initial_storage_generator();
520521
let trace = generator.handle_new_state(
521522
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
522-
Address::repeat_byte(1),
523+
STORAGE_ADDRESS,
523524
U256::from(307),
524525
U256::zero(),
525526
Some(U256::from(23412321)),
@@ -562,7 +563,7 @@ fn empty_storage_type_2_update_a() {
562563
let mut generator = initial_storage_generator();
563564
let trace = generator.handle_new_state(
564565
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
565-
Address::repeat_byte(1),
566+
STORAGE_ADDRESS,
566567
U256::from(307),
567568
U256::zero(),
568569
Some(U256::from(502)),
@@ -605,7 +606,7 @@ fn empty_storage_type_2_update_b() {
605606
let mut generator = initial_storage_generator();
606607
let trace = generator.handle_new_state(
607608
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
608-
Address::repeat_byte(1),
609+
STORAGE_ADDRESS,
609610
U256::from(307),
610611
U256::zero(),
611612
Some(U256::from(500)),
@@ -655,7 +656,7 @@ fn empty_storage_type_1_update_b() {
655656
let mut generator = initial_storage_generator();
656657
let trace = generator.handle_new_state(
657658
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
658-
Address::repeat_byte(1),
659+
STORAGE_ADDRESS,
659660
U256::from(307),
660661
U256::zero(),
661662
Some(U256::from(1)),
@@ -698,7 +699,7 @@ fn empty_storage_type_1_update_c() {
698699
let mut generator = initial_storage_generator();
699700
let trace = generator.handle_new_state(
700701
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
701-
Address::repeat_byte(1),
702+
STORAGE_ADDRESS,
702703
U256::from(307),
703704
U256::zero(),
704705
Some(U256::from(3)),
@@ -771,7 +772,7 @@ fn empty_storage_trie() {
771772
let mut generator = initial_generator();
772773
let trace = generator.handle_new_state(
773774
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
774-
Address::repeat_byte(2),
775+
STORAGE_ADDRESS,
775776
U256::from(324123123u64),
776777
U256::zero(),
777778
Some(U256::from(3)),
@@ -824,7 +825,81 @@ fn depth_1_type_1_storage() {
824825
// This tests the case where the hash domain for calculating the storage root changes
825826
// because of an insertion or deletion.
826827

827-
let trace: SMTTrace = serde_json::from_str(&include_str!("traces/depth_1_type_1_storage.json")).unwrap();
828+
let trace: SMTTrace =
829+
serde_json::from_str(&include_str!("traces/depth_1_type_1_storage.json")).unwrap();
828830
mock_prove(vec![(MPTProofType::StorageChanged, trace.clone())]);
829831
mock_prove(vec![(MPTProofType::StorageChanged, reverse(trace))]);
830832
}
833+
834+
#[test]
835+
fn depth_1_type_1_empty_storage() {
836+
let mut generator = initial_generator();
837+
for key in [2, 10] {
838+
generator.handle_new_state(
839+
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
840+
Address::repeat_byte(2),
841+
U256::from(7),
842+
U256::zero(),
843+
Some(U256::from(key)),
844+
);
845+
}
846+
let trace = generator.handle_new_state(
847+
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
848+
Address::repeat_byte(2),
849+
U256::zero(),
850+
U256::zero(),
851+
Some(U256::from(3)),
852+
);
853+
854+
let json = serde_json::to_string_pretty(&trace).unwrap();
855+
let trace: SMTTrace = serde_json::from_str(&json).unwrap();
856+
857+
let proof = Proof::from((MPTProofType::StorageDoesNotExist, trace.clone()));
858+
proof.check();
859+
mock_prove(vec![(MPTProofType::StorageDoesNotExist, trace)]);
860+
}
861+
862+
#[test]
863+
fn empty_storage_type_1() {
864+
let mut generator = initial_storage_generator();
865+
866+
let trace = generator.handle_new_state(
867+
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
868+
STORAGE_ADDRESS,
869+
U256::zero(),
870+
U256::zero(),
871+
Some(U256::from(3)),
872+
);
873+
dbg!(trace.clone());
874+
assert!(
875+
trace.state_path[0].clone().unwrap().leaf.is_some(),
876+
"storage key = 3 is not type 1"
877+
);
878+
879+
let json = serde_json::to_string_pretty(&trace).unwrap();
880+
let trace: SMTTrace = serde_json::from_str(&json).unwrap();
881+
882+
mock_prove(vec![(MPTProofType::StorageDoesNotExist, trace)]);
883+
}
884+
885+
#[test]
886+
fn empty_storage_type_2() {
887+
let mut generator = initial_storage_generator();
888+
889+
let trace = generator.handle_new_state(
890+
mpt_zktrie::mpt_circuits::MPTProofType::StorageChanged,
891+
STORAGE_ADDRESS,
892+
U256::zero(),
893+
U256::zero(),
894+
Some(U256::from(500)),
895+
);
896+
assert!(
897+
trace.state_path[0].clone().unwrap().leaf.is_none(),
898+
"storage key = 500 is not type 2"
899+
);
900+
901+
let json = serde_json::to_string_pretty(&trace).unwrap();
902+
let trace: SMTTrace = serde_json::from_str(&json).unwrap();
903+
904+
mock_prove(vec![(MPTProofType::StorageDoesNotExist, trace)]);
905+
}

0 commit comments

Comments
 (0)