1mod cert_verifier;
4mod config;
5mod mock;
6mod quic;
7mod stream_buffer;
8
9pub use quic::*;
10
11use futures::{Sink, Stream};
12#[cfg(any(feature = "test_helpers", feature = "benchmarks", test))]
13pub use mock::{MockNetwork, NoRecvNetwork, UnboundedDuplexStream};
14
15use async_trait::async_trait;
16use serde::{Deserialize, Serialize};
17
18use crate::{
19 algebra::{scalar::Scalar, stark_curve::StarkPoint},
20 error::MpcNetworkError,
21 fabric::ResultId,
22};
23
24pub type PartyId = u64;
26
27#[derive(Clone, Debug, Serialize, Deserialize)]
33pub struct NetworkOutbound {
34 pub result_id: ResultId,
36 pub payload: NetworkPayload,
38}
39
40#[derive(Clone, Debug, Serialize, Deserialize)]
42pub enum NetworkPayload {
43 Bytes(Vec<u8>),
45 Scalar(Scalar),
47 ScalarBatch(Vec<Scalar>),
49 Point(StarkPoint),
51 PointBatch(Vec<StarkPoint>),
53}
54
55impl From<Vec<u8>> for NetworkPayload {
56 fn from(bytes: Vec<u8>) -> Self {
57 Self::Bytes(bytes)
58 }
59}
60
61impl From<Scalar> for NetworkPayload {
62 fn from(scalar: Scalar) -> Self {
63 Self::Scalar(scalar)
64 }
65}
66
67impl From<Vec<Scalar>> for NetworkPayload {
68 fn from(scalars: Vec<Scalar>) -> Self {
69 Self::ScalarBatch(scalars)
70 }
71}
72
73impl From<StarkPoint> for NetworkPayload {
74 fn from(point: StarkPoint) -> Self {
75 Self::Point(point)
76 }
77}
78
79impl From<Vec<StarkPoint>> for NetworkPayload {
80 fn from(value: Vec<StarkPoint>) -> Self {
81 Self::PointBatch(value)
82 }
83}
84
85#[async_trait]
91pub trait MpcNetwork:
92 Send
93 + Stream<Item = Result<NetworkOutbound, MpcNetworkError>>
94 + Sink<NetworkOutbound, Error = MpcNetworkError>
95{
96 fn party_id(&self) -> PartyId;
98 async fn close(&mut self) -> Result<(), MpcNetworkError>;
100}
101
102