X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fchain%2Fkeysinterface.rs;fp=lightning%2Fsrc%2Fchain%2Fkeysinterface.rs;h=544df015a8f48b404c390a63a909ec7aca3746ed;hb=bfd4ac49950d54c13894b30f82cb01e458596452;hp=e2e4403b528997e7a4ce56fb2a4591af85631efa;hpb=8829d1b80f99aa9bb34a5132a380b1d5dc7e303a;p=rust-lightning diff --git a/lightning/src/chain/keysinterface.rs b/lightning/src/chain/keysinterface.rs index e2e4403b..544df015 100644 --- a/lightning/src/chain/keysinterface.rs +++ b/lightning/src/chain/keysinterface.rs @@ -88,6 +88,57 @@ pub enum SpendableOutputDescriptor { } } +impl Writeable for SpendableOutputDescriptor { + fn write(&self, writer: &mut W) -> Result<(), ::std::io::Error> { + match self { + &SpendableOutputDescriptor::StaticOutput { ref outpoint, ref output } => { + 0u8.write(writer)?; + outpoint.write(writer)?; + output.write(writer)?; + }, + &SpendableOutputDescriptor::DynamicOutputP2WSH { ref outpoint, ref key, ref witness_script, ref to_self_delay, ref output } => { + 1u8.write(writer)?; + outpoint.write(writer)?; + key.write(writer)?; + witness_script.write(writer)?; + to_self_delay.write(writer)?; + output.write(writer)?; + }, + &SpendableOutputDescriptor::DynamicOutputP2WPKH { ref outpoint, ref key, ref output } => { + 2u8.write(writer)?; + outpoint.write(writer)?; + key.write(writer)?; + output.write(writer)?; + }, + } + Ok(()) + } +} + +impl Readable for SpendableOutputDescriptor { + fn read(reader: &mut R) -> Result { + match Readable::read(reader)? { + 0u8 => Ok(SpendableOutputDescriptor::StaticOutput { + outpoint: Readable::read(reader)?, + output: Readable::read(reader)?, + }), + 1u8 => Ok(SpendableOutputDescriptor::DynamicOutputP2WSH { + outpoint: Readable::read(reader)?, + key: Readable::read(reader)?, + witness_script: Readable::read(reader)?, + to_self_delay: Readable::read(reader)?, + output: Readable::read(reader)?, + }), + 2u8 => Ok(SpendableOutputDescriptor::DynamicOutputP2WPKH { + outpoint: Readable::read(reader)?, + key: Readable::read(reader)?, + output: Readable::read(reader)?, + }), + _ => Err(DecodeError::InvalidValue), + } + } +} + /// A trait to describe an object which can get user secrets and key material. pub trait KeysInterface: Send + Sync { /// A type which implements ChannelKeys which will be returned by get_channel_keys.