@@ -25,6 +25,8 @@ lazy_static! {
2525const MAX_PROOF_SIZE : usize = 16 * 1024 ;
2626const MAX_PUB_INPUT_SIZE : usize = 6 * 1024 ;
2727const PROTOCOL_STATE_HASH_SIZE : usize = 32 ;
28+ // TODO(gabrielbosio): check that this length is always the same for every block
29+ const PROTOCOL_STATE_SIZE : usize = 2060 ;
2830
2931#[ no_mangle]
3032pub extern "C" fn verify_protocol_state_proof_ffi (
@@ -108,13 +110,14 @@ pub fn parse_protocol_state_pub(
108110 ) ,
109111 String ,
110112> {
111- let ( tip_protocol_state_hash, tip_protocol_state, candidate_offset) =
112- parse_protocol_state_with_hash ( & protocol_state_pub) ?;
113+ let ( tip_protocol_state_hash, tip_protocol_state) = parse_protocol_state_with_hash (
114+ & protocol_state_pub[ ..( PROTOCOL_STATE_HASH_SIZE + PROTOCOL_STATE_SIZE ) ] ,
115+ ) ?;
113116
114- let ( candidate_protocol_state_hash, candidate_protocol_state, protocol_state_pub_len ) =
115- parse_protocol_state_with_hash ( & protocol_state_pub[ candidate_offset.. ] ) ? ;
116-
117- debug_assert_eq ! ( protocol_state_pub_len , protocol_state_pub . len ( ) ) ;
117+ let ( candidate_protocol_state_hash, candidate_protocol_state) = parse_protocol_state_with_hash (
118+ & protocol_state_pub[ ( PROTOCOL_STATE_HASH_SIZE + PROTOCOL_STATE_SIZE )
119+ .. ( ( PROTOCOL_STATE_HASH_SIZE + PROTOCOL_STATE_SIZE ) * 2 ) ] ,
120+ ) ? ;
118121
119122 Ok ( (
120123 tip_protocol_state_hash,
@@ -126,33 +129,25 @@ pub fn parse_protocol_state_pub(
126129
127130fn parse_protocol_state_with_hash (
128131 protocol_state_pub : & [ u8 ] ,
129- ) -> Result < ( Fp , MinaStateProtocolStateValueStableV2 , usize ) , String > {
130- let protocol_state_hash = Fp :: from_bytes ( & protocol_state_pub[ ..PROTOCOL_STATE_HASH_SIZE ] )
131- . map_err ( |err| err. to_string ( ) ) ?;
132-
133- let mut protocol_state_size_bytes = [ 0u8 ; 4 ] ;
134- protocol_state_size_bytes. copy_from_slice (
135- & protocol_state_pub[ PROTOCOL_STATE_HASH_SIZE ..( PROTOCOL_STATE_HASH_SIZE + 4 ) ] ,
136- ) ;
137- let protocol_state_size = u32:: from_be_bytes ( protocol_state_size_bytes) as usize ;
138-
139- let protocol_state_base64 = std:: str:: from_utf8 (
140- & protocol_state_pub
141- [ ( PROTOCOL_STATE_HASH_SIZE + 4 ) ..( PROTOCOL_STATE_HASH_SIZE + 4 + protocol_state_size) ] ,
142- )
143- . map_err ( |err| err. to_string ( ) ) ?;
132+ ) -> Result <
133+ (
134+ ark_ff:: Fp256 < mina_curves:: pasta:: fields:: FpParameters > ,
135+ MinaStateProtocolStateValueStableV2 ,
136+ ) ,
137+ String ,
138+ > {
139+ let protocol_state_hash =
140+ Fp :: from_bytes ( & protocol_state_pub[ ..32 ] ) . map_err ( |err| err. to_string ( ) ) ?;
141+ let protocol_state_base64 =
142+ std:: str:: from_utf8 ( & protocol_state_pub[ 32 ..] ) . map_err ( |err| err. to_string ( ) ) ?;
144143 let protocol_state_binprot = BASE64_STANDARD
145144 . decode ( protocol_state_base64)
146145 . map_err ( |err| err. to_string ( ) ) ?;
147146 let protocol_state =
148147 MinaStateProtocolStateValueStableV2 :: binprot_read ( & mut protocol_state_binprot. as_slice ( ) )
149148 . map_err ( |err| err. to_string ( ) ) ?;
150149
151- Ok ( (
152- protocol_state_hash,
153- protocol_state,
154- PROTOCOL_STATE_HASH_SIZE + 4 + protocol_state_size,
155- ) )
150+ Ok ( ( protocol_state_hash, protocol_state) )
156151}
157152
158153#[ cfg( test) ]
@@ -164,7 +159,7 @@ mod test {
164159 const PROTOCOL_STATE_PUB_BYTES : & [ u8 ] =
165160 include_bytes ! ( "../../../../batcher/aligned/test_files/mina/protocol_state.pub" ) ;
166161 const BAD_PROTOCOL_STATE_PUB_BYTES : & [ u8 ] =
167- include_bytes ! ( "../../../../batcher/aligned/test_files/mina/protocol_state_bad_hash .pub" ) ;
162+ include_bytes ! ( "../../../../batcher/aligned/test_files/mina/bad_protocol_state .pub" ) ;
168163 // BAD_PROTOCOL_STATE_PUB_BYTES has an invalid hash.
169164
170165 #[ test]
0 commit comments