Skip to content
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
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
5 changes: 5 additions & 0 deletions mm2src/mm2_main/src/database.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ fn migration_7() -> Vec<(&'static str, Vec<String>)> {
db_common::sqlite::execute_batch(stats_swaps::ADD_COINS_PRICE_INFOMATION)
}

fn migration_8() -> Vec<(&'static str, Vec<String>)> {
db_common::sqlite::execute_batch(stats_swaps::ADD_MAKER_TAKER_PUBKEYS)
}

async fn statements_for_migration(ctx: &MmArc, current_migration: i64) -> Option<Vec<(&'static str, Vec<String>)>> {
match current_migration {
1 => Some(migration_1(ctx).await),
Expand All @@ -106,6 +110,7 @@ async fn statements_for_migration(ctx: &MmArc, current_migration: i64) -> Option
5 => Some(migration_5()),
6 => Some(migration_6()),
7 => Some(migration_7()),
8 => Some(migration_8()),
_ => None,
}
}
Expand Down
37 changes: 35 additions & 2 deletions mm2src/mm2_main/src/database/stats_swaps.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,23 @@ const INSERT_STATS_SWAP: &str = "INSERT INTO stats_swaps (
taker_amount,
is_success,
maker_coin_usd_price,
taker_coin_usd_price
) VALUES (:maker_coin, :maker_coin_ticker, :maker_coin_platform, :taker_coin, :taker_coin_ticker, :taker_coin_platform, :uuid, :started_at, :finished_at, :maker_amount, :taker_amount, :is_success, :maker_coin_usd_price, :taker_coin_usd_price)";
taker_coin_usd_price,
maker_pubkey,
taker_pubkey
) VALUES (:maker_coin, :maker_coin_ticker, :maker_coin_platform, :taker_coin, :taker_coin_ticker,
:taker_coin_platform, :uuid, :started_at, :finished_at, :maker_amount, :taker_amount, :is_success,
:maker_coin_usd_price, :taker_coin_usd_price, :maker_pubkey, :taker_pubkey)";

pub const ADD_COINS_PRICE_INFOMATION: &[&str] = &[
"ALTER TABLE stats_swaps ADD COLUMN maker_coin_usd_price DECIMAL;",
"ALTER TABLE stats_swaps ADD COLUMN taker_coin_usd_price DECIMAL;",
];

pub const ADD_MAKER_TAKER_PUBKEYS: &[&str] = &[
"ALTER TABLE stats_swaps ADD COLUMN maker_pubkey VARCHAR(255);",
"ALTER TABLE stats_swaps ADD COLUMN taker_pubkey VARCHAR(255);",
Comment on lines +59 to +60

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't just "ALTER TABLE stats_swaps ADD COLUMN maker_pubkey VARCHAR(255), ADD COLUMN taker_pubkey VARCHAR(255); work?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

];

pub const ADD_SPLIT_TICKERS: &[&str] = &[
"ALTER TABLE stats_swaps ADD COLUMN maker_coin_ticker VARCHAR(255) NOT NULL DEFAULT '';",
"ALTER TABLE stats_swaps ADD COLUMN maker_coin_platform VARCHAR(255) NOT NULL DEFAULT '';",
Expand Down Expand Up @@ -118,13 +127,23 @@ fn insert_stats_maker_swap_sql(swap: &MakerSavedSwap) -> Option<(&'static str, O
return None;
},
};

let finished_at = match swap.finished_at() {
Ok(t) => t.to_string(),
Err(e) => {
error!("Error {} on getting swap {} finished_at", e, swap.uuid);
return None;
},
};

let pubkeys = match swap.swap_pubkeys() {
Ok(p) => p,
Err(e) => {
error!("Error {} on getting swap {} pubkeys", e, swap.uuid);
return None;
},
};

let is_success = swap
.is_success()
.expect("is_success can return error only when swap is not finished");
Expand All @@ -147,7 +166,10 @@ fn insert_stats_maker_swap_sql(swap: &MakerSavedSwap) -> Option<(&'static str, O
":is_success": (is_success as u32).to_string(),
":maker_coin_usd_price": swap.maker_coin_usd_price.as_ref().map(|p| p.to_string()),
":taker_coin_usd_price": swap.taker_coin_usd_price.as_ref().map(|p| p.to_string()),
":maker_pubkey": pubkeys.maker,
":taker_pubkey": pubkeys.taker,
};

Some((INSERT_STATS_SWAP, params))
}

Expand Down Expand Up @@ -198,6 +220,15 @@ fn insert_stats_taker_swap_sql(swap: &TakerSavedSwap) -> Option<(&'static str, O
return None;
},
};

let pubkeys = match swap.swap_pubkeys() {
Ok(p) => p,
Err(e) => {
error!("Error {} on getting swap {} pubkeys", e, swap.uuid);
return None;
},
};

let is_success = swap
.is_success()
.expect("is_success can return error only when swap is not finished");
Expand All @@ -220,6 +251,8 @@ fn insert_stats_taker_swap_sql(swap: &TakerSavedSwap) -> Option<(&'static str, O
":is_success": (is_success as u32).to_string(),
":maker_coin_usd_price": swap.maker_coin_usd_price.as_ref().map(|p| p.to_string()),
":taker_coin_usd_price": swap.taker_coin_usd_price.as_ref().map(|p| p.to_string()),
":maker_pubkey": pubkeys.maker,
":taker_pubkey": pubkeys.taker,
};
Some((INSERT_STATS_SWAP, params))
}
Expand Down
11 changes: 11 additions & 0 deletions mm2src/mm2_main/src/lp_swap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1450,6 +1450,17 @@ fn detect_secret_hash_algo(maker_coin: &MmCoinEnum, taker_coin: &MmCoinEnum) ->
}
}

#[derive(Debug, Deserialize, PartialEq, Serialize, Default)]
Comment thread
shamardy marked this conversation as resolved.
Outdated
pub struct SwapPubkeys {
pub maker: String,
pub taker: String,
}

impl SwapPubkeys {
#[inline]
fn new(maker: String, taker: String) -> Self { SwapPubkeys { maker, taker } }
}

#[cfg(all(test, not(target_arch = "wasm32")))]
mod lp_swap_tests {
use super::*;
Expand Down
19 changes: 17 additions & 2 deletions mm2src/mm2_main/src/lp_swap/maker_swap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ use super::{broadcast_my_swap_status, broadcast_p2p_tx_msg, broadcast_swap_messa
get_locked_amount, recv_swap_msg, swap_topic, taker_payment_spend_deadline, tx_helper_topic,
wait_for_maker_payment_conf_until, AtomicSwap, LockedAmount, MySwapInfo, NegotiationDataMsg,
NegotiationDataV2, NegotiationDataV3, RecoveredSwap, RecoveredSwapAction, SavedSwap, SavedSwapIo,
SavedTradeFee, SecretHashAlgo, SwapConfirmationsSettings, SwapError, SwapMsg, SwapTxDataMsg, SwapsContext,
TransactionIdentifier, WAIT_CONFIRM_INTERVAL};
SavedTradeFee, SecretHashAlgo, SwapConfirmationsSettings, SwapError, SwapMsg, SwapPubkeys, SwapTxDataMsg,
SwapsContext, TransactionIdentifier, WAIT_CONFIRM_INTERVAL};
use crate::mm2::lp_dispatcher::{DispatcherContext, LpEvents};
use crate::mm2::lp_network::subscribe_to_topic;
use crate::mm2::lp_ordermatch::{MakerOrderBuilder, OrderConfirmationsSettings};
Expand Down Expand Up @@ -1922,6 +1922,21 @@ impl MakerSavedSwap {
self.taker_coin_usd_price = Some(rates.rel);
}
}

pub fn swap_pubkeys(&self) -> Result<SwapPubkeys, String> {
match self.events.first() {
Some(event) => match &event.event {
// TODO: Adjust for private coins when/if they are braodcasted
// TODO: Adjust for HD wallet when completed
MakerSwapEvent::Started(data) => Ok(SwapPubkeys::new(
data.my_persistent_pub.to_string(),
data.taker.to_string(),
)),
_ => ERR!("First swap event must be Started"),
},
None => ERR!("Can't get maker/taker pubkey, events are empty"),
}
}
}

#[allow(clippy::large_enum_variant)]
Expand Down
19 changes: 17 additions & 2 deletions mm2src/mm2_main/src/lp_swap/taker_swap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ use super::{broadcast_my_swap_status, broadcast_swap_message, broadcast_swap_mes
check_other_coin_balance_for_swap, dex_fee_amount_from_taker_coin, dex_fee_rate, dex_fee_threshold,
get_locked_amount, recv_swap_msg, swap_topic, wait_for_maker_payment_conf_until, AtomicSwap, LockedAmount,
MySwapInfo, NegotiationDataMsg, NegotiationDataV2, NegotiationDataV3, RecoveredSwap, RecoveredSwapAction,
SavedSwap, SavedSwapIo, SavedTradeFee, SwapConfirmationsSettings, SwapError, SwapMsg, SwapTxDataMsg,
SwapsContext, TransactionIdentifier, WAIT_CONFIRM_INTERVAL};
SavedSwap, SavedSwapIo, SavedTradeFee, SwapConfirmationsSettings, SwapError, SwapMsg, SwapPubkeys,
SwapTxDataMsg, SwapsContext, TransactionIdentifier, WAIT_CONFIRM_INTERVAL};
use crate::mm2::lp_network::subscribe_to_topic;
use crate::mm2::lp_ordermatch::{MatchBy, OrderConfirmationsSettings, TakerAction, TakerOrderBuilder};
use crate::mm2::lp_price::fetch_swap_coins_price;
Expand Down Expand Up @@ -302,6 +302,21 @@ impl TakerSavedSwap {
self.taker_coin_usd_price = Some(rates.rel);
}
}

pub fn swap_pubkeys(&self) -> Result<SwapPubkeys, String> {
match self.events.first() {
Some(event) => match &event.event {
// TODO: Adjust for private coins when/if they are braodcasted
// TODO: Adjust for HD wallet when completed
TakerSwapEvent::Started(data) => Ok(SwapPubkeys::new(
data.maker.to_string(),
data.my_persistent_pub.to_string(),
)),
_ => ERR!("First swap event must be Started"),
},
None => ERR!("Can't get maker/taker pubkey, events are empty"),
}
}
}

#[allow(clippy::large_enum_variant)]
Expand Down
34 changes: 16 additions & 18 deletions mm2src/mm2_main/tests/mm2_tests/mm2_tests_inner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -753,7 +753,7 @@ async fn trade_base_rel_electrum(
maker_price: f64,
taker_price: f64,
volume: f64,
) {
) -> (MarketMakerIt, MarketMakerIt, String) {
let coins = json!([
rick_conf(),
morty_conf(),
Expand Down Expand Up @@ -871,21 +871,7 @@ async fn trade_base_rel_electrum(
assert_eq!(0, bob_orderbook.asks.len(), "{} {} asks must be empty", base, rel);
}

#[cfg(target_arch = "wasm32")]
{
const STOP_TIMEOUT_MS: u64 = 1000;

mm_bob.stop_and_wait_for_ctx_is_dropped(STOP_TIMEOUT_MS).await.unwrap();
mm_alice
.stop_and_wait_for_ctx_is_dropped(STOP_TIMEOUT_MS)
.await
.unwrap();
}
#[cfg(not(target_arch = "wasm32"))]
{
mm_bob.stop().await.unwrap();
mm_alice.stop().await.unwrap();
}
(mm_bob, mm_alice, uuids[0].clone())
Comment thread
shamardy marked this conversation as resolved.
Outdated
}

#[test]
Expand All @@ -894,7 +880,13 @@ fn trade_test_electrum_and_eth_coins() {
let bob_policy = Mm2InitPrivKeyPolicy::Iguana;
let alice_policy = Mm2InitPrivKeyPolicy::GlobalHDAccount(0);
let pairs = &[("ETH", "JST")];
block_on(trade_base_rel_electrum(bob_policy, alice_policy, pairs, 1., 2., 0.1));
let (mm_bob, mm_alice, _) = block_on(trade_base_rel_electrum(bob_policy, alice_policy, pairs, 1., 2., 0.1));

// stop mm2.
{
block_on(mm_bob.stop()).unwrap();
block_on(mm_alice.stop()).unwrap();
};
}

#[test]
Expand All @@ -903,7 +895,13 @@ fn trade_test_electrum_rick_zombie() {
let bob_policy = Mm2InitPrivKeyPolicy::Iguana;
let alice_policy = Mm2InitPrivKeyPolicy::Iguana;
let pairs = &[("RICK", "ZOMBIE")];
block_on(trade_base_rel_electrum(bob_policy, alice_policy, pairs, 1., 2., 0.1));
let (mm_bob, mm_alice, _) = block_on(trade_base_rel_electrum(bob_policy, alice_policy, pairs, 1., 2., 0.1));

// stop mm2.
{
block_on(mm_bob.stop()).unwrap();
block_on(mm_alice.stop()).unwrap();
};
}

#[cfg(not(target_arch = "wasm32"))]
Expand Down