fn query()

in fastpay_core/src/client.rs [184:215]


    fn query(
        &mut self,
        sequence_number: SequenceNumber,
    ) -> AsyncResult<CertifiedTransferOrder, FastPayError> {
        Box::pin(async move {
            let request = AccountInfoRequest {
                sender: self.sender,
                request_sequence_number: Some(sequence_number),
                request_received_transfers_excluding_first_nth: None,
            };
            // Sequentially try each authority in random order.
            self.authority_clients.shuffle(&mut rand::thread_rng());
            for client in self.authority_clients.iter_mut() {
                let result = client.handle_account_info_request(request.clone()).await;
                if let Ok(AccountInfoResponse {
                    requested_certificate: Some(certificate),
                    ..
                }) = &result
                {
                    if certificate.check(&self.committee).is_ok() {
                        let transfer = &certificate.value.transfer;
                        if transfer.sender == self.sender
                            && transfer.sequence_number == sequence_number
                        {
                            return Ok(certificate.clone());
                        }
                    }
                }
            }
            Err(FastPayError::ErrorWhileRequestingCertificate)
        })
    }