Skip to content
This repository has been archived by the owner on Sep 5, 2024. It is now read-only.

Commit

Permalink
wip on migrating to bitcoin v0.30 APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
dr-orlovsky committed Apr 15, 2023
1 parent c41ebdd commit 73ca205
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 119 deletions.
102 changes: 51 additions & 51 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 14 additions & 15 deletions bitcoin_scripts/src/address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,9 @@ use std::fmt::{self, Display, Formatter};
use std::str::FromStr;

use amplify::Wrapper;
use bitcoin::address::{self, Payload, WitnessProgram, WitnessVersion};
use bitcoin::hashes::{hex, Hash};
use bitcoin::schnorr::TweakedPublicKey;
use bitcoin::secp256k1::XOnlyPublicKey;
use bitcoin::util::address::{self, Payload, WitnessVersion};
use bitcoin::key::{TweakedPublicKey, XOnlyPublicKey};
use bitcoin::{secp256k1, Address, PubkeyHash, Script, ScriptHash, WPubkeyHash, WScriptHash};

use crate::PubkeyScript;
Expand Down Expand Up @@ -234,18 +233,18 @@ impl From<AddressPayload> for Payload {
match ap {
AddressPayload::PubkeyHash(pkh) => Payload::PubkeyHash(pkh),
AddressPayload::ScriptHash(sh) => Payload::ScriptHash(sh),
AddressPayload::WPubkeyHash(wpkh) => Payload::WitnessProgram {
version: WitnessVersion::V0,
program: wpkh.to_vec(),
},
AddressPayload::WScriptHash(wsh) => Payload::WitnessProgram {
version: WitnessVersion::V0,
program: wsh.to_vec(),
},
AddressPayload::Taproot { output_key } => Payload::WitnessProgram {
version: WitnessVersion::V1,
program: output_key.serialize().to_vec(),
},
AddressPayload::WPubkeyHash(wpkh) => Payload::WitnessProgram(
WitnessProgram::new(WitnessVersion::V0, wpkh)
.expect("witness program constructed from fixed-length hash"),
),
AddressPayload::WScriptHash(wsh) => Payload::WitnessProgram(
WitnessProgram::new(WitnessVersion::V0, wsh)
.expect("witness program constructed from fixed-length hash"),
),
AddressPayload::Taproot { output_key } => Payload::WitnessProgram(
WitnessProgram::new(WitnessVersion::V1, output_key)
.expect("witness program constructed from fixed-length key"),
),
}
}
}
Expand Down
28 changes: 14 additions & 14 deletions bitcoin_scripts/src/convert.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
use amplify::Wrapper;
use bitcoin::blockdata::script;
use bitcoin::blockdata::witness::Witness;
use bitcoin::{secp256k1, Script};
use bitcoin::{secp256k1, ScriptBuf};
#[cfg(feature = "miniscript")]
use miniscript::descriptor::DescriptorType;
#[cfg(feature = "miniscript")]
Expand Down Expand Up @@ -192,7 +192,7 @@ impl ToPubkeyScript for WitnessScript {
ConvertInfo::Bare => None,
ConvertInfo::Hashed => None,
ConvertInfo::NestedV0 => Some(RedeemScript::from(self.clone()).to_p2sh()),
ConvertInfo::SegWitV0 => Some(Script::new_v0_p2wsh(&self.script_hash()).into()),
ConvertInfo::SegWitV0 => Some(ScriptBuf::new_v0_p2wsh(&self.script_hash()).into()),
ConvertInfo::Taproot => None,
}
}
Expand Down Expand Up @@ -221,8 +221,8 @@ impl ToPubkeyScript for LockScript {
fn to_pubkey_script(&self, strategy: ConvertInfo) -> Option<PubkeyScript> {
Some(match strategy {
ConvertInfo::Bare => self.to_inner().into(),
ConvertInfo::Hashed => Script::new_p2sh(&self.script_hash()).into(),
ConvertInfo::SegWitV0 => Script::new_v0_p2wsh(&self.wscript_hash()).into(),
ConvertInfo::Hashed => ScriptBuf::new_p2sh(&self.script_hash()).into(),
ConvertInfo::SegWitV0 => ScriptBuf::new_v0_p2wsh(&self.wscript_hash()).into(),
ConvertInfo::NestedV0 => WitnessScript::from(self.clone()).to_p2sh_wsh(),
ConvertInfo::Taproot => return None,
})
Expand Down Expand Up @@ -258,7 +258,7 @@ impl ToScripts for LockScript {
ConvertInfo::Bare | ConvertInfo::Hashed => None,
ConvertInfo::SegWitV0 | ConvertInfo::NestedV0 => {
let witness_script = WitnessScript::from(self.clone());
Some(Witness::from_vec(vec![witness_script.to_bytes()]))
Some(Witness::from_slice(witness_script.as_bytes()))
}
ConvertInfo::Taproot => None,
}
Expand All @@ -268,8 +268,8 @@ impl ToScripts for LockScript {
impl ToPubkeyScript for bitcoin::PublicKey {
fn to_pubkey_script(&self, strategy: ConvertInfo) -> Option<PubkeyScript> {
match strategy {
ConvertInfo::Bare => Some(Script::new_p2pk(self).into()),
ConvertInfo::Hashed => Some(Script::new_p2pkh(&self.pubkey_hash()).into()),
ConvertInfo::Bare => Some(ScriptBuf::new_p2pk(self).into()),
ConvertInfo::Hashed => Some(ScriptBuf::new_p2pkh(&self.pubkey_hash()).into()),
// Uncompressed key in SegWit context
ConvertInfo::NestedV0 | ConvertInfo::SegWitV0 if !self.compressed => None,
ConvertInfo::NestedV0 | ConvertInfo::SegWitV0 => self.inner.to_pubkey_script(strategy),
Expand All @@ -286,7 +286,7 @@ impl ToScripts for bitcoin::PublicKey {
// added later
ConvertInfo::Bare => SigScript::default(),
ConvertInfo::Hashed => script::Builder::new()
.push_slice(&self.to_bytes())
.push_slice(self.as_bytes())
.into_script()
.into(),
ConvertInfo::NestedV0 => {
Expand All @@ -308,7 +308,7 @@ impl ToScripts for bitcoin::PublicKey {
match strategy {
ConvertInfo::Bare | ConvertInfo::Hashed => None,
ConvertInfo::SegWitV0 | ConvertInfo::NestedV0 => {
Some(Witness::from_vec(vec![self.to_bytes()]))
Some(Witness::from_slice(&self.to_bytes()))
}
// Bitcoin public key can't be used in Taproot context
ConvertInfo::Taproot => None,
Expand All @@ -322,13 +322,13 @@ impl ToPubkeyScript for secp256k1::PublicKey {
let pk = bitcoin::PublicKey::new(*self);
Some(
match strategy {
ConvertInfo::Bare => Script::new_p2pk(&pk),
ConvertInfo::Hashed => Script::new_p2pkh(&pk.pubkey_hash()),
ConvertInfo::SegWitV0 => Script::new_v0_p2wpkh(&pk.wpubkey_hash()?),
ConvertInfo::Bare => ScriptBuf::new_p2pk(&pk),
ConvertInfo::Hashed => ScriptBuf::new_p2pkh(&pk.pubkey_hash()),
ConvertInfo::SegWitV0 => ScriptBuf::new_v0_p2wpkh(&pk.wpubkey_hash()?),
ConvertInfo::NestedV0 => {
let pubkey_script = Script::new_p2pkh(&pk.pubkey_hash());
let pubkey_script = ScriptBuf::new_p2pkh(&pk.pubkey_hash());
let redeem_script = RedeemScript::from_inner(pubkey_script);
Script::new_p2sh(&redeem_script.script_hash())
ScriptBuf::new_p2sh(&redeem_script.script_hash())
}
ConvertInfo::Taproot => return None,
}
Expand Down
Loading

0 comments on commit 73ca205

Please sign in to comment.