@@ -330,9 +330,7 @@ impl TransactionBuilder {
330330 pub fn add_inputs_from ( & mut self , inputs : & TransactionUnspentOutputs , strategy : CoinSelectionStrategyCIP2 ) -> Result < ( ) , JsError > {
331331 let available_inputs = & inputs. 0 . clone ( ) ;
332332 let mut input_total = self . get_total_input ( ) ?;
333- let mut output_total = self
334- . get_explicit_output ( ) ?
335- . checked_add ( & Value :: new ( & self . get_deposit ( ) ?) ) ?
333+ let mut output_total = self . get_total_output ( ) ?
336334 . checked_add ( & Value :: new ( & self . min_fee ( ) ?) ) ?;
337335 match strategy {
338336 CoinSelectionStrategyCIP2 :: LargestFirst => {
@@ -949,13 +947,20 @@ impl TransactionBuilder {
949947 } ) . unwrap_or ( ( Value :: zero ( ) , Value :: zero ( ) ) )
950948 }
951949
952- /// Return explicit input plus implicit input plus mint minus burn
950+ /// Return explicit input plus implicit input plus mint
953951 pub fn get_total_input ( & self ) -> Result < Value , JsError > {
954- let ( mint_value, burn_value ) = self . get_mint_as_values ( ) ;
952+ let ( mint_value, _ ) = self . get_mint_as_values ( ) ;
955953 self . get_explicit_input ( ) ?
956954 . checked_add ( & self . get_implicit_input ( ) ?) ?
957- . checked_add ( & mint_value) ?
958- . checked_sub ( & burn_value)
955+ . checked_add ( & mint_value)
956+ }
957+
958+ /// Return explicit output plus deposit plus burn
959+ pub fn get_total_output ( & self ) -> Result < Value , JsError > {
960+ let ( _, burn_value) = self . get_mint_as_values ( ) ;
961+ self . get_explicit_output ( ) ?
962+ . checked_add ( & Value :: new ( & self . get_deposit ( ) ?) ) ?
963+ . checked_add ( & burn_value)
959964 }
960965
961966 /// does not include fee
@@ -1000,10 +1005,7 @@ impl TransactionBuilder {
10001005 let data_hash = None ;
10011006
10021007 let input_total = self . get_total_input ( ) ?;
1003-
1004- let output_total = self
1005- . get_explicit_output ( ) ?
1006- . checked_add ( & Value :: new ( & self . get_deposit ( ) ?) ) ?;
1008+ let output_total = self . get_total_output ( ) ?;
10071009
10081010 use std:: cmp:: Ordering ;
10091011 match & input_total. partial_cmp ( & output_total. checked_add ( & Value :: new ( & fee) ) ?) {
@@ -4137,7 +4139,7 @@ mod tests {
41374139 }
41384140
41394141 #[ test]
4140- fn total_input_with_mint_and_burn ( ) {
4142+ fn total_input_output_with_mint_and_burn ( ) {
41414143 let mut tx_builder = create_tx_builder_with_fee ( & create_linear_fee ( 0 , 1 ) ) ;
41424144 let spend = root_key_15 ( )
41434145 . derive ( harden ( 1852 ) )
@@ -4188,22 +4190,41 @@ mod tests {
41884190 ) ;
41894191 }
41904192
4193+ tx_builder. add_output (
4194+ & TransactionOutputBuilder :: new ( )
4195+ . with_address ( & byron_address ( ) )
4196+ . next ( ) . unwrap ( )
4197+ . with_coin ( & to_bignum ( 42 ) )
4198+ . build ( ) . unwrap ( )
4199+ ) . unwrap ( ) ;
4200+
41914201 let total_input_before_mint = tx_builder. get_total_input ( ) . unwrap ( ) ;
4202+ let total_output_before_mint = tx_builder. get_total_output ( ) . unwrap ( ) ;
41924203
41934204 assert_eq ! ( total_input_before_mint. coin, to_bignum( 300 ) ) ;
4194- let ma1 = total_input_before_mint. multiasset . unwrap ( ) ;
4195- assert_eq ! ( ma1. get( & policy_id1) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 360 ) ) ;
4196- assert_eq ! ( ma1. get( & policy_id2) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 360 ) ) ;
4197-
4205+ assert_eq ! ( total_output_before_mint. coin, to_bignum( 42 ) ) ;
4206+ let ma1_input = total_input_before_mint. multiasset . unwrap ( ) ;
4207+ let ma1_output = total_output_before_mint. multiasset ;
4208+ assert_eq ! ( ma1_input. get( & policy_id1) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 360 ) ) ;
4209+ assert_eq ! ( ma1_input. get( & policy_id2) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 360 ) ) ;
4210+ assert ! ( ma1_output. is_none( ) ) ;
4211+
4212+ // Adding mint
41984213 tx_builder. add_mint_asset ( & mint_script1, & name, Int :: new_i32 ( 40 ) ) ;
4214+
4215+ // Adding burn
41994216 tx_builder. add_mint_asset ( & mint_script2, & name, Int :: new_i32 ( -40 ) ) ;
42004217
42014218 let total_input_after_mint = tx_builder. get_total_input ( ) . unwrap ( ) ;
4219+ let total_output_after_mint = tx_builder. get_total_output ( ) . unwrap ( ) ;
42024220
42034221 assert_eq ! ( total_input_after_mint. coin, to_bignum( 300 ) ) ;
4204- let ma2 = total_input_after_mint. multiasset . unwrap ( ) ;
4205- assert_eq ! ( ma2. get( & policy_id1) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 400 ) ) ;
4206- assert_eq ! ( ma2. get( & policy_id2) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 320 ) ) ;
4222+ assert_eq ! ( total_output_before_mint. coin, to_bignum( 42 ) ) ;
4223+ let ma2_input = total_input_after_mint. multiasset . unwrap ( ) ;
4224+ let ma2_output = total_output_after_mint. multiasset . unwrap ( ) ;
4225+ assert_eq ! ( ma2_input. get( & policy_id1) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 400 ) ) ;
4226+ assert_eq ! ( ma2_input. get( & policy_id2) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 360 ) ) ;
4227+ assert_eq ! ( ma2_output. get( & policy_id2) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 40 ) ) ;
42074228 }
42084229
42094230}
0 commit comments