use std::{marker::Send, collections::HashMap}; use async_trait::async_trait; use thiserror::Error; use frost::{curve::Curve, FrostError}; mod coin; use coin::{CoinError, Coin}; mod wallet; #[cfg(test)] mod tests; #[derive(Clone, Error, Debug)] pub enum NetworkError {} #[async_trait] pub trait Network: Send { async fn round(&mut self, data: Vec) -> Result>, NetworkError>; } #[derive(Clone, Error, Debug)] pub enum SignError { #[error("FROST had an error {0}")] FrostError(FrostError), #[error("coin had an error {0}")] CoinError(CoinError), #[error("network had an error {0}")] NetworkError(NetworkError), } // Generate a static additional key for a given chain in a globally consistent manner // Doesn't consider the current group key to increase the simplicity of verifying Serai's status // Takes an index, k, to support protocols which use multiple secondary keys // Presumably a view key pub(crate) fn additional_key(k: u64) -> ::F { C::Curve::hash_to_F(b"Serai DEX Additional Key", &[C::ID, &k.to_le_bytes()].concat()) }