use std::future::Future;
#[cfg(feature = "sign")]
pub use df_hyperliquid_core::account::{LocalKey, recover, verify};
pub use df_hyperliquid_core::account::{SignError, Signature};
use crate::B256;
use crate::utils::Address;
pub trait Signer {
fn address(&self) -> Address;
fn sign_hash(&self, hash: &B256) -> impl Future<Output = Result<Signature, SignError>>;
}
#[cfg(feature = "sign")]
impl Signer for LocalKey {
fn address(&self) -> Address {
LocalKey::address(self)
}
fn sign_hash(&self, hash: &B256) -> impl Future<Output = Result<Signature, SignError>> {
std::future::ready(self.sign_digest(&hash.0))
}
}
impl<S: Signer> Signer for &S {
fn address(&self) -> Address {
(**self).address()
}
fn sign_hash(&self, hash: &B256) -> impl Future<Output = Result<Signature, SignError>> {
(**self).sign_hash(hash)
}
}