@@ -931,7 +931,7 @@ impl Transaction {
931
931
}
932
932
933
933
/// Get the "discount weight" of this transaction; this is the weight minus the output witnesses and minus the
934
- /// differences between asset and nonce commitments from their explicit values.
934
+ /// differences between asset and nonce commitments from their explicit values (weighted as part of the base transaction) .
935
935
pub fn discount_weight ( & self ) -> usize {
936
936
let mut weight = self . scaled_size ( 4 ) ;
937
937
@@ -941,10 +941,10 @@ impl Transaction {
941
941
let witness_weight = VarInt ( sp_len as u64 ) . size ( ) + sp_len + VarInt ( rp_len as u64 ) . size ( ) + rp_len;
942
942
weight -= witness_weight. saturating_sub ( 2 ) ; // explicit transactions have 1 byte for each empty proof
943
943
if out. value . is_confidential ( ) {
944
- weight -= 33 - 9 ;
944
+ weight -= ( 33 - 9 ) * 4 ;
945
945
}
946
946
if out. nonce . is_confidential ( ) {
947
- weight -= 33 - 1 ;
947
+ weight -= ( 33 - 1 ) * 4 ;
948
948
}
949
949
}
950
950
@@ -2444,16 +2444,16 @@ mod tests {
2444
2444
assert_eq ! ( tx. output. len( ) , 2 ) ;
2445
2445
assert_eq ! ( tx. weight( ) , 5330 ) ;
2446
2446
assert_eq ! ( tx. vsize( ) , 1333 ) ;
2447
- assert_eq ! ( tx. discount_weight( ) , 1031 ) ;
2448
- assert_eq ! ( tx. discount_vsize( ) , 258 ) ;
2447
+ assert_eq ! ( tx. discount_weight( ) , 863 ) ;
2448
+ assert_eq ! ( tx. discount_vsize( ) , 216 ) ;
2449
2449
2450
2450
let tx: Transaction = hex_deserialize ! ( include_str!( "../tests/data/1in3out_tx.hex" ) ) ;
2451
2451
assert_eq ! ( tx. input. len( ) , 1 ) ;
2452
2452
assert_eq ! ( tx. output. len( ) , 3 ) ;
2453
2453
assert_eq ! ( tx. weight( ) , 10107 ) ;
2454
2454
assert_eq ! ( tx. vsize( ) , 2527 ) ;
2455
- assert_eq ! ( tx. discount_weight( ) , 1509 ) ;
2456
- assert_eq ! ( tx. discount_vsize( ) , 378 ) ;
2455
+ assert_eq ! ( tx. discount_weight( ) , 1173 ) ;
2456
+ assert_eq ! ( tx. discount_vsize( ) , 294 ) ;
2457
2457
2458
2458
let tx: Transaction = hex_deserialize ! ( include_str!( "../tests/data/2in3out_exp.hex" ) ) ;
2459
2459
assert_eq ! ( tx. input. len( ) , 2 ) ;
@@ -2468,47 +2468,47 @@ mod tests {
2468
2468
assert_eq ! ( tx. output. len( ) , 3 ) ;
2469
2469
assert_eq ! ( tx. weight( ) , 10300 ) ;
2470
2470
assert_eq ! ( tx. vsize( ) , 2575 ) ;
2471
- assert_eq ! ( tx. discount_weight( ) , 1638 ) ;
2472
- assert_eq ! ( tx. discount_vsize( ) , 410 ) ;
2471
+ assert_eq ! ( tx. discount_weight( ) , 1302 ) ;
2472
+ assert_eq ! ( tx. discount_vsize( ) , 326 ) ;
2473
2473
2474
2474
let tx: Transaction = hex_deserialize ! ( include_str!( "../tests/data/2in3out_tx2.hex" ) ) ;
2475
2475
assert_eq ! ( tx. input. len( ) , 2 ) ;
2476
2476
assert_eq ! ( tx. output. len( ) , 3 ) ;
2477
2477
assert_eq ! ( tx. weight( ) , 10536 ) ;
2478
2478
assert_eq ! ( tx. vsize( ) , 2634 ) ;
2479
- assert_eq ! ( tx. discount_weight( ) , 1874 ) ;
2480
- assert_eq ! ( tx. discount_vsize( ) , 469 ) ;
2479
+ assert_eq ! ( tx. discount_weight( ) , 1538 ) ;
2480
+ assert_eq ! ( tx. discount_vsize( ) , 385 ) ;
2481
2481
2482
2482
let tx: Transaction = hex_deserialize ! ( include_str!( "../tests/data/3in3out_tx.hex" ) ) ;
2483
2483
assert_eq ! ( tx. input. len( ) , 3 ) ;
2484
2484
assert_eq ! ( tx. output. len( ) , 3 ) ;
2485
2485
assert_eq ! ( tx. weight( ) , 10922 ) ;
2486
2486
assert_eq ! ( tx. vsize( ) , 2731 ) ;
2487
- assert_eq ! ( tx. discount_weight( ) , 2196 ) ;
2488
- assert_eq ! ( tx. discount_vsize( ) , 549 ) ;
2487
+ assert_eq ! ( tx. discount_weight( ) , 1860 ) ;
2488
+ assert_eq ! ( tx. discount_vsize( ) , 465 ) ;
2489
2489
2490
2490
let tx: Transaction = hex_deserialize ! ( include_str!( "../tests/data/4in3out_tx.hex" ) ) ;
2491
2491
assert_eq ! ( tx. input. len( ) , 4 ) ;
2492
2492
assert_eq ! ( tx. output. len( ) , 3 ) ;
2493
2493
assert_eq ! ( tx. weight( ) , 11192 ) ;
2494
2494
assert_eq ! ( tx. vsize( ) , 2798 ) ;
2495
- assert_eq ! ( tx. discount_weight( ) , 2466 ) ;
2496
- assert_eq ! ( tx. discount_vsize( ) , 617 ) ;
2495
+ assert_eq ! ( tx. discount_weight( ) , 2130 ) ;
2496
+ assert_eq ! ( tx. discount_vsize( ) , 533 ) ;
2497
2497
2498
2498
let tx: Transaction = hex_deserialize ! ( include_str!( "../tests/data/2in4out_tx.hex" ) ) ;
2499
2499
assert_eq ! ( tx. input. len( ) , 2 ) ;
2500
2500
assert_eq ! ( tx. output. len( ) , 4 ) ;
2501
2501
assert_eq ! ( tx. weight( ) , 15261 ) ;
2502
2502
assert_eq ! ( tx. vsize( ) , 3816 ) ;
2503
- assert_eq ! ( tx. discount_weight( ) , 2268 ) ;
2504
- assert_eq ! ( tx. discount_vsize( ) , 567 ) ;
2503
+ assert_eq ! ( tx. discount_weight( ) , 1764 ) ;
2504
+ assert_eq ! ( tx. discount_vsize( ) , 441 ) ;
2505
2505
2506
2506
let tx: Transaction = hex_deserialize ! ( include_str!( "../tests/data/2in5out_tx.hex" ) ) ;
2507
2507
assert_eq ! ( tx. input. len( ) , 2 ) ;
2508
2508
assert_eq ! ( tx. output. len( ) , 5 ) ;
2509
2509
assert_eq ! ( tx. weight( ) , 20030 ) ;
2510
2510
assert_eq ! ( tx. vsize( ) , 5008 ) ;
2511
- assert_eq ! ( tx. discount_weight( ) , 2706 ) ;
2512
- assert_eq ! ( tx. discount_vsize( ) , 677 ) ;
2511
+ assert_eq ! ( tx. discount_weight( ) , 2034 ) ;
2512
+ assert_eq ! ( tx. discount_vsize( ) , 509 ) ;
2513
2513
}
2514
2514
}
0 commit comments