decrement stored nonce if tx failed for any reason
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
This commit is contained in:
		
							parent
							
								
									8f63c7483d
								
							
						
					
					
						commit
						507c03959d
					
				@ -26,6 +26,7 @@ pub use subscriptions::{FinalizedSubscription, BestSubscription};
 | 
			
		||||
 | 
			
		||||
struct TxToWatch {
 | 
			
		||||
    tx_progress: TxProgress<CasperConfig, OnlineClient<CasperConfig>>,
 | 
			
		||||
    sender: String,
 | 
			
		||||
    target: ActionTarget,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -82,6 +83,13 @@ impl Network {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn remove_transaction_and_decrement_nonce(&mut self, index: usize) {
 | 
			
		||||
        let removed = self.transactions_to_watch.remove(index);
 | 
			
		||||
        self.senders
 | 
			
		||||
            .get_mut(&removed.sender)
 | 
			
		||||
            .map(|nonce| *nonce = nonce.saturating_sub(1));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn handle_network_event(&mut self, io_event: Action) -> Result<()> {
 | 
			
		||||
        match io_event {
 | 
			
		||||
            Action::NewBestHash(hash) => {
 | 
			
		||||
@ -123,21 +131,21 @@ impl Network {
 | 
			
		||||
                                }
 | 
			
		||||
                                TxStatus::Error { message } => {
 | 
			
		||||
                                    self.action_tx.send(Action::EventLog(format!("transaction {} error, something get wrong: {message}", ext_hash), ActionLevel::Error, log_target))?;
 | 
			
		||||
                                    self.transactions_to_watch.remove(i);
 | 
			
		||||
                                    self.remove_transaction_and_decrement_nonce(i);
 | 
			
		||||
                                }
 | 
			
		||||
                                TxStatus::Invalid { message } => {
 | 
			
		||||
                                    self.action_tx.send(Action::EventLog(format!("transaction {} invalid: {message}", ext_hash), ActionLevel::Error, log_target))?;
 | 
			
		||||
                                    self.transactions_to_watch.remove(i);
 | 
			
		||||
                                    self.remove_transaction_and_decrement_nonce(i);
 | 
			
		||||
                                }
 | 
			
		||||
                                TxStatus::Dropped { message } => {
 | 
			
		||||
                                    self.action_tx.send(Action::EventLog(format!("transaction {} was dropped: {message}", ext_hash), ActionLevel::Error, log_target))?;
 | 
			
		||||
                                    self.transactions_to_watch.remove(i);
 | 
			
		||||
                                    self.remove_transaction_and_decrement_nonce(i);
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        },
 | 
			
		||||
                        _ => {
 | 
			
		||||
                            self.action_tx.send(Action::EventLog(format!("transaction {} was dropped", ext_hash), ActionLevel::Error, log_target))?;
 | 
			
		||||
                            self.transactions_to_watch.remove(i);
 | 
			
		||||
                            self.remove_transaction_and_decrement_nonce(i);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
@ -212,6 +220,7 @@ impl Network {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            Action::TransferBalance(sender, receiver, amount) => {
 | 
			
		||||
                let sender_cloned = sender.clone();
 | 
			
		||||
                let maybe_nonce = self.senders.get_mut(&sender);
 | 
			
		||||
 | 
			
		||||
                let sender: [u8; 32] = hex::decode(sender)
 | 
			
		||||
@ -230,6 +239,7 @@ impl Network {
 | 
			
		||||
                ).await {
 | 
			
		||||
                    self.transactions_to_watch.push(TxToWatch {
 | 
			
		||||
                        tx_progress,
 | 
			
		||||
                        sender: sender_cloned,
 | 
			
		||||
                        target: ActionTarget::WalletLog,
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user