@@ -12,6 +12,7 @@ use halo2_proofs::{
1212use mpt_zktrie:: state:: { builder:: HASH_SCHEME_DONE , witness:: WitnessGenerator , ZktrieState } ;
1313
1414const N_ROWS : usize = 1024 ;
15+ const STORAGE_ADDRESS : Address = Address :: repeat_byte ( 1 ) ;
1516
1617fn 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