1- use bitcoin:: blockdata:: transaction:: { TxIn , TxOut } ;
2- use bitcoin_hashes:: sha256d:: Hash as Sha256dHash ;
1+ use bitcoin:: blockdata:: transaction:: TxOut ;
32
43use std:: cmp:: Ordering ;
54
@@ -13,35 +12,12 @@ pub fn sort_outputs<T, C : Fn(&T, &T) -> Ordering>(outputs: &mut Vec<(TxOut, T)>
1312 } ) ;
1413}
1514
16- fn cmp ( a : & Sha256dHash , b : & Sha256dHash ) -> Ordering {
17- use bitcoin_hashes:: Hash ;
18-
19- let av = a. into_inner ( ) ;
20- let bv = b. into_inner ( ) ;
21- for i in ( 0 ..32 ) . rev ( ) {
22- let cmp = av[ i] . cmp ( & bv[ i] ) ;
23- if cmp != Ordering :: Equal {
24- return cmp;
25- }
26- }
27- Ordering :: Equal
28- }
29-
30- pub fn sort_inputs < T > ( inputs : & mut Vec < ( TxIn , T ) > ) {
31- inputs. sort_unstable_by ( |a, b| {
32- cmp ( & a. 0 . previous_output . txid , & b. 0 . previous_output . txid ) . then (
33- a. 0 . previous_output . vout . cmp ( & b. 0 . previous_output . vout ) )
34- } ) ;
35- }
36-
3715#[ cfg( test) ]
3816mod tests {
3917 use super :: * ;
4018
4119 use bitcoin:: blockdata:: script:: { Script , Builder } ;
42- use bitcoin:: blockdata:: transaction:: { TxOut , OutPoint } ;
43- use bitcoin_hashes:: sha256d:: Hash as Sha256dHash ;
44- use bitcoin_hashes:: hex:: FromHex ;
20+ use bitcoin:: blockdata:: transaction:: TxOut ;
4521
4622 use hex:: decode;
4723
@@ -153,63 +129,4 @@ mod tests {
153129 bip69_txout_test_1: TXOUT1 . to_vec( ) ,
154130 bip69_txout_test_2: TXOUT2 . to_vec( ) ,
155131 }
156-
157- macro_rules! bip_txin_tests {
158- ( $( $name: ident: $value: expr, ) * ) => {
159- $(
160- #[ test]
161- fn $name( ) {
162- let expected_raw: Vec <( & str , u32 ) > = $value;
163- let expected: Vec <( TxIn , & str ) > = expected_raw. iter( ) . map(
164- |txin_raw| TxIn {
165- previous_output: OutPoint {
166- txid: Sha256dHash :: from_hex( txin_raw. 0 ) . unwrap( ) ,
167- vout: txin_raw. 1 ,
168- } ,
169- script_sig: Script :: new( ) ,
170- sequence: 0 ,
171- witness: vec![ ]
172- }
173- ) . map( |txin| ( txin, "ignore" ) ) . collect( ) ;
174-
175- let mut inputs = expected. clone( ) ;
176- inputs. reverse( ) ;
177-
178- sort_inputs( & mut inputs) ;
179-
180- assert_eq!( expected, inputs) ;
181- }
182- ) *
183- }
184- }
185-
186- const TXIN1_BIP69 : [ ( & str , u32 ) ; 17 ] = [
187- ( "0e53ec5dfb2cb8a71fec32dc9a634a35b7e24799295ddd5278217822e0b31f57" , 0 ) ,
188- ( "26aa6e6d8b9e49bb0630aac301db6757c02e3619feb4ee0eea81eb1672947024" , 1 ) ,
189- ( "28e0fdd185542f2c6ea19030b0796051e7772b6026dd5ddccd7a2f93b73e6fc2" , 0 ) ,
190- ( "381de9b9ae1a94d9c17f6a08ef9d341a5ce29e2e60c36a52d333ff6203e58d5d" , 1 ) ,
191- ( "3b8b2f8efceb60ba78ca8bba206a137f14cb5ea4035e761ee204302d46b98de2" , 0 ) ,
192- ( "402b2c02411720bf409eff60d05adad684f135838962823f3614cc657dd7bc0a" , 1 ) ,
193- ( "54ffff182965ed0957dba1239c27164ace5a73c9b62a660c74b7b7f15ff61e7a" , 1 ) ,
194- ( "643e5f4e66373a57251fb173151e838ccd27d279aca882997e005016bb53d5aa" , 0 ) ,
195- ( "6c1d56f31b2de4bfc6aaea28396b333102b1f600da9c6d6149e96ca43f1102b1" , 1 ) ,
196- ( "7a1de137cbafb5c70405455c49c5104ca3057a1f1243e6563bb9245c9c88c191" , 0 ) ,
197- ( "7d037ceb2ee0dc03e82f17be7935d238b35d1deabf953a892a4507bfbeeb3ba4" , 1 ) ,
198- ( "a5e899dddb28776ea9ddac0a502316d53a4a3fca607c72f66c470e0412e34086" , 0 ) ,
199- ( "b4112b8f900a7ca0c8b0e7c4dfad35c6be5f6be46b3458974988e1cdb2fa61b8" , 0 ) ,
200- ( "bafd65e3c7f3f9fdfdc1ddb026131b278c3be1af90a4a6ffa78c4658f9ec0c85" , 0 ) ,
201- ( "de0411a1e97484a2804ff1dbde260ac19de841bebad1880c782941aca883b4e9" , 1 ) ,
202- ( "f0a130a84912d03c1d284974f563c5949ac13f8342b8112edff52971599e6a45" , 0 ) ,
203- ( "f320832a9d2e2452af63154bc687493484a0e7745ebd3aaf9ca19eb80834ad60" , 0 ) ,
204- ] ;
205-
206-
207- const TXIN2_BIP69 : [ ( & str , u32 ) ; 2 ] = [
208- ( "35288d269cee1941eaebb2ea85e32b42cdb2b04284a56d8b14dcc3f5c65d6055" , 0 ) ,
209- ( "35288d269cee1941eaebb2ea85e32b42cdb2b04284a56d8b14dcc3f5c65d6055" , 1 ) ,
210- ] ;
211- bip_txin_tests ! {
212- bip69_txin_test_1: TXIN1_BIP69 . to_vec( ) ,
213- bip69_txin_test_2: TXIN2_BIP69 . to_vec( ) ,
214- }
215132}
0 commit comments