Skip to content

Commit b33216c

Browse files
committed
Merge rust-bitcoin#4992: Add Encodable for transaction types
30ee268 Implement Encodable for transaction types (Tobin C. Harding) 30a366f Implement Encodable for Witness (Tobin C. Harding) c6702ce consensus_encoding: Implement Encoder for Option<T> (Tobin C. Harding) da69bbd Update the API text files (Tobin C. Harding) 1f863ab Re-export the AmountEncoder (Tobin C. Harding) Pull request description: Up front re-export the `AmountEncoder`, we missed it before (and update the API text files). Then add consensus encoding functionality for the `Witness` and the types in `transaction`. ACKs for top commit: nyonson: ACK 30ee268, looks good apoelstra: ACK 30ee268; successfully ran local tests Tree-SHA512: 2b4a33e89da6f1e9bbf16784c50b68dbb3c146ab3be45a4b754b2417e69751fccb50b2107f08123f15b5ee2544f295e3a3039fcfeab38c4c4ed18cae3adf9c94
2 parents 02ea733 + 30ee268 commit b33216c

File tree

5 files changed

+562
-3
lines changed

5 files changed

+562
-3
lines changed

api/units/all-features.txt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ impl consensus_encoding::encode::Encodable for bitcoin_units::BlockTime
6666
impl consensus_encoding::encode::Encodable for bitcoin_units::block::BlockHeight
6767
impl consensus_encoding::encode::Encodable for bitcoin_units::locktime::absolute::LockTime
6868
impl consensus_encoding::encode::Encodable for bitcoin_units::sequence::Sequence
69+
impl consensus_encoding::encode::Encoder for bitcoin_units::amount::AmountEncoder
6970
impl consensus_encoding::encode::Encoder for bitcoin_units::block::BlockHeightEncoder
7071
impl consensus_encoding::encode::Encoder for bitcoin_units::locktime::absolute::LockTimeEncoder
7172
impl consensus_encoding::encode::Encoder for bitcoin_units::sequence::SequenceEncoder
@@ -546,6 +547,7 @@ impl core::marker::Freeze for bitcoin_units::FeeRate
546547
impl core::marker::Freeze for bitcoin_units::SignedAmount
547548
impl core::marker::Freeze for bitcoin_units::Weight
548549
impl core::marker::Freeze for bitcoin_units::amount::AmountDecoder
550+
impl core::marker::Freeze for bitcoin_units::amount::AmountEncoder
549551
impl core::marker::Freeze for bitcoin_units::amount::Denomination
550552
impl core::marker::Freeze for bitcoin_units::amount::Display
551553
impl core::marker::Freeze for bitcoin_units::amount::error::AmountDecoderError
@@ -608,6 +610,7 @@ impl core::marker::Send for bitcoin_units::FeeRate
608610
impl core::marker::Send for bitcoin_units::SignedAmount
609611
impl core::marker::Send for bitcoin_units::Weight
610612
impl core::marker::Send for bitcoin_units::amount::AmountDecoder
613+
impl core::marker::Send for bitcoin_units::amount::AmountEncoder
611614
impl core::marker::Send for bitcoin_units::amount::Denomination
612615
impl core::marker::Send for bitcoin_units::amount::Display
613616
impl core::marker::Send for bitcoin_units::amount::error::AmountDecoderError
@@ -722,6 +725,7 @@ impl core::marker::Sync for bitcoin_units::FeeRate
722725
impl core::marker::Sync for bitcoin_units::SignedAmount
723726
impl core::marker::Sync for bitcoin_units::Weight
724727
impl core::marker::Sync for bitcoin_units::amount::AmountDecoder
728+
impl core::marker::Sync for bitcoin_units::amount::AmountEncoder
725729
impl core::marker::Sync for bitcoin_units::amount::Denomination
726730
impl core::marker::Sync for bitcoin_units::amount::Display
727731
impl core::marker::Sync for bitcoin_units::amount::error::AmountDecoderError
@@ -784,6 +788,7 @@ impl core::marker::Unpin for bitcoin_units::FeeRate
784788
impl core::marker::Unpin for bitcoin_units::SignedAmount
785789
impl core::marker::Unpin for bitcoin_units::Weight
786790
impl core::marker::Unpin for bitcoin_units::amount::AmountDecoder
791+
impl core::marker::Unpin for bitcoin_units::amount::AmountEncoder
787792
impl core::marker::Unpin for bitcoin_units::amount::Denomination
788793
impl core::marker::Unpin for bitcoin_units::amount::Display
789794
impl core::marker::Unpin for bitcoin_units::amount::error::AmountDecoderError
@@ -1072,6 +1077,7 @@ impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::FeeRate
10721077
impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::SignedAmount
10731078
impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::Weight
10741079
impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::AmountDecoder
1080+
impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::AmountEncoder
10751081
impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::Denomination
10761082
impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::Display
10771083
impl core::panic::unwind_safe::RefUnwindSafe for bitcoin_units::amount::error::AmountDecoderError
@@ -1134,6 +1140,7 @@ impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::FeeRate
11341140
impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::SignedAmount
11351141
impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::Weight
11361142
impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::AmountDecoder
1143+
impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::AmountEncoder
11371144
impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::Denomination
11381145
impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::Display
11391146
impl core::panic::unwind_safe::UnwindSafe for bitcoin_units::amount::error::AmountDecoderError
@@ -1896,6 +1903,8 @@ pub fn bitcoin_units::amount::AmountDecoder::end(self) -> core::result::Result<S
18961903
pub fn bitcoin_units::amount::AmountDecoder::min_bytes_needed(&self) -> usize
18971904
pub fn bitcoin_units::amount::AmountDecoder::new() -> Self
18981905
pub fn bitcoin_units::amount::AmountDecoder::push_bytes(&mut self, bytes: &mut &[u8]) -> core::result::Result<bool, Self::Error>
1906+
pub fn bitcoin_units::amount::AmountEncoder::advance(&mut self) -> bool
1907+
pub fn bitcoin_units::amount::AmountEncoder::current_chunk(&self) -> core::option::Option<&[u8]>
18991908
pub fn bitcoin_units::amount::Denomination::arbitrary(u: &mut arbitrary::unstructured::Unstructured<'a>) -> arbitrary::error::Result<Self>
19001909
pub fn bitcoin_units::amount::Denomination::clone(&self) -> bitcoin_units::amount::Denomination
19011910
pub fn bitcoin_units::amount::Denomination::eq(&self, other: &bitcoin_units::amount::Denomination) -> bool
@@ -2521,6 +2530,7 @@ pub struct bitcoin_units::absolute::error::ParseTimeError(_)
25212530
pub struct bitcoin_units::amount::Amount(_)
25222531
pub struct bitcoin_units::amount::AmountDecoder(_)
25232532
pub struct bitcoin_units::amount::AmountDecoderError(_)
2533+
pub struct bitcoin_units::amount::AmountEncoder(_)
25242534
pub struct bitcoin_units::amount::Display
25252535
pub struct bitcoin_units::amount::OutOfRangeError
25262536
pub struct bitcoin_units::amount::ParseAmountError(_)
@@ -2660,7 +2670,7 @@ pub type &u64::Output = <u64 as core::ops::arith::Mul<bitcoin_units::Amount>>::O
26602670
pub type &u64::Output = <u64 as core::ops::arith::Mul<bitcoin_units::Weight>>::Output
26612671
pub type &u64::Output = <u64 as core::ops::arith::Mul<bitcoin_units::result::NumOpResult<bitcoin_units::Amount>>>::Output
26622672
pub type bitcoin_units::Amount::Decoder = bitcoin_units::amount::AmountDecoder
2663-
pub type bitcoin_units::Amount::Encoder<'e> = bitcoin_units::amount::unsigned::AmountEncoder
2673+
pub type bitcoin_units::Amount::Encoder<'e> = bitcoin_units::amount::AmountEncoder
26642674
pub type bitcoin_units::Amount::Err = bitcoin_units::amount::error::ParseError
26652675
pub type bitcoin_units::Amount::Error = bitcoin_units::amount::error::OutOfRangeError
26662676
pub type bitcoin_units::Amount::Output = <bitcoin_units::Amount as core::ops::arith::Add<bitcoin_units::result::NumOpResult<bitcoin_units::Amount>>>::Output

consensus_encoding/src/encode/mod.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,19 @@ where
122122
}
123123
Ok(())
124124
}
125+
126+
impl<T: Encoder> Encoder for Option<T> {
127+
fn current_chunk(&self) -> Option<&[u8]> {
128+
match self {
129+
Some(encoder) => encoder.current_chunk(),
130+
None => None,
131+
}
132+
}
133+
134+
fn advance(&mut self) -> bool {
135+
match self {
136+
Some(encoder) => encoder.advance(),
137+
None => false,
138+
}
139+
}
140+
}

0 commit comments

Comments
 (0)