hypercall_db/traits/
nonces.rs1use anyhow::Result;
6use async_trait::async_trait;
7use hypercall_types::WalletAddress;
8
9use crate::{RsmSignerNonceRecord, RsmSignerRequestClaim, RsmSignerRequestRecord};
10
11#[async_trait]
13pub trait NonceReader: Send + Sync {
14 async fn get_rsm_signer_nonce(
16 &self,
17 signer: &WalletAddress,
18 ) -> Result<Option<RsmSignerNonceRecord>>;
19}
20
21#[async_trait]
23pub trait NonceWriter: NonceReader {
24 async fn save_rsm_signer_nonce(&self, record: &RsmSignerNonceRecord) -> Result<()>;
26
27 #[cfg(any(test, feature = "test-utils"))]
28 async fn reserve_next_rsm_signer_nonce(
29 &self,
30 signer: &WalletAddress,
31 initial_nonce: u64,
32 ) -> Result<u64>;
33
34 async fn claim_rsm_signer_request(
39 &self,
40 request_id: &str,
41 signer: &WalletAddress,
42 account: &WalletAddress,
43 action: &[u8],
44 initial_nonce: u64,
45 ) -> Result<RsmSignerRequestClaim>;
46
47 async fn complete_rsm_signer_request(
49 &self,
50 request_id: &str,
51 directive: &[u8],
52 signature: &str,
53 ) -> Result<RsmSignerRequestRecord>;
54}