fedimint_mint_client/
api.rs

1use 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    /// Check if an e-cash  note was already issued for the given blind nonce.
11    async fn check_blind_nonce_used(&self, blind_nonce: BlindNonce) -> FederationResult<bool>;
12
13    /// Check if an e-cash note was already spent.
14    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}