iota_network/randomness/
server.rs1use anemo::{Request, Response};
6use tokio::sync::mpsc;
7
8use super::{Randomness, RandomnessMessage, SendSignaturesRequest};
9
10pub(super) struct Server {
11 pub(super) sender: mpsc::WeakSender<RandomnessMessage>,
12}
13
14#[anemo::async_trait]
15impl Randomness for Server {
16 async fn send_signatures(
17 &self,
18 request: Request<SendSignaturesRequest>,
19 ) -> Result<Response<()>, anemo::rpc::Status> {
20 let sender = self
21 .sender
22 .upgrade()
23 .ok_or_else(|| anemo::rpc::Status::internal("shutting down"))?;
24 let peer_id = *request
25 .peer_id()
26 .ok_or_else(|| anemo::rpc::Status::internal("missing peer ID"))?;
27 let SendSignaturesRequest {
28 epoch,
29 round,
30 partial_sigs,
31 sig,
32 } = request.into_inner();
33 let _ = sender .send(RandomnessMessage::ReceiveSignatures(
35 peer_id,
36 epoch,
37 round,
38 partial_sigs,
39 sig,
40 ))
41 .await;
42 Ok(anemo::Response::new(()))
43 }
44}