Skip to content

Commit 4b0aa6b

Browse files
iqdecayMujkicA
andauthored
refactor: use a single type for transaction status (#1186)
This PR closes #1179 by removing the `TransactionStatus` type that was used in only one place. Further work is needed because the current `TxStatus` holds receipts which the client `TransactionStatus` does not, and doesn't hold some information the client's type does (block id, time, etc). --------- Co-authored-by: MujkicA <[email protected]>
1 parent dd5b6b2 commit 4b0aa6b

File tree

3 files changed

+37
-24
lines changed

3 files changed

+37
-24
lines changed

packages/fuels-accounts/src/provider.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ impl Provider {
307307
TxStatus::Revert {
308308
receipts,
309309
reason,
310-
id: revert_id,
310+
revert_id,
311311
}
312312
}
313313
TransactionStatus::Submitted { .. } => TxStatus::Submitted,
@@ -384,7 +384,7 @@ impl Provider {
384384
Some(reason) => TxStatus::Revert {
385385
receipts,
386386
reason,
387-
id: 0,
387+
revert_id: 0,
388388
},
389389
None => TxStatus::Success { receipts },
390390
}

packages/fuels-core/src/types/tx_status.rs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ use fuel_abi_types::error_codes::{
22
FAILED_ASSERT_EQ_SIGNAL, FAILED_ASSERT_SIGNAL, FAILED_REQUIRE_SIGNAL,
33
FAILED_SEND_MESSAGE_SIGNAL, FAILED_TRANSFER_TO_ADDRESS_SIGNAL,
44
};
5+
#[cfg(feature = "std")]
6+
use fuel_core_client::client::types::TransactionStatus as ClientTransactionStatus;
57
use fuel_tx::Receipt;
8+
#[cfg(feature = "std")]
9+
use fuel_vm::state::ProgramState;
610

711
use crate::{
812
codec::LogDecoder,
@@ -21,7 +25,7 @@ pub enum TxStatus {
2125
Revert {
2226
receipts: Vec<Receipt>,
2327
reason: String,
24-
id: u64,
28+
revert_id: u64,
2529
},
2630
}
2731

@@ -32,7 +36,7 @@ impl TxStatus {
3236
Self::Revert {
3337
receipts,
3438
reason,
35-
id,
39+
revert_id: id,
3640
} => Self::map_revert_error(receipts, reason, *id, log_decoder),
3741
_ => Ok(()),
3842
}
@@ -83,3 +87,30 @@ impl TxStatus {
8387
}
8488
}
8589
}
90+
#[cfg(feature = "std")]
91+
impl From<ClientTransactionStatus> for TxStatus {
92+
fn from(client_status: ClientTransactionStatus) -> Self {
93+
match client_status {
94+
ClientTransactionStatus::Submitted { .. } => TxStatus::Submitted {},
95+
ClientTransactionStatus::Success { .. } => TxStatus::Success { receipts: vec![] },
96+
ClientTransactionStatus::Failure {
97+
reason,
98+
program_state,
99+
..
100+
} => {
101+
let revert_id = program_state
102+
.and_then(|state| match state {
103+
ProgramState::Revert(revert_id) => Some(revert_id),
104+
_ => None,
105+
})
106+
.expect("Transaction failed without a `revert_id`");
107+
TxStatus::Revert {
108+
receipts: vec![],
109+
reason,
110+
revert_id,
111+
}
112+
}
113+
ClientTransactionStatus::SqueezedOut { reason } => TxStatus::SqueezedOut { reason },
114+
}
115+
}
116+
}

packages/fuels-core/src/types/wrappers/transaction_response.rs

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,16 @@ use fuel_tx::Transaction;
1010
use fuel_types::Bytes32;
1111

1212
use crate::types::transaction::{CreateTransaction, ScriptTransaction, TransactionType};
13+
use crate::types::tx_status::TxStatus;
1314

1415
#[derive(Debug, Clone)]
1516
pub struct TransactionResponse {
1617
pub transaction: TransactionType,
17-
pub status: TransactionStatus,
18+
pub status: TxStatus,
1819
pub block_id: Option<Bytes32>,
1920
pub time: Option<DateTime<Utc>>,
2021
}
2122

22-
#[derive(Debug, Clone)]
23-
pub enum TransactionStatus {
24-
Submitted(),
25-
Success(),
26-
Failure(),
27-
SqueezedOut(),
28-
}
29-
3023
impl From<ClientTransactionResponse> for TransactionResponse {
3124
fn from(client_response: ClientTransactionResponse) -> Self {
3225
let block_id = match &client_response.status {
@@ -63,14 +56,3 @@ impl From<ClientTransactionResponse> for TransactionResponse {
6356
}
6457
}
6558
}
66-
67-
impl From<ClientTransactionStatus> for TransactionStatus {
68-
fn from(client_status: ClientTransactionStatus) -> Self {
69-
match client_status {
70-
ClientTransactionStatus::Submitted { .. } => TransactionStatus::Submitted(),
71-
ClientTransactionStatus::Success { .. } => TransactionStatus::Success(),
72-
ClientTransactionStatus::Failure { .. } => TransactionStatus::Failure(),
73-
ClientTransactionStatus::SqueezedOut { .. } => TransactionStatus::SqueezedOut(),
74-
}
75-
}
76-
}

0 commit comments

Comments
 (0)