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)
})
}