@@ -159,6 +159,13 @@ impl TryFrom<RawClientState> for ClientState {
159159
160160 let chain_id = ChainId :: new ( value. chain_id ) ;
161161
162+ if chain_id. version ( ) != raw_latest_height. revision_number {
163+ return Err ( Error :: UnexpectedLatestHeightRevision (
164+ chain_id. version ( ) ,
165+ raw_latest_height. revision_number ,
166+ ) ) ;
167+ }
168+
162169 let latest_height = new_height (
163170 raw_latest_height. revision_number ,
164171 raw_latest_height. revision_height ,
@@ -489,6 +496,19 @@ mod test {
489496 err => unreachable ! ( "{:?}" , err) ,
490497 }
491498
499+ cs. latest_height = Some ( Height {
500+ revision_number : 1 ,
501+ revision_height : 0 ,
502+ } ) ;
503+ let err = ClientState :: try_from ( cs. clone ( ) ) . unwrap_err ( ) ;
504+ match err {
505+ Error :: UnexpectedLatestHeightRevision ( e1, e2) => {
506+ assert_eq ! ( e1, 0 ) ;
507+ assert_eq ! ( e2, 1 ) ;
508+ }
509+ err => unreachable ! ( "{:?}" , err) ,
510+ }
511+
492512 cs. latest_height = Some ( Height :: default ( ) ) ;
493513 let err = ClientState :: try_from ( cs. clone ( ) ) . unwrap_err ( ) ;
494514 match err {
@@ -609,7 +629,7 @@ mod test {
609629 Time :: from_unix_timestamp_nanos (
610630 untrusted_header_timestamp. unix_timestamp_nanos ( ) as u128
611631 )
612- . unwrap ( ) ,
632+ . unwrap ( ) ,
613633 Time :: from_unix_timestamp_nanos ( trusted_state_timestamp. unix_timestamp_nanos ( ) as u128 )
614634 . unwrap ( ) ,
615635 ) ;
@@ -631,7 +651,7 @@ mod test {
631651 Time :: from_unix_timestamp_nanos (
632652 untrusted_header_timestamp. unix_timestamp_nanos ( ) as u128
633653 )
634- . unwrap ( ) ,
654+ . unwrap ( ) ,
635655 Time :: from_unix_timestamp_nanos ( trusted_state_timestamp. unix_timestamp_nanos ( ) as u128 )
636656 . unwrap ( ) ,
637657 ) ;
@@ -660,7 +680,7 @@ mod test {
660680 Time :: from_unix_timestamp_nanos (
661681 untrusted_header_timestamp. unix_timestamp_nanos ( ) as u128
662682 )
663- . unwrap ( ) ,
683+ . unwrap ( ) ,
664684 Time :: from_unix_timestamp_nanos ( trusted_state_timestamp. unix_timestamp_nanos ( ) as u128 )
665685 . unwrap ( ) ,
666686 ) ;
0 commit comments