mirror of
https://github.com/RoboSats/taptrade-core.git
synced 2025-07-21 02:03:17 +00:00
add atomic bool to disable logging output for escrow cli input
This commit is contained in:
62
taptrade-cli-demo/coordinator/Cargo.lock
generated
62
taptrade-cli-demo/coordinator/Cargo.lock
generated
@ -44,6 +44,21 @@ version = "0.2.18"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
|
checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "android-tzdata"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "android_system_properties"
|
||||||
|
version = "0.1.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstream"
|
name = "anstream"
|
||||||
version = "0.6.15"
|
version = "0.6.15"
|
||||||
@ -463,6 +478,20 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "chrono"
|
||||||
|
version = "0.4.38"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
|
||||||
|
dependencies = [
|
||||||
|
"android-tzdata",
|
||||||
|
"iana-time-zone",
|
||||||
|
"js-sys",
|
||||||
|
"num-traits",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"windows-targets 0.52.6",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "colorchoice"
|
name = "colorchoice"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
@ -493,6 +522,7 @@ dependencies = [
|
|||||||
"bdk",
|
"bdk",
|
||||||
"bincode",
|
"bincode",
|
||||||
"bitcoin 0.32.2",
|
"bitcoin 0.32.2",
|
||||||
|
"chrono",
|
||||||
"dotenvy",
|
"dotenvy",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@ -1206,6 +1236,29 @@ dependencies = [
|
|||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iana-time-zone"
|
||||||
|
version = "0.1.60"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
|
||||||
|
dependencies = [
|
||||||
|
"android_system_properties",
|
||||||
|
"core-foundation-sys",
|
||||||
|
"iana-time-zone-haiku",
|
||||||
|
"js-sys",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"windows-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iana-time-zone-haiku"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ident_case"
|
name = "ident_case"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
@ -3039,6 +3092,15 @@ version = "0.4.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-core"
|
||||||
|
version = "0.52.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
|
||||||
|
dependencies = [
|
||||||
|
"windows-targets 0.52.6",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-sys"
|
name = "windows-sys"
|
||||||
version = "0.48.0"
|
version = "0.48.0"
|
||||||
|
@ -28,6 +28,7 @@ sha2 = "0.10"
|
|||||||
validator = { version = "0.18", features = ["derive"] }
|
validator = { version = "0.18", features = ["derive"] }
|
||||||
musig2 = "0.0.11"
|
musig2 = "0.0.11"
|
||||||
bincode = "1.3.3"
|
bincode = "1.3.3"
|
||||||
|
chrono = "0.4.38"
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
lto = true
|
lto = true
|
||||||
|
@ -191,7 +191,7 @@ async fn submit_obligation_confirmation(
|
|||||||
// or
|
// or
|
||||||
|
|
||||||
// gets called if one of the traders wants to initiate escrow (e.g. claiming they didn't receive the fiat)
|
// gets called if one of the traders wants to initiate escrow (e.g. claiming they didn't receive the fiat)
|
||||||
// before timeout ends
|
// before timeout ends, just sets the maker unhappy and escrow onging flag in the db
|
||||||
async fn request_escrow(
|
async fn request_escrow(
|
||||||
Extension(coordinator): Extension<Arc<Coordinator>>,
|
Extension(coordinator): Extension<Arc<Coordinator>>,
|
||||||
Json(payload): Json<TradeObligationsUnsatisfied>,
|
Json(payload): Json<TradeObligationsUnsatisfied>,
|
||||||
|
@ -150,7 +150,7 @@ impl CoordinatorDB {
|
|||||||
)
|
)
|
||||||
.execute(&db_pool)
|
.execute(&db_pool)
|
||||||
.await?;
|
.await?;
|
||||||
dbg!("Database initialized");
|
debug!("Database initialized");
|
||||||
let shared_db_pool = Arc::new(db_pool);
|
let shared_db_pool = Arc::new(db_pool);
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
db_pool: shared_db_pool,
|
db_pool: shared_db_pool,
|
||||||
@ -745,6 +745,8 @@ impl CoordinatorDB {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// checked by the payout handler on request to determine if the trade is ready for payout and
|
||||||
|
// if escrow is required
|
||||||
pub async fn fetch_trader_happiness(&self, offer_id: &str) -> Result<TraderHappiness> {
|
pub async fn fetch_trader_happiness(&self, offer_id: &str) -> Result<TraderHappiness> {
|
||||||
let row = sqlx::query(
|
let row = sqlx::query(
|
||||||
"SELECT maker_happy, taker_happy, escrow_ongoing FROM taken_offers WHERE offer_id = ?",
|
"SELECT maker_happy, taker_happy, escrow_ongoing FROM taken_offers WHERE offer_id = ?",
|
||||||
@ -764,6 +766,7 @@ impl CoordinatorDB {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this will be checked by the payout handler on request, the escrow winner will be set trough CLI input
|
||||||
pub async fn fetch_escrow_result(&self, offer_id: &str) -> Result<Option<String>> {
|
pub async fn fetch_escrow_result(&self, offer_id: &str) -> Result<Option<String>> {
|
||||||
let row = sqlx::query("SELECT escrow_winner_robohash FROM taken_offers WHERE offer_id = ?")
|
let row = sqlx::query("SELECT escrow_winner_robohash FROM taken_offers WHERE offer_id = ?")
|
||||||
.bind(offer_id)
|
.bind(offer_id)
|
||||||
@ -776,30 +779,6 @@ impl CoordinatorDB {
|
|||||||
Ok(winner_robohash)
|
Ok(winner_robohash)
|
||||||
}
|
}
|
||||||
|
|
||||||
// pub async fn fetch_escrow_tx_payout_data(
|
|
||||||
// &self,
|
|
||||||
// offer_id: &str,
|
|
||||||
// ) -> Result<EscrowPsbtConstructionData> {
|
|
||||||
// let row = sqlx::query("SELECT taproot_xonly_pubkey_hex_maker, taproot_xonly_pubkey_hex_taker, musig_pubkey_compressed_hex_maker, musig_pubkey_compressed_hex_taker FROM taken_offers WHERE offer_id = ?")
|
|
||||||
// .bind(offer_id)
|
|
||||||
// .fetch_one(&*self.db_pool)
|
|
||||||
// .await?;
|
|
||||||
|
|
||||||
// let taproot_xonly_pubkey_hex_maker: String = row.get("taproot_xonly_pubkey_hex_maker");
|
|
||||||
// let taproot_xonly_pubkey_hex_taker: String = row.get("taproot_xonly_pubkey_hex_taker");
|
|
||||||
// let musig_pubkey_compressed_hex_maker: String =
|
|
||||||
// row.get("musig_pubkey_compressed_hex_maker");
|
|
||||||
// let musig_pubkey_compressed_hex_taker: String =
|
|
||||||
// row.get("musig_pubkey_compressed_hex_taker");
|
|
||||||
|
|
||||||
// Ok(EscrowPsbtConstructionData {
|
|
||||||
// taproot_xonly_pubkey_hex_maker,
|
|
||||||
// taproot_xonly_pubkey_hex_taker,
|
|
||||||
// musig_pubkey_compressed_hex_maker,
|
|
||||||
// musig_pubkey_compressed_hex_taker,
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
|
|
||||||
pub async fn get_escrow_tx_amounts(
|
pub async fn get_escrow_tx_amounts(
|
||||||
&self,
|
&self,
|
||||||
trade_id: &str,
|
trade_id: &str,
|
||||||
|
@ -3,16 +3,6 @@ mod coordinator;
|
|||||||
mod database;
|
mod database;
|
||||||
mod wallet;
|
mod wallet;
|
||||||
|
|
||||||
use std::{
|
|
||||||
collections::{HashMap, HashSet},
|
|
||||||
env, fmt,
|
|
||||||
net::SocketAddr,
|
|
||||||
ops::Deref,
|
|
||||||
str::FromStr,
|
|
||||||
sync::{Arc, RwLock},
|
|
||||||
time::{SystemTime, UNIX_EPOCH},
|
|
||||||
};
|
|
||||||
|
|
||||||
use anyhow::{anyhow, Context, Result};
|
use anyhow::{anyhow, Context, Result};
|
||||||
use axum::{
|
use axum::{
|
||||||
http::StatusCode,
|
http::StatusCode,
|
||||||
@ -42,6 +32,7 @@ use bdk::{
|
|||||||
wallet::verify::*,
|
wallet::verify::*,
|
||||||
KeychainKind, SignOptions, SyncOptions, Wallet,
|
KeychainKind, SignOptions, SyncOptions, Wallet,
|
||||||
};
|
};
|
||||||
|
use chrono::Local;
|
||||||
use communication::{api::*, api_server, communication_utils::*, handler_errors::*};
|
use communication::{api::*, api_server, communication_utils::*, handler_errors::*};
|
||||||
use coordinator::{
|
use coordinator::{
|
||||||
bond_monitoring::*, coordinator_utils::*, mempool_monitoring::MempoolHandler,
|
bond_monitoring::*, coordinator_utils::*, mempool_monitoring::MempoolHandler,
|
||||||
@ -58,6 +49,19 @@ use musig2::{
|
|||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sqlx::{sqlite::SqlitePoolOptions, Pool, Row, Sqlite};
|
use sqlx::{sqlite::SqlitePoolOptions, Pool, Row, Sqlite};
|
||||||
|
use std::{
|
||||||
|
collections::{HashMap, HashSet},
|
||||||
|
env, fmt,
|
||||||
|
io::Write,
|
||||||
|
net::SocketAddr,
|
||||||
|
ops::Deref,
|
||||||
|
str::FromStr,
|
||||||
|
sync::{
|
||||||
|
atomic::{AtomicBool, Ordering},
|
||||||
|
Arc, RwLock,
|
||||||
|
},
|
||||||
|
time::{SystemTime, UNIX_EPOCH},
|
||||||
|
};
|
||||||
use tokio::{
|
use tokio::{
|
||||||
net::TcpListener,
|
net::TcpListener,
|
||||||
sync::{oneshot, Mutex},
|
sync::{oneshot, Mutex},
|
||||||
@ -70,12 +74,41 @@ pub struct Coordinator {
|
|||||||
pub coordinator_wallet: Arc<CoordinatorWallet<MemoryDatabase>>,
|
pub coordinator_wallet: Arc<CoordinatorWallet<MemoryDatabase>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LOGGING_ENABLED: AtomicBool = AtomicBool::new(true);
|
||||||
|
|
||||||
|
fn get_logging_color_code(level: log::Level) -> &'static str {
|
||||||
|
match level {
|
||||||
|
log::Level::Error => "\x1B[31m", // Red
|
||||||
|
log::Level::Warn => "\x1B[33m", // Yellow
|
||||||
|
log::Level::Info => "\x1B[32m", // Green
|
||||||
|
log::Level::Debug => "\x1B[34m", // Blue
|
||||||
|
log::Level::Trace => "\x1B[36m", // Cyan
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// populate .env with values before starting
|
// populate .env with values before starting
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
env_logger::builder()
|
env_logger::builder()
|
||||||
.filter_module("coordinator", log::LevelFilter::Trace)
|
.filter_module("coordinator", log::LevelFilter::Trace)
|
||||||
.filter_level(log::LevelFilter::Info)
|
.filter_level(log::LevelFilter::Info)
|
||||||
|
.format(|buf, record| {
|
||||||
|
if LOGGING_ENABLED.load(Ordering::Relaxed) {
|
||||||
|
let level = record.level();
|
||||||
|
let color_code = get_logging_color_code(level);
|
||||||
|
writeln!(
|
||||||
|
buf,
|
||||||
|
"{} [{}{}{}] - {}",
|
||||||
|
Local::now().format("%Y-%m-%d %H:%M:%S"),
|
||||||
|
color_code,
|
||||||
|
level,
|
||||||
|
"\x1B[0m", // Reset color
|
||||||
|
record.args()
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
})
|
||||||
.init();
|
.init();
|
||||||
dotenv().ok();
|
dotenv().ok();
|
||||||
debug!("Starting coordinator");
|
debug!("Starting coordinator");
|
||||||
|
@ -76,7 +76,7 @@ pub async fn init_coordinator_wallet() -> Result<CoordinatorWallet<MemoryDatabas
|
|||||||
wallet
|
wallet
|
||||||
.sync(&backend, SyncOptions::default())
|
.sync(&backend, SyncOptions::default())
|
||||||
.context("Connection to blockchain server failed.")?; // we could also use Esplora to make this async
|
.context("Connection to blockchain server failed.")?; // we could also use Esplora to make this async
|
||||||
dbg!(wallet.get_balance()?);
|
info!("{}", wallet.get_balance()?);
|
||||||
Ok(CoordinatorWallet {
|
Ok(CoordinatorWallet {
|
||||||
wallet: Arc::new(Mutex::new(wallet)),
|
wallet: Arc::new(Mutex::new(wallet)),
|
||||||
backend: Arc::new(backend),
|
backend: Arc::new(backend),
|
||||||
|
Reference in New Issue
Block a user