53 lines
1.3 KiB
Rust
53 lines
1.3 KiB
Rust
|
use crate::{error::Error, prelude::*};
|
||
|
use sp_core::Pair as _;
|
||
|
|
||
|
pub type PairSigner = subxt::tx::PairSigner<subxt::PolkadotConfig, sp_core::sr25519::Pair>;
|
||
|
|
||
|
pub struct Signer {
|
||
|
pair: Pair,
|
||
|
signer: PairSigner,
|
||
|
}
|
||
|
|
||
|
impl std::fmt::Display for Signer {
|
||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||
|
write!(f, "{}", self.signer.account_id())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl Clone for Signer {
|
||
|
fn clone(&self) -> Self {
|
||
|
Self { pair: self.pair.clone(), signer: PairSigner::new(self.pair.clone()) }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl Signer {
|
||
|
pub fn new(mut seed_or_path: &str) -> Result<Self, Error> {
|
||
|
seed_or_path = seed_or_path.trim();
|
||
|
|
||
|
let seed = match std::fs::read(seed_or_path) {
|
||
|
Ok(s) => String::from_utf8(s).map_err(|e| Error::Other(e.to_string()))?,
|
||
|
Err(_) => seed_or_path.to_stirng(),
|
||
|
};
|
||
|
|
||
|
let seed = seed.trim();
|
||
|
let pair = Pair::from_string(seed, None).map_err(Error::Crypto)?;
|
||
|
let signer = PairSigner::new(pair.clone());
|
||
|
|
||
|
Ok(Self { pair, signer })
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl std::ops::Deref for Signer {
|
||
|
type Target = PairSigner;
|
||
|
|
||
|
fn deref(&self) -> &Self::Target {
|
||
|
&self.signer
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl std::ops::DerefMut for Signer {
|
||
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
||
|
&mut self.signer
|
||
|
}
|
||
|
}
|