Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Limit order amount #86

Merged
merged 1 commit into from
May 16, 2023
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 3 additions & 1 deletion .env-sample
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,6 @@ EXP_SECONDS=900
# Max routing fee that we want to pay to the network, 0.001 = 0.1%
MAX_ROUTING_FEE=0.001
# Mostro Fee
FEE=0.006
FEE=0.006
# Max order amount (sats)
MAX_ORDER_AMOUNT=10000
12 changes: 11 additions & 1 deletion src/app/order.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use crate::util::{publish_order, send_dm};
use crate::util::{get_market_quote, publish_order, send_dm};

use anyhow::Result;
use dotenvy::var;
use mostro_core::{Action, Message};
use nostr_sdk::prelude::ToBech32;
use nostr_sdk::{Client, Event, Keys};
Expand All @@ -14,6 +15,15 @@ pub async fn order_action(
pool: &Pool<Sqlite>,
) -> Result<()> {
if let Some(order) = msg.get_order() {
let quote = get_market_quote(&order.fiat_amount, &order.fiat_code, &0).await?;
if quote > var("MAX_ORDER_AMOUNT").unwrap().parse::<i64>().unwrap() {
let message = Message::new(0, order.id, None, Action::CantDo, None);
let message = message.as_json()?;
send_dm(client, my_keys, &event.pubkey, message).await?;

return Ok(());
}

let initiator_ephemeral_pubkey = event.pubkey.to_bech32()?;
let master_pubkey = match msg.pubkey {
Some(ref pk) => pk,
Expand Down
51 changes: 2 additions & 49 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ pub mod scheduler;
pub mod util;

use crate::app::run;
use anyhow::{Context, Result};
use crate::util::check_env_vars;
use anyhow::Result;
use dotenvy::dotenv;
use lightning::LndConnector;
use nostr_sdk::prelude::*;
use scheduler::start_scheduler;
use std::env::var;
use tokio::sync::Mutex;

#[macro_use]
Expand All @@ -24,53 +24,6 @@ lazy_static! {
static ref RATE_EVENT_LIST: Mutex<Vec<Event>> = Mutex::new(vec![]);
}

pub fn check_env_vars() -> Result<()> {
// Mandatory env vars
let _ = var("NSEC_PRIVKEY")
.context("Missing NSEC_PRIVKEY env variable from env file - add mostro private key")?;
let _ = var("RELAYS")
.context("Missing RELAYS env variable from env file - add relay list comma separated")?;
let _ = var("DATABASE_URL").context("Missing DATABASE_URL from env file - Add a path")?;
let _ = var("LND_CERT_FILE").context("Missing LND_CERT_FILE from env file - Add a path")?;
let _ =
var("LND_MACAROON_FILE").context("Missing LND_MACAROON_FILE from env file - Add a path")?;
let _ = var("LND_GRPC_PORT")
.context("Missing LND_GRPC_PORT from env file - Add port value")?
.parse::<u64>()
.context("Error parsing LND_GRPC_PORT")?;
let _ = var("LND_GRPC_HOST").context("Missing LND_GRPC_HOST from env file - set host value")?;
let _ = var("INVOICE_EXPIRATION_WINDOW")
.context("Missing INVOICE_EXPIRATION_WINDOW from env file - Add expiration value")?
.parse::<u64>()
.context("Error parsing INVOICE_EXPIRATION_WINDOW")?;
let _ = var("HOLD_INVOICE_CLTV_DELTA")
.context("Missing HOLD_INVOICE_CLTV_DELTA from env file - Add cltv invoice value")?
.parse::<u64>()
.context("Error parsing HOLD_INVOICE_CLTV_DELTA")?;
let _ = var("MIN_PAYMENT_AMT")
.context("Missing MIN_PAYMENT_AMT from env file - Add min payment value")?
.parse::<u64>()
.context("Error parsing MIN_PAYMENT_AMT")?;
let _ = var("EXP_SECONDS")
.context("Missing EXP_SECONDS from env file - Add expiration invoice seconds value")?
.parse::<u64>()
.context("Error parsing EXP_SECONDS")?;
let _ = var("EXP_HOURS")
.context("Missing EXP_HOURS from env file - Add expiration order hours value")?
.parse::<u64>()
.context("Error parsing EXP_HOURS")?;
let _ = var("MAX_ROUTING_FEE")
.context("Missing MAX_ROUTING_FEE from env file - Add routing fees value")?
.parse::<f64>()
.context("Error parsing MAX_ROUTING_FEE")?;
let _ = var("FEE")
.context("Missing FEE from env file - Add mostro fees value")?
.parse::<f64>()
.context("Error parsing FEE")?;

Ok(())
}

#[tokio::main]
async fn main() -> Result<()> {
dotenv().ok();
Expand Down
51 changes: 51 additions & 0 deletions src/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -442,3 +442,54 @@ pub async fn settle_seller_hold_invoice(

Ok(())
}

pub fn check_env_vars() -> Result<()> {
// Mandatory env vars
let _ = var("NSEC_PRIVKEY")
.context("Missing NSEC_PRIVKEY env variable from env file - add mostro private key")?;
let _ = var("RELAYS")
.context("Missing RELAYS env variable from env file - add relay list comma separated")?;
let _ = var("DATABASE_URL").context("Missing DATABASE_URL from env file - Add a path")?;
let _ = var("LND_CERT_FILE").context("Missing LND_CERT_FILE from env file - Add a path")?;
let _ =
var("LND_MACAROON_FILE").context("Missing LND_MACAROON_FILE from env file - Add a path")?;
let _ = var("LND_GRPC_PORT")
.context("Missing LND_GRPC_PORT from env file - Add port value")?
.parse::<u64>()
.context("Error parsing LND_GRPC_PORT")?;
let _ = var("LND_GRPC_HOST").context("Missing LND_GRPC_HOST from env file - set host value")?;
let _ = var("INVOICE_EXPIRATION_WINDOW")
.context("Missing INVOICE_EXPIRATION_WINDOW from env file - Add expiration value")?
.parse::<u64>()
.context("Error parsing INVOICE_EXPIRATION_WINDOW")?;
let _ = var("HOLD_INVOICE_CLTV_DELTA")
.context("Missing HOLD_INVOICE_CLTV_DELTA from env file - Add cltv invoice value")?
.parse::<u64>()
.context("Error parsing HOLD_INVOICE_CLTV_DELTA")?;
let _ = var("MIN_PAYMENT_AMT")
.context("Missing MIN_PAYMENT_AMT from env file - Add min payment value")?
.parse::<u64>()
.context("Error parsing MIN_PAYMENT_AMT")?;
let _ = var("EXP_SECONDS")
.context("Missing EXP_SECONDS from env file - Add expiration invoice seconds value")?
.parse::<u64>()
.context("Error parsing EXP_SECONDS")?;
let _ = var("EXP_HOURS")
.context("Missing EXP_HOURS from env file - Add expiration order hours value")?
.parse::<u64>()
.context("Error parsing EXP_HOURS")?;
let _ = var("MAX_ROUTING_FEE")
.context("Missing MAX_ROUTING_FEE from env file - Add routing fees value")?
.parse::<f64>()
.context("Error parsing MAX_ROUTING_FEE")?;
let _ = var("FEE")
.context("Missing FEE from env file - Add mostro fees value")?
.parse::<f64>()
.context("Error parsing FEE")?;
let _ = var("MAX_ORDER_AMOUNT")
.context("Missing MAX_ORDER_AMOUNT from env file - Limit publish orders to a max amount")?
.parse::<f64>()
.context("Error parsing MAX_ORDER_AMOUNT")?;

Ok(())
}