confium_tc/coordinator/
session.rs1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6pub type SessionId = String;
8
9pub type QuorumId = String;
11
12pub type SignerId = String;
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
17#[serde(rename_all = "snake_case")]
18pub enum SessionState {
19 Pending,
21 CommitmentsCollected,
23 Completed,
25 Expired,
27 Aborted,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct SessionRequest {
34 pub quorum_id: QuorumId,
36 pub scheme: String,
38 pub message: Vec<u8>,
40 pub threshold: u32,
42 pub num_parties: u32,
44 pub unlock_window_minutes: u32,
46 pub requested_by: SignerId,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct Commitment {
53 pub signer_id: SignerId,
55 pub bytes: Vec<u8>,
57 pub signer_signature: Vec<u8>,
59 pub submitted_at: DateTime<Utc>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct Share {
66 pub signer_id: SignerId,
68 pub bytes: Vec<u8>,
70 pub signer_signature: Vec<u8>,
72 pub submitted_at: DateTime<Utc>,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
78pub struct AggregatedSignature {
79 pub bytes: Vec<u8>,
81 pub algorithm: String,
83 pub completed_at: DateTime<Utc>,
85 pub contributing_signers: Vec<SignerId>,
87}
88
89#[derive(Debug, thiserror::Error)]
91pub enum SessionError {
92 #[error("session not found: {0}")]
94 NotFound(SessionId),
95 #[error("session {session_id} in state {current_state:?}, expected {expected}")]
97 InvalidState {
98 session_id: SessionId,
100 current_state: SessionState,
102 expected: &'static str,
104 },
105 #[error("threshold not met: have {have}, need {need}")]
107 ThresholdNotMet {
108 have: usize,
110 need: u32,
112 },
113 #[error("signer {signer} already submitted to session {session}")]
115 DuplicateSubmission {
116 signer: SignerId,
118 session: SessionId,
120 },
121 #[error("session {0} unlock window expired")]
123 Expired(SessionId),
124 #[error("signer {0} not authorized for this quorum")]
126 UnauthorizedSigner(SignerId),
127}