fedimint_mint_client/
api.rs1use fedimint_api_client::api::{FederationApiExt, FederationResult, IModuleFederationApi};
2use fedimint_core::module::ApiRequestErased;
3use fedimint_core::task::{MaybeSend, MaybeSync};
4use fedimint_core::{apply, async_trait_maybe_send};
5use fedimint_mint_common::endpoint_constants::{BLIND_NONCE_USED_ENDPOINT, NOTE_SPENT_ENDPOINT};
6use fedimint_mint_common::{BlindNonce, Nonce};
7
8#[apply(async_trait_maybe_send!)]
9pub trait MintFederationApi {
10 async fn check_blind_nonce_used(&self, blind_nonce: BlindNonce) -> FederationResult<bool>;
12
13 async fn check_note_spent(&self, nonce: Nonce) -> FederationResult<bool>;
15}
16
17#[apply(async_trait_maybe_send!)]
18impl<T: ?Sized> MintFederationApi for T
19where
20 T: IModuleFederationApi + MaybeSend + MaybeSync + 'static,
21{
22 async fn check_blind_nonce_used(&self, blind_nonce: BlindNonce) -> FederationResult<bool> {
23 self.request_current_consensus(
24 BLIND_NONCE_USED_ENDPOINT.to_string(),
25 ApiRequestErased::new(blind_nonce),
26 )
27 .await
28 }
29
30 async fn check_note_spent(&self, nonce: Nonce) -> FederationResult<bool> {
31 self.request_current_consensus(
32 NOTE_SPENT_ENDPOINT.to_string(),
33 ApiRequestErased::new(nonce),
34 )
35 .await
36 }
37}