fn update_sent_certificates()

in fastpay_core/src/client.rs [521:551]


    fn update_sent_certificates(
        &mut self,
        sent_certificates: Vec<CertifiedTransferOrder>,
    ) -> Result<(), FastPayError> {
        let mut new_balance = self.balance;
        let mut new_next_sequence_number = self.next_sequence_number;
        for new_cert in &sent_certificates {
            new_balance = new_balance.try_sub(new_cert.value.transfer.amount.into())?;
            if new_cert.value.transfer.sequence_number >= new_next_sequence_number {
                new_next_sequence_number = new_cert
                    .value
                    .transfer
                    .sequence_number
                    .increment()
                    .unwrap_or_else(|_| SequenceNumber::max());
            }
        }
        for old_cert in &self.sent_certificates {
            new_balance = new_balance.try_add(old_cert.value.transfer.amount.into())?;
        }
        // Atomic update
        self.sent_certificates = sent_certificates;
        self.balance = new_balance;
        self.next_sequence_number = new_next_sequence_number;
        // Sanity check
        assert_eq!(
            self.sent_certificates.len(),
            self.next_sequence_number.into()
        );
        Ok(())
    }