use bitcoin::{
blockdata::transaction::Transaction,
consensus, Network, {PrivateKey, PublicKey},
};
use rand::Rng;
use secp256k1::{Secp256k1, SecretKey};
pub fn secp_gen_keypair_with_rng<R: Rng + ?Sized>(
rng: &mut R,
network: Network,
) -> (PublicKey, PrivateKey) {
let context = Secp256k1::new();
let sk = PrivateKey {
network,
compressed: true,
key: SecretKey::new(rng),
};
let pk = PublicKey::from_private_key(&context, &sk);
(pk, sk)
}
pub fn secp_gen_keypair(network: Network) -> (PublicKey, PrivateKey) {
let mut rng = rand::thread_rng();
secp_gen_keypair_with_rng(&mut rng, network)
}
pub fn btc_tx_from_hex(s: &str) -> Transaction {
let bytes = hex::decode(s).unwrap();
consensus::deserialize(&bytes).unwrap()
}
pub fn keypair_from_wif(wif: &str) -> (PublicKey, PrivateKey) {
let ctx = Secp256k1::signing_only();
let sk = PrivateKey::from_wif(wif).unwrap();
let pk = sk.public_key(&ctx);
(pk, sk)
}