From d9b48cc2ce68b065640caa22da6fbcb1f3ad85f8 Mon Sep 17 00:00:00 2001 From: yancy Date: Tue, 19 Nov 2024 16:05:38 -0600 Subject: [PATCH] Add p2wpkh address creation example --- bitcoin/Cargo.toml | 4 ++++ bitcoin/examples/create-p2wpkh-address.rs | 24 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 bitcoin/examples/create-p2wpkh-address.rs diff --git a/bitcoin/Cargo.toml b/bitcoin/Cargo.toml index c4ba294c4..ee854c75b 100644 --- a/bitcoin/Cargo.toml +++ b/bitcoin/Cargo.toml @@ -71,6 +71,10 @@ required-features = ["std", "bitcoinconsensus"] name = "ecdsa-psbt-simple" required-features = ["rand-std"] +[[example]] +name = "create-p2wpkh-address" +required-features = ["rand-std"] + [[example]] name = "sign-tx-segwit-v0" required-features = ["rand-std"] diff --git a/bitcoin/examples/create-p2wpkh-address.rs b/bitcoin/examples/create-p2wpkh-address.rs new file mode 100644 index 000000000..b8ec758f8 --- /dev/null +++ b/bitcoin/examples/create-p2wpkh-address.rs @@ -0,0 +1,24 @@ +use bitcoin::secp256k1::{rand, Secp256k1}; +use bitcoin::{Address, CompressedPublicKey, Network, PrivateKey}; + +/// Generate a P2WPKH (pay-to-witness-public-key-hash) address and print it +/// along with the associated private key needed to transact. +fn main() { + // Create new secp256k1 instance. + let secp = Secp256k1::new(); + + // Generate secp256k1 public and private key pair. + let (secret_key, public_key) = secp.generate_keypair(&mut rand::thread_rng()); + + // Create a Bitcoin private key to be used on the Bitcoin mainnet. + let private_key = PrivateKey::new(secret_key, Network::Bitcoin); + + // Create a compressed Bitcoin public key from the secp256k1 public key. + let public_key = CompressedPublicKey(public_key); + + // Create a Bitcoin P2WPKH address. + let address = Address::p2wpkh(public_key, Network::Bitcoin); + + println!("Private Key: {}", private_key); + println!("Address: {}", address); +}