Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions mm2src/coins/utxo/utxo_common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -426,10 +426,10 @@ where
if let ActualTxFee::Dynamic(ref f) = coin_tx_fee {
tx_fee += (f * P2PKH_OUTPUT_LEN) / KILO_BYTE;
}
if let Some(min_relay) = min_relay_fee {
if tx_fee < min_relay {
tx_fee = min_relay;
}
}
if let Some(min_relay) = min_relay_fee {
if tx_fee < min_relay {
tx_fee = min_relay;
}
}
break;
Expand Down
46 changes: 46 additions & 0 deletions mm2src/coins/utxo/utxo_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1105,6 +1105,52 @@ fn test_generate_transaction_relay_fee_is_used_when_dynamic_fee_is_lower() {
assert!(unsafe { GET_RELAY_FEE_CALLED });
}

#[test]
#[cfg(not(target_arch = "wasm32"))]
// https://github.com/KomodoPlatform/atomicDEX-API/issues/1037
fn test_generate_transaction_relay_fee_is_used_when_dynamic_fee_is_lower_and_deduct_from_output() {
let client = NativeClientImpl::default();

static mut GET_RELAY_FEE_CALLED: bool = false;
NativeClient::get_relay_fee.mock_safe(|_| {
unsafe { GET_RELAY_FEE_CALLED = true };
MockResult::Return(Box::new(futures01::future::ok("1.0".parse().unwrap())))
});
let client = UtxoRpcClientEnum::Native(NativeClient(Arc::new(client)));
let mut coin = utxo_coin_fields_for_test(client, None, false);
coin.conf.force_min_relay_fee = true;
let coin = utxo_coin_from_fields(coin);
let unspents = vec![UnspentInfo {
value: 1000000000,
outpoint: OutPoint::default(),
height: Default::default(),
}];

let outputs = vec![TransactionOutput {
script_pubkey: vec![].into(),
value: 1000000000,
}];

let fut = coin.generate_transaction(
unspents,
outputs,
FeePolicy::DeductFromOutput(0),
Some(ActualTxFee::Dynamic(100)),
None,
);
let generated = block_on(fut).unwrap();
assert_eq!(generated.0.outputs.len(), 1);
// `output (= 10.0) - fee_amount (= 1.0)`
assert_eq!(generated.0.outputs[0].value, 900000000);

// generated transaction fee must be equal to relay fee if calculated dynamic fee is lower than relay
assert_eq!(generated.1.fee_amount, 100000000);
assert_eq!(generated.1.unused_change, None);
assert_eq!(generated.1.received_by_me, 0);
assert_eq!(generated.1.spent_by_me, 1000000000);
assert!(unsafe { GET_RELAY_FEE_CALLED });
}

#[test]
#[cfg(not(target_arch = "wasm32"))]
// https://github.com/KomodoPlatform/atomicDEX-API/issues/617
Expand Down