@@ -54,16 +54,9 @@ impl TryFrom<generated::ark::v1::GetInfoResponse> for server::Info {
5454 fn try_from ( value : generated:: ark:: v1:: GetInfoResponse ) -> Result < Self , Self :: Error > {
5555 let pk = value. signer_pubkey . parse ( ) . map_err ( Error :: conversion) ?;
5656
57- let vtxo_tree_expiry = bitcoin:: Sequence :: from_seconds_ceil ( value. vtxo_tree_expiry as u32 )
58- . map_err ( Error :: conversion) ?;
59-
60- let unilateral_exit_delay =
61- bitcoin:: Sequence :: from_seconds_ceil ( value. unilateral_exit_delay as u32 )
62- . map_err ( Error :: conversion) ?;
63-
64- let boarding_exit_delay =
65- bitcoin:: Sequence :: from_seconds_ceil ( value. boarding_exit_delay as u32 )
66- . map_err ( Error :: conversion) ?;
57+ let vtxo_tree_expiry = parse_sequence_number ( value. vtxo_tree_expiry ) ?;
58+ let unilateral_exit_delay = parse_sequence_number ( value. unilateral_exit_delay ) ?;
59+ let boarding_exit_delay = parse_sequence_number ( value. boarding_exit_delay ) ?;
6760
6861 let network = Network :: from_str ( value. network . as_str ( ) ) . map_err ( Error :: conversion) ?;
6962 let network = bitcoin:: Network :: from ( network) ;
@@ -112,6 +105,27 @@ impl TryFrom<generated::ark::v1::GetInfoResponse> for server::Info {
112105 }
113106}
114107
108+ fn parse_sequence_number ( value : i64 ) -> Result < bitcoin:: Sequence , Error > {
109+ /// The threshold that determines whether an expiry or exit delay should be parsed as a
110+ /// number of blocks or a number of seconds.
111+ ///
112+ /// - A value below 512 is considered a number of blocks.
113+ /// - A value over 512 is considered a number of seconds.
114+ const ARBITRARY_SEQUENCE_THRESHOLD : i64 = 512 ;
115+
116+ let sequence = if value. is_negative ( ) {
117+ return Err ( Error :: conversion ( format ! (
118+ "invalid sequence number: {value}"
119+ ) ) ) ;
120+ } else if value < ARBITRARY_SEQUENCE_THRESHOLD {
121+ bitcoin:: Sequence :: from_height ( value as u16 )
122+ } else {
123+ bitcoin:: Sequence :: from_seconds_ceil ( value as u32 ) . map_err ( Error :: conversion) ?
124+ } ;
125+
126+ Ok ( sequence)
127+ }
128+
115129impl TryFrom < & generated:: ark:: v1:: IndexerVtxo > for server:: VirtualTxOutPoint {
116130 type Error = Error ;
117131
0 commit comments