@@ -1079,6 +1079,8 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
1079
1079
mod test {
1080
1080
use std:: str:: FromStr ;
1081
1081
1082
+ use crate :: utils;
1083
+
1082
1084
use super :: RawClient ;
1083
1085
use api:: ElectrumApi ;
1084
1086
@@ -1300,23 +1302,43 @@ mod test {
1300
1302
1301
1303
let client = RawClient :: new ( get_test_server ( ) , None ) . unwrap ( ) ;
1302
1304
1303
- let resp = client
1304
- . transaction_get_merkle (
1305
- & Txid :: from_str ( "cc2ca076fd04c2aeed6d02151c447ced3d09be6fb4d4ef36cb5ed4e7a3260566" )
1306
- . unwrap ( ) ,
1307
- 630000 ,
1308
- )
1309
- . unwrap ( ) ;
1305
+ let txid =
1306
+ Txid :: from_str ( "1f7ff3c407f33eabc8bec7d2cc230948f2249ec8e591bcf6f971ca9366c8788d" )
1307
+ . unwrap ( ) ;
1308
+ let resp = client. transaction_get_merkle ( & txid, 630000 ) . unwrap ( ) ;
1310
1309
assert_eq ! ( resp. block_height, 630000 ) ;
1311
- assert_eq ! ( resp. pos, 0 ) ;
1310
+ assert_eq ! ( resp. pos, 68 ) ;
1312
1311
assert_eq ! ( resp. merkle. len( ) , 12 ) ;
1313
1312
assert_eq ! (
1314
1313
resp. merkle[ 0 ] ,
1315
1314
[
1316
- 30 , 10 , 161 , 245 , 132 , 125 , 136 , 198 , 186 , 138 , 107 , 216 , 92 , 22 , 145 , 81 , 130 ,
1317
- 126 , 200 , 65 , 121 , 158 , 105 , 111 , 38 , 151 , 38 , 147 , 144 , 224 , 5 , 218
1315
+ 34 , 65 , 51 , 64 , 49 , 139 , 115 , 189 , 185 , 246 , 70 , 225 , 168 , 193 , 217 , 195 , 47 , 66 ,
1316
+ 179 , 240 , 153 , 24 , 114 , 215 , 144 , 196 , 212 , 41 , 39 , 155 , 246 , 25
1318
1317
]
1319
1318
) ;
1319
+
1320
+ // Check we can verify the merkle proof validity, but fail if we supply wrong data.
1321
+ let block_header = client. block_header ( resp. block_height ) . unwrap ( ) ;
1322
+ assert ! ( utils:: validate_merkle_proof(
1323
+ & txid,
1324
+ & block_header. merkle_root,
1325
+ & resp
1326
+ ) ) ;
1327
+
1328
+ let mut fail_resp = resp. clone ( ) ;
1329
+ fail_resp. pos = 13 ;
1330
+ assert ! ( !utils:: validate_merkle_proof(
1331
+ & txid,
1332
+ & block_header. merkle_root,
1333
+ & fail_resp
1334
+ ) ) ;
1335
+
1336
+ let fail_block_header = client. block_header ( resp. block_height + 1 ) . unwrap ( ) ;
1337
+ assert ! ( !utils:: validate_merkle_proof(
1338
+ & txid,
1339
+ & fail_block_header. merkle_root,
1340
+ & resp
1341
+ ) ) ;
1320
1342
}
1321
1343
1322
1344
#[ test]
0 commit comments