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
3 changes: 2 additions & 1 deletion mm2src/coins/qrc20.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ mod swap;
/// because we should pay only a fee in Qtum to send the QRC20 transaction.
const OUTPUT_QTUM_AMOUNT: u64 = 0;
const QRC20_GAS_LIMIT_DEFAULT: u64 = 100_000;
const QRC20_PAYMENT_GAS_LIMIT: u64 = 200_000;
const QRC20_GAS_PRICE_DEFAULT: u64 = 40;
const QRC20_DUST: u64 = 0;
// Keccak-256 hash of `Transfer` event
Expand Down Expand Up @@ -1029,7 +1030,7 @@ impl MmCoin for Qrc20Coin {
/// This method is called to check our QTUM balance.
fn get_trade_fee(&self) -> Box<dyn Future<Item = TradeFee, Error = String> + Send> {
// `erc20Payment` may require two `approve` contract calls in worst case,
let gas_fee = 3 * QRC20_GAS_LIMIT_DEFAULT * QRC20_GAS_PRICE_DEFAULT;
let gas_fee = (2 * QRC20_GAS_LIMIT_DEFAULT + QRC20_PAYMENT_GAS_LIMIT) * QRC20_GAS_PRICE_DEFAULT;

let selfi = self.clone();
let fut = async move {
Expand Down
21 changes: 14 additions & 7 deletions mm2src/coins/qrc20/qrc20_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use mocktopus::mocking::{MockResult, Mockable};

const EXPECTED_TX_FEE: i64 = 1000;
const CONTRACT_CALL_GAS_FEE: i64 = (QRC20_GAS_LIMIT_DEFAULT * QRC20_GAS_PRICE_DEFAULT) as i64;
const SWAP_PAYMENT_GAS_FEE: i64 = (QRC20_PAYMENT_GAS_LIMIT * QRC20_GAS_PRICE_DEFAULT) as i64;

pub fn qrc20_coin_for_test(priv_key: &[u8], fallback_swap: Option<&str>) -> (MmArc, Qrc20Coin) {
let conf = json!({
Expand Down Expand Up @@ -604,8 +605,10 @@ fn test_get_trade_fee() {
check_tx_fee(&coin, ActualTxFee::Fixed(EXPECTED_TX_FEE as u64));

let actual_trade_fee = coin.get_trade_fee().wait().unwrap();
let expected_trade_fee_amount =
big_decimal_from_sat((3 * CONTRACT_CALL_GAS_FEE + EXPECTED_TX_FEE) as i64, coin.utxo.decimals);
let expected_trade_fee_amount = big_decimal_from_sat(
(2 * CONTRACT_CALL_GAS_FEE + SWAP_PAYMENT_GAS_FEE + EXPECTED_TX_FEE) as i64,
coin.utxo.decimals,
);
let expected = TradeFee {
coin: "QTUM".into(),
amount: expected_trade_fee_amount.into(),
Expand All @@ -631,8 +634,10 @@ fn test_sender_trade_preimage_zero_allowance() {
let allowance = block_on(coin.allowance(coin.swap_contract_address)).expect("!allowance");
assert_eq!(allowance, 0.into());

let erc20_payment_fee_with_one_approve =
big_decimal_from_sat(2 * CONTRACT_CALL_GAS_FEE + EXPECTED_TX_FEE, coin.utxo.decimals);
let erc20_payment_fee_with_one_approve = big_decimal_from_sat(
CONTRACT_CALL_GAS_FEE + SWAP_PAYMENT_GAS_FEE + EXPECTED_TX_FEE,
coin.utxo.decimals,
);
let sender_refund_fee = big_decimal_from_sat(CONTRACT_CALL_GAS_FEE + EXPECTED_TX_FEE, coin.utxo.decimals);

let actual = coin
Expand Down Expand Up @@ -667,9 +672,11 @@ fn test_sender_trade_preimage_with_allowance() {
assert_eq!(allowance, 300_000_000.into());

let erc20_payment_fee_without_approve =
big_decimal_from_sat(CONTRACT_CALL_GAS_FEE + EXPECTED_TX_FEE, coin.utxo.decimals);
let erc20_payment_fee_with_two_approves =
big_decimal_from_sat(3 * CONTRACT_CALL_GAS_FEE + EXPECTED_TX_FEE, coin.utxo.decimals);
big_decimal_from_sat(SWAP_PAYMENT_GAS_FEE + EXPECTED_TX_FEE, coin.utxo.decimals);
let erc20_payment_fee_with_two_approves = big_decimal_from_sat(
2 * CONTRACT_CALL_GAS_FEE + SWAP_PAYMENT_GAS_FEE + EXPECTED_TX_FEE,
coin.utxo.decimals,
);
let sender_refund_fee = big_decimal_from_sat(CONTRACT_CALL_GAS_FEE + EXPECTED_TX_FEE, coin.utxo.decimals);

let actual = coin
Expand Down
2 changes: 1 addition & 1 deletion mm2src/coins/qrc20/swap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,7 @@ impl Qrc20Coin {
) -> Qrc20ABIResult<ContractCallOutput> {
let params = self.erc20_payment_call_bytes(id, value, time_lock, secret_hash, receiver_addr)?;

let gas_limit = QRC20_GAS_LIMIT_DEFAULT;
let gas_limit = QRC20_PAYMENT_GAS_LIMIT;
let gas_price = QRC20_GAS_PRICE_DEFAULT;
let script_pubkey = generate_contract_call_script_pubkey(
&params, // params of the function
Expand Down