X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Fscript.rs;h=1909eb0c5f7df5f347ea0484bfbdd08fa8a239f8;hb=3a9fe209e104e048921ad50be77a80b18a98b45c;hp=09363b6b51749f033bb482db1ac7b50b28ffaaf2;hpb=ca76d0675b5e3b123a92e19937d2f64b91355773;p=rust-lightning diff --git a/lightning/src/ln/script.rs b/lightning/src/ln/script.rs index 09363b6b..1909eb0c 100644 --- a/lightning/src/ln/script.rs +++ b/lightning/src/ln/script.rs @@ -1,53 +1,51 @@ //! Abstractions for scripts used in the Lightning Network. use bitcoin::blockdata::opcodes::all::OP_PUSHBYTES_0 as SEGWIT_V0; -use bitcoin::blockdata::script::{Builder, Script}; +use bitcoin::blockdata::script::{Script, ScriptBuf}; use bitcoin::hashes::Hash; use bitcoin::hash_types::{WPubkeyHash, WScriptHash}; use bitcoin::secp256k1::PublicKey; -use bitcoin::util::address::WitnessVersion; +use bitcoin::address::WitnessProgram; -use ln::channelmanager; -use ln::features::InitFeatures; -use ln::msgs::DecodeError; -use util::ser::{Readable, Writeable, Writer}; +use crate::ln::channelmanager; +use crate::ln::features::InitFeatures; +use crate::ln::msgs::DecodeError; +use crate::util::ser::{Readable, Writeable, Writer}; -use core::convert::TryFrom; -use io; +use crate::io; + +#[allow(unused_imports)] +use crate::prelude::*; /// A script pubkey for shutting down a channel as defined by [BOLT #2]. /// /// [BOLT #2]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md -#[derive(Clone, PartialEq)] +#[derive(Clone, PartialEq, Eq)] pub struct ShutdownScript(ShutdownScriptImpl); -/// An error occurring when converting from [`Script`] to [`ShutdownScript`]. +/// An error occurring when converting from [`ScriptBuf`] to [`ShutdownScript`]. #[derive(Clone, Debug)] pub struct InvalidShutdownScript { /// The script that did not meet the requirements from [BOLT #2]. /// /// [BOLT #2]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md - pub script: Script + pub script: ScriptBuf } -#[derive(Clone, PartialEq)] +#[derive(Clone, PartialEq, Eq)] enum ShutdownScriptImpl { /// [`PublicKey`] used to form a P2WPKH script pubkey. Used to support backward-compatible /// serialization. Legacy(PublicKey), - /// [`Script`] adhering to a script pubkey format specified in BOLT #2. - Bolt2(Script), + /// [`ScriptBuf`] adhering to a script pubkey format specified in BOLT #2. + Bolt2(ScriptBuf), } impl Writeable for ShutdownScript { fn write(&self, w: &mut W) -> Result<(), io::Error> { self.0.write(w) } - - fn serialized_length(&self) -> usize { - self.0.serialized_length() - } } impl Readable for ShutdownScript { @@ -69,12 +67,12 @@ impl ShutdownScript { /// Generates a P2WPKH script pubkey from the given [`WPubkeyHash`]. pub fn new_p2wpkh(pubkey_hash: &WPubkeyHash) -> Self { - Self(ShutdownScriptImpl::Bolt2(Script::new_v0_p2wpkh(pubkey_hash))) + Self(ShutdownScriptImpl::Bolt2(ScriptBuf::new_v0_p2wpkh(pubkey_hash))) } /// Generates a P2WSH script pubkey from the given [`WScriptHash`]. pub fn new_p2wsh(script_hash: &WScriptHash) -> Self { - Self(ShutdownScriptImpl::Bolt2(Script::new_v0_p2wsh(script_hash))) + Self(ShutdownScriptImpl::Bolt2(ScriptBuf::new_v0_p2wsh(script_hash))) } /// Generates a witness script pubkey from the given segwit version and program. @@ -85,16 +83,12 @@ impl ShutdownScript { /// # Errors /// /// This function may return an error if `program` is invalid for the segwit `version`. - pub fn new_witness_program(version: WitnessVersion, program: &[u8]) -> Result { - let script = Builder::new() - .push_int(version as i64) - .push_slice(&program) - .into_script(); - Self::try_from(script) + pub fn new_witness_program(witness_program: &WitnessProgram) -> Result { + Self::try_from(ScriptBuf::new_witness_program(witness_program)) } - /// Converts the shutdown script into the underlying [`Script`]. - pub fn into_inner(self) -> Script { + /// Converts the shutdown script into the underlying [`ScriptBuf`]. + pub fn into_inner(self) -> ScriptBuf { self.into() } @@ -131,20 +125,20 @@ pub(crate) fn is_bolt2_compliant(script: &Script, features: &InitFeatures) -> bo // Note that this is only for our own shutdown scripts. Counterparties are still allowed to send us // non-witness shutdown scripts which this rejects. -impl TryFrom