Skip to content

Commit e53b49c

Browse files
committed
Added function tx_builder.get_total_output and changed the burn value to be added to the outputs instead of being subtracted from the inputs
1 parent a505e16 commit e53b49c

File tree

1 file changed

+40
-19
lines changed

1 file changed

+40
-19
lines changed

rust/src/tx_builder.rs

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)