@@ -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 => {
@@ -969,13 +967,20 @@ impl TransactionBuilder {
969967 } ) . unwrap_or ( ( Value :: zero ( ) , Value :: zero ( ) ) )
970968 }
971969
972- /// Return explicit input plus implicit input plus mint minus burn
970+ /// Return explicit input plus implicit input plus mint
973971 pub fn get_total_input ( & self ) -> Result < Value , JsError > {
974- let ( mint_value, burn_value ) = self . get_mint_as_values ( ) ;
972+ let ( mint_value, _ ) = self . get_mint_as_values ( ) ;
975973 self . get_explicit_input ( ) ?
976974 . checked_add ( & self . get_implicit_input ( ) ?) ?
977- . checked_add ( & mint_value) ?
978- . checked_sub ( & burn_value)
975+ . checked_add ( & mint_value)
976+ }
977+
978+ /// Return explicit output plus deposit plus burn
979+ pub fn get_total_output ( & self ) -> Result < Value , JsError > {
980+ let ( _, burn_value) = self . get_mint_as_values ( ) ;
981+ self . get_explicit_output ( ) ?
982+ . checked_add ( & Value :: new ( & self . get_deposit ( ) ?) ) ?
983+ . checked_add ( & burn_value)
979984 }
980985
981986 /// does not include fee
@@ -1020,10 +1025,7 @@ impl TransactionBuilder {
10201025 let data_hash = None ;
10211026
10221027 let input_total = self . get_total_input ( ) ?;
1023-
1024- let output_total = self
1025- . get_explicit_output ( ) ?
1026- . checked_add ( & Value :: new ( & self . get_deposit ( ) ?) ) ?;
1028+ let output_total = self . get_total_output ( ) ?;
10271029
10281030 use std:: cmp:: Ordering ;
10291031 match & input_total. partial_cmp ( & output_total. checked_add ( & Value :: new ( & fee) ) ?) {
@@ -4157,7 +4159,7 @@ mod tests {
41574159 }
41584160
41594161 #[ test]
4160- fn total_input_with_mint_and_burn ( ) {
4162+ fn total_input_output_with_mint_and_burn ( ) {
41614163 let mut tx_builder = create_tx_builder_with_fee ( & create_linear_fee ( 0 , 1 ) ) ;
41624164 let spend = root_key_15 ( )
41634165 . derive ( harden ( 1852 ) )
@@ -4208,22 +4210,41 @@ mod tests {
42084210 ) ;
42094211 }
42104212
4213+ tx_builder. add_output (
4214+ & TransactionOutputBuilder :: new ( )
4215+ . with_address ( & byron_address ( ) )
4216+ . next ( ) . unwrap ( )
4217+ . with_coin ( & to_bignum ( 42 ) )
4218+ . build ( ) . unwrap ( )
4219+ ) . unwrap ( ) ;
4220+
42114221 let total_input_before_mint = tx_builder. get_total_input ( ) . unwrap ( ) ;
4222+ let total_output_before_mint = tx_builder. get_total_output ( ) . unwrap ( ) ;
42124223
42134224 assert_eq ! ( total_input_before_mint. coin, to_bignum( 300 ) ) ;
4214- let ma1 = total_input_before_mint. multiasset . unwrap ( ) ;
4215- assert_eq ! ( ma1. get( & policy_id1) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 360 ) ) ;
4216- assert_eq ! ( ma1. get( & policy_id2) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 360 ) ) ;
4217-
4225+ assert_eq ! ( total_output_before_mint. coin, to_bignum( 42 ) ) ;
4226+ let ma1_input = total_input_before_mint. multiasset . unwrap ( ) ;
4227+ let ma1_output = total_output_before_mint. multiasset ;
4228+ assert_eq ! ( ma1_input. get( & policy_id1) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 360 ) ) ;
4229+ assert_eq ! ( ma1_input. get( & policy_id2) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 360 ) ) ;
4230+ assert ! ( ma1_output. is_none( ) ) ;
4231+
4232+ // Adding mint
42184233 tx_builder. add_mint_asset ( & mint_script1, & name, Int :: new_i32 ( 40 ) ) ;
4234+
4235+ // Adding burn
42194236 tx_builder. add_mint_asset ( & mint_script2, & name, Int :: new_i32 ( -40 ) ) ;
42204237
42214238 let total_input_after_mint = tx_builder. get_total_input ( ) . unwrap ( ) ;
4239+ let total_output_after_mint = tx_builder. get_total_output ( ) . unwrap ( ) ;
42224240
42234241 assert_eq ! ( total_input_after_mint. coin, to_bignum( 300 ) ) ;
4224- let ma2 = total_input_after_mint. multiasset . unwrap ( ) ;
4225- assert_eq ! ( ma2. get( & policy_id1) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 400 ) ) ;
4226- assert_eq ! ( ma2. get( & policy_id2) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 320 ) ) ;
4242+ assert_eq ! ( total_output_before_mint. coin, to_bignum( 42 ) ) ;
4243+ let ma2_input = total_input_after_mint. multiasset . unwrap ( ) ;
4244+ let ma2_output = total_output_after_mint. multiasset . unwrap ( ) ;
4245+ assert_eq ! ( ma2_input. get( & policy_id1) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 400 ) ) ;
4246+ assert_eq ! ( ma2_input. get( & policy_id2) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 360 ) ) ;
4247+ assert_eq ! ( ma2_output. get( & policy_id2) . unwrap( ) . get( & name) . unwrap( ) , to_bignum( 40 ) ) ;
42274248 }
42284249
42294250}
0 commit comments