@@ -83,14 +83,20 @@ fn squeezed_during_block_production() -> TransactionStatus {
8383/// Final indicates that the transaction has reached one of the final statuses (Success, Squeezed, or Failed).
8484#[ derive( Debug , Clone , PartialEq , Eq , Arbitrary ) ]
8585enum TxStatus {
86- /// The transaction has been submitted
87- Submitted ,
88- /// The transaction has been preconfirmed, but the final status could still be different
89- Preconfirmed ,
86+ /// The transaction has not reached a final status
87+ NotFinal ( NotFinalTxStatus ) ,
9088 /// The transaction has reached a final status
9189 Final ( FinalTxStatus ) ,
9290}
9391
92+ /// Struct representing a submitted transaction.
93+ #[ derive( Debug , Clone , Copy , PartialEq , Eq , Arbitrary ) ]
94+ enum NotFinalTxStatus {
95+ Submitted ,
96+ PreconfirmationSuccess ,
97+ PreconfirmationFailure ,
98+ }
99+
94100/// Represents the final transaction statuses (Success, Squeezed, Failed).
95101#[ derive( Debug , Clone , PartialEq , Eq , Arbitrary ) ]
96102enum FinalTxStatus {
@@ -99,6 +105,8 @@ enum FinalTxStatus {
99105 /// The transaction was squeezed out of the txpool (or block)
100106 /// because it was not valid to include in the block.
101107 Squeezed ,
108+ /// The transaction was squeezed out during block production.
109+ PreconfirmationSqueeze ,
102110 /// The transaction failed to execute and was included in a block.
103111 Failed ,
104112}
@@ -143,15 +151,8 @@ fn input_stream() -> impl Strategy<Value = Vec<TxStatusMessage>> {
143151#[ derive( Debug , Clone , Copy , PartialEq , Eq , Arbitrary ) ]
144152struct Error ;
145153
146- /// Struct representing a submitted transaction.
147- #[ derive( Debug , Clone , Copy , PartialEq , Eq , Arbitrary ) ]
148- enum NotFinal {
149- Submitted ,
150- Preconfirmation ,
151- }
152-
153154/// A model of the transaction status change functions control flow.
154- type Flow = ControlFlow < FinalTxStatus , NotFinal > ;
155+ type Flow = ControlFlow < FinalTxStatus , NotFinalTxStatus > ;
155156
156157/// The `transaction_status_change_model` function is a simplified version of the real
157158/// `transaction_status_change` function. It takes an `Option` and an `Iterator` as input
@@ -181,8 +182,15 @@ fn transaction_status_change_model(
181182 // If the next state is "Continue" with "Submitted" status, push it to the output vector
182183 Flow :: Continue ( not_final_status) => {
183184 match not_final_status {
184- NotFinal :: Submitted => out. push ( Ok ( TxStatus :: Submitted ) ) ,
185- NotFinal :: Preconfirmation => out. push ( Ok ( TxStatus :: Preconfirmed ) ) ,
185+ NotFinalTxStatus :: Submitted => {
186+ out. push ( Ok ( TxStatus :: NotFinal ( NotFinalTxStatus :: Submitted ) ) )
187+ }
188+ NotFinalTxStatus :: PreconfirmationSuccess => out. push ( Ok (
189+ TxStatus :: NotFinal ( NotFinalTxStatus :: PreconfirmationSuccess ) ,
190+ ) ) ,
191+ NotFinalTxStatus :: PreconfirmationFailure => out. push ( Ok (
192+ TxStatus :: NotFinal ( NotFinalTxStatus :: PreconfirmationFailure ) ,
193+ ) ) ,
186194 }
187195 ControlFlow :: Continue ( out)
188196 }
@@ -210,18 +218,20 @@ fn transaction_status_change_model(
210218/// The flow continues only for `Submitted` status, otherwise it breaks with appropriate status.
211219fn next_state ( state : TransactionStatus ) -> Flow {
212220 match state {
213- TransactionStatus :: Submitted { .. } => Flow :: Continue ( NotFinal :: Submitted ) ,
221+ TransactionStatus :: Submitted { .. } => {
222+ Flow :: Continue ( NotFinalTxStatus :: Submitted )
223+ }
214224 TransactionStatus :: Success { .. } => Flow :: Break ( FinalTxStatus :: Success ) ,
215225 TransactionStatus :: PreConfirmationSuccess { .. } => {
216- Flow :: Continue ( NotFinal :: Preconfirmation )
226+ Flow :: Continue ( NotFinalTxStatus :: PreconfirmationSuccess )
217227 }
218228 TransactionStatus :: Failure { .. } => Flow :: Break ( FinalTxStatus :: Failed ) ,
219229 TransactionStatus :: PreConfirmationFailure { .. } => {
220- Flow :: Continue ( NotFinal :: Preconfirmation )
230+ Flow :: Continue ( NotFinalTxStatus :: PreconfirmationFailure )
221231 }
222- TransactionStatus :: SqueezedOut { .. }
223- | TransactionStatus :: PreConfirmationSqueezedOut { .. } => {
224- Flow :: Break ( FinalTxStatus :: Squeezed )
232+ TransactionStatus :: SqueezedOut { .. } => Flow :: Break ( FinalTxStatus :: Squeezed ) ,
233+ TransactionStatus :: PreConfirmationSqueezedOut { .. } => {
234+ Flow :: Break ( FinalTxStatus :: PreconfirmationSqueeze )
225235 }
226236 }
227237}
@@ -283,25 +293,25 @@ impl From<crate::schema::tx::types::TransactionStatus> for TxStatus {
283293 fn from ( status : crate :: schema:: tx:: types:: TransactionStatus ) -> Self {
284294 match status {
285295 crate :: schema:: tx:: types:: TransactionStatus :: Submitted ( _) => {
286- TxStatus :: Submitted
296+ TxStatus :: NotFinal ( NotFinalTxStatus :: Submitted )
287297 }
288298 crate :: schema:: tx:: types:: TransactionStatus :: Success ( _) => {
289299 TxStatus :: Final ( FinalTxStatus :: Success )
290300 }
291301 crate :: schema:: tx:: types:: TransactionStatus :: PreconfirmationSuccess ( _) => {
292- TxStatus :: Preconfirmed
302+ TxStatus :: NotFinal ( NotFinalTxStatus :: PreconfirmationSuccess )
293303 }
294304 crate :: schema:: tx:: types:: TransactionStatus :: SqueezedOut ( _) => {
295305 TxStatus :: Final ( FinalTxStatus :: Squeezed )
296306 }
297307 crate :: schema:: tx:: types:: TransactionStatus :: PreconfirmationSqueezedOut (
298308 _,
299- ) => TxStatus :: Final ( FinalTxStatus :: Squeezed ) ,
309+ ) => TxStatus :: Final ( FinalTxStatus :: PreconfirmationSqueeze ) ,
300310 crate :: schema:: tx:: types:: TransactionStatus :: Failure ( _) => {
301311 TxStatus :: Final ( FinalTxStatus :: Failed )
302312 }
303313 crate :: schema:: tx:: types:: TransactionStatus :: PreconfirmationFailure ( _) => {
304- TxStatus :: Preconfirmed
314+ TxStatus :: NotFinal ( NotFinalTxStatus :: PreconfirmationFailure )
305315 }
306316 }
307317 }
0 commit comments