Browse Source

Switch to `import_granularity: item`

Putting each import statement on a dedicated line makes it a lot less
likely to create merge conflicts when items are removed / added because
Git resolves conflicts on a line-by-line basis.
resilient-broadcast
Thomas Eizinger 3 years ago
parent
commit
23464b6ef2
No known key found for this signature in database GPG Key ID: 651AC83A6C6C8B96
  1. 4
      daemon/build.rs
  2. 4
      daemon/src/address_map.rs
  3. 12
      daemon/src/auth.rs
  4. 10
      daemon/src/bdk_ext.rs
  5. 10
      daemon/src/bitmex_price_feed.rs
  6. 16
      daemon/src/cfd_actors.rs
  7. 15
      daemon/src/collab_settlement_maker.rs
  8. 18
      daemon/src/collab_settlement_taker.rs
  9. 41
      daemon/src/connection.rs
  10. 19
      daemon/src/db.rs
  11. 12
      daemon/src/housekeeping.rs
  12. 6
      daemon/src/keypair.rs
  13. 13
      daemon/src/lib.rs
  14. 3
      daemon/src/logger.rs
  15. 32
      daemon/src/maker.rs
  16. 59
      daemon/src/maker_cfd.rs
  17. 37
      daemon/src/maker_inc_connections.rs
  18. 31
      daemon/src/model.rs
  19. 47
      daemon/src/model/cfd.rs
  20. 43
      daemon/src/monitor.rs
  21. 10
      daemon/src/noise.rs
  22. 28
      daemon/src/oracle.rs
  23. 16
      daemon/src/payout_curve.rs
  24. 4
      daemon/src/payout_curve/basis.rs
  25. 1
      daemon/src/payout_curve/basis_eval.rs
  26. 8
      daemon/src/payout_curve/compat.rs
  27. 3
      daemon/src/payout_curve/csr_tools.rs
  28. 1
      daemon/src/payout_curve/curve.rs
  29. 1
      daemon/src/payout_curve/curve_factory.rs
  30. 6
      daemon/src/payout_curve/splineobject.rs
  31. 36
      daemon/src/projection.rs
  32. 34
      daemon/src/rollover_taker.rs
  33. 3
      daemon/src/routes.rs
  34. 31
      daemon/src/routes_maker.rs
  35. 33
      daemon/src/routes_taker.rs
  36. 3
      daemon/src/seed.rs
  37. 6
      daemon/src/send_to_socket.rs
  38. 59
      daemon/src/setup_contract.rs
  39. 27
      daemon/src/setup_maker.rs
  40. 26
      daemon/src/setup_taker.rs
  41. 3
      daemon/src/supervisor.rs
  42. 30
      daemon/src/taker.rs
  43. 40
      daemon/src/taker_cfd.rs
  44. 12
      daemon/src/to_sse_event.rs
  45. 6
      daemon/src/tokio_ext.rs
  46. 3
      daemon/src/tx.rs
  47. 26
      daemon/src/wallet.rs
  48. 35
      daemon/src/wire.rs
  49. 22
      daemon/tests/happy_path.rs
  50. 6
      daemon/tests/harness/flow.rs
  51. 3
      daemon/tests/harness/maia.rs
  52. 3
      daemon/tests/harness/mocks/mod.rs
  53. 3
      daemon/tests/harness/mocks/monitor.rs
  54. 10
      daemon/tests/harness/mocks/wallet.rs
  55. 28
      daemon/tests/harness/mod.rs
  56. 2
      dprint.json

4
daemon/build.rs

@ -1,5 +1,7 @@
use anyhow::Result;
use vergen::{vergen, Config, SemverKind};
use vergen::vergen;
use vergen::Config;
use vergen::SemverKind;
fn main() -> Result<()> {
std::fs::create_dir_all("../maker-frontend/dist/maker")?;

4
daemon/src/address_map.rs

@ -2,7 +2,9 @@ use anyhow::Result;
use std::collections::hash_map::Entry;
use std::collections::HashMap;
use std::hash::Hash;
use xtra::{Address, Handler, Message};
use xtra::Address;
use xtra::Handler;
use xtra::Message;
pub struct AddressMap<K, A> {
inner: HashMap<K, xtra::Address<A>>,

12
daemon/src/auth.rs

@ -1,9 +1,13 @@
use hex::FromHexError;
use rocket::http::Status;
use rocket::outcome::{try_outcome, IntoOutcome};
use rocket::request::{FromRequest, Outcome};
use rocket::{Request, State};
use rocket_basicauth::{BasicAuth, BasicAuthError};
use rocket::outcome::try_outcome;
use rocket::outcome::IntoOutcome;
use rocket::request::FromRequest;
use rocket::request::Outcome;
use rocket::Request;
use rocket::State;
use rocket_basicauth::BasicAuth;
use rocket_basicauth::BasicAuthError;
use std::fmt;
use std::str::FromStr;

10
daemon/src/bdk_ext.rs

@ -1,14 +1,18 @@
use anyhow::Result;
use bdk::bitcoin;
use bdk::bitcoin::util::bip32::ExtendedPrivKey;
use bdk::bitcoin::{self, Amount, Network};
use rand::{CryptoRng, RngCore};
use bdk::bitcoin::Amount;
use bdk::bitcoin::Network;
use rand::CryptoRng;
use rand::RngCore;
pub fn new_test_wallet(
rng: &mut (impl RngCore + CryptoRng),
utxo_amount: Amount,
num_utxos: u8,
) -> Result<bdk::Wallet<(), bdk::database::MemoryDatabase>> {
use bdk::{populate_test_db, testutils};
use bdk::populate_test_db;
use bdk::testutils;
let mut seed = [0u8; 32];
rng.fill_bytes(&mut seed);

10
daemon/src/bitmex_price_feed.rs

@ -1,8 +1,12 @@
use crate::model::{Price, Timestamp};
use crate::{projection, supervisor, Tasks};
use crate::model::Price;
use crate::model::Timestamp;
use crate::projection;
use crate::supervisor;
use crate::Tasks;
use anyhow::Result;
use async_trait::async_trait;
use futures::{SinkExt, TryStreamExt};
use futures::SinkExt;
use futures::TryStreamExt;
use rust_decimal::Decimal;
use std::convert::TryFrom;
use std::time::Duration;

16
daemon/src/cfd_actors.rs

@ -1,6 +1,16 @@
use crate::model::cfd::{Attestation, Cfd, CfdState, OrderId};
use crate::{db, monitor, oracle, projection, try_continue, wallet};
use anyhow::{bail, Context, Result};
use crate::db;
use crate::model::cfd::Attestation;
use crate::model::cfd::Cfd;
use crate::model::cfd::CfdState;
use crate::model::cfd::OrderId;
use crate::monitor;
use crate::oracle;
use crate::projection;
use crate::try_continue;
use crate::wallet;
use anyhow::bail;
use anyhow::Context;
use anyhow::Result;
use sqlx::pool::PoolConnection;
use sqlx::Sqlite;

15
daemon/src/collab_settlement_maker.rs

@ -1,9 +1,14 @@
use crate::address_map::{ActorName, Stopping};
use crate::model::cfd::{
Cfd, CollaborativeSettlement, OrderId, Role, SettlementKind, SettlementProposal,
};
use crate::address_map::ActorName;
use crate::address_map::Stopping;
use crate::maker_inc_connections;
use crate::model::cfd::Cfd;
use crate::model::cfd::CollaborativeSettlement;
use crate::model::cfd::OrderId;
use crate::model::cfd::Role;
use crate::model::cfd::SettlementKind;
use crate::model::cfd::SettlementProposal;
use crate::model::Identity;
use crate::{maker_inc_connections, projection};
use crate::projection;
use anyhow::Context;
use async_trait::async_trait;
use bdk::bitcoin::Script;

18
daemon/src/collab_settlement_taker.rs

@ -1,10 +1,16 @@
use crate::address_map::{ActorName, Stopping};
use crate::model::cfd::{
Cfd, CollaborativeSettlement, OrderId, SettlementKind, SettlementProposal,
};
use crate::address_map::ActorName;
use crate::address_map::Stopping;
use crate::connection;
use crate::model::cfd::Cfd;
use crate::model::cfd::CollaborativeSettlement;
use crate::model::cfd::OrderId;
use crate::model::cfd::SettlementKind;
use crate::model::cfd::SettlementProposal;
use crate::model::Price;
use crate::{connection, projection, wire};
use anyhow::{Context, Result};
use crate::projection;
use crate::wire;
use anyhow::Context;
use anyhow::Result;
use async_trait::async_trait;
use xtra::prelude::MessageChannel;
use xtra_productivity::xtra_productivity;

41
daemon/src/connection.rs

@ -1,22 +1,39 @@
use crate::address_map::{AddressMap, Stopping};
use crate::address_map::AddressMap;
use crate::address_map::Stopping;
use crate::collab_settlement_taker;
use crate::log_error;
use crate::model::cfd::OrderId;
use crate::model::{Identity, Price, Timestamp, Usd};
use crate::model::Identity;
use crate::model::Price;
use crate::model::Timestamp;
use crate::model::Usd;
use crate::noise;
use crate::rollover_taker;
use crate::send_to_socket;
use crate::setup_taker;
use crate::taker_cfd::CurrentOrder;
use crate::tokio_ext::FutureExt;
use crate::wire::{EncryptedJsonCodec, TakerToMaker, Version};
use crate::{
collab_settlement_taker, log_error, noise, rollover_taker, send_to_socket, setup_taker, wire,
Tasks,
};
use anyhow::{bail, Context, Result};
use crate::wire;
use crate::wire::EncryptedJsonCodec;
use crate::wire::TakerToMaker;
use crate::wire::Version;
use crate::Tasks;
use anyhow::bail;
use anyhow::Context;
use anyhow::Result;
use bdk::bitcoin::Amount;
use futures::{SinkExt, StreamExt, TryStreamExt};
use futures::SinkExt;
use futures::StreamExt;
use futures::TryStreamExt;
use std::net::SocketAddr;
use std::sync::{Arc, Mutex};
use std::time::{Duration, SystemTime};
use std::sync::Arc;
use std::sync::Mutex;
use std::time::Duration;
use std::time::SystemTime;
use tokio::net::TcpStream;
use tokio::sync::watch;
use tokio_util::codec::{FramedRead, FramedWrite};
use tokio_util::codec::FramedRead;
use tokio_util::codec::FramedWrite;
use xtra::prelude::MessageChannel;
use xtra::KeepRunning;
use xtra_productivity::xtra_productivity;

19
daemon/src/db.rs

@ -1,8 +1,12 @@
use crate::model::cfd::{Cfd, CfdState, OrderId};
use crate::model::cfd::Cfd;
use crate::model::cfd::CfdState;
use crate::model::cfd::OrderId;
use crate::model::BitMexPriceEventId;
use anyhow::{Context, Result};
use anyhow::Context;
use anyhow::Result;
use sqlx::pool::PoolConnection;
use sqlx::{Sqlite, SqlitePool};
use sqlx::Sqlite;
use sqlx::SqlitePool;
use std::mem;
use time::Duration;
@ -355,8 +359,13 @@ pub async fn load_cfds_by_oracle_event_id(
#[cfg(test)]
mod tests {
use super::*;
use crate::model::cfd::{Cfd, CfdState, Order, Origin};
use crate::model::{Identity, Price, Usd};
use crate::model::cfd::Cfd;
use crate::model::cfd::CfdState;
use crate::model::cfd::Order;
use crate::model::cfd::Origin;
use crate::model::Identity;
use crate::model::Price;
use crate::model::Usd;
use crate::seed::Seed;
use pretty_assertions::assert_eq;
use rand::Rng;

12
daemon/src/housekeeping.rs

@ -1,9 +1,13 @@
use crate::db::{append_cfd_state, load_all_cfds};
use crate::model::cfd::{Cfd, CfdState};
use crate::{try_continue, wallet};
use crate::db::append_cfd_state;
use crate::db::load_all_cfds;
use crate::model::cfd::Cfd;
use crate::model::cfd::CfdState;
use crate::try_continue;
use crate::wallet;
use anyhow::Result;
use sqlx::pool::PoolConnection;
use sqlx::{Sqlite, SqlitePool};
use sqlx::Sqlite;
use sqlx::SqlitePool;
use xtra::Address;
/// Perform necessary housekeeping before actor system startup

6
daemon/src/keypair.rs

@ -1,6 +1,8 @@
use bdk::bitcoin;
use bdk::bitcoin::secp256k1::{self, SECP256K1};
use rand::{CryptoRng, RngCore};
use bdk::bitcoin::secp256k1;
use bdk::bitcoin::secp256k1::SECP256K1;
use rand::CryptoRng;
use rand::RngCore;
pub fn new<R>(rng: &mut R) -> (secp256k1::SecretKey, bitcoin::PublicKey)
where

13
daemon/src/lib.rs

@ -1,8 +1,11 @@
#![cfg_attr(not(test), warn(clippy::unwrap_used))]
#![warn(clippy::disallowed_method)]
use crate::db::load_all_cfds;
use crate::maker_cfd::{FromTaker, TakerConnected};
use crate::model::cfd::{Cfd, Order, UpdateCfdProposals};
use crate::maker_cfd::FromTaker;
use crate::maker_cfd::TakerConnected;
use crate::model::cfd::Cfd;
use crate::model::cfd::Order;
use crate::model::cfd::UpdateCfdProposals;
use crate::model::Identity;
use crate::oracle::Attestation;
use crate::tokio_ext::FutureExt;
@ -16,8 +19,10 @@ use sqlx::SqlitePool;
use std::future::Future;
use std::time::Duration;
use tokio::sync::watch;
use xtra::message_channel::{MessageChannel, StrongMessageChannel};
use xtra::{Actor, Address};
use xtra::message_channel::MessageChannel;
use xtra::message_channel::StrongMessageChannel;
use xtra::Actor;
use xtra::Address;
pub mod sqlx_ext; // Must come first because it is a macro.

3
daemon/src/logger.rs

@ -1,7 +1,8 @@
use anyhow::Result;
use tracing_subscriber::filter::LevelFilter;
use tracing_subscriber::fmt::time::ChronoLocal;
use tracing_subscriber::{EnvFilter, FmtSubscriber};
use tracing_subscriber::EnvFilter;
use tracing_subscriber::FmtSubscriber;
pub fn init(level: LevelFilter, json_format: bool) -> Result<()> {
if level == LevelFilter::OFF {

32
daemon/src/maker.rs

@ -1,16 +1,30 @@
use anyhow::{Context, Result};
use anyhow::Context;
use anyhow::Result;
use bdk::bitcoin;
use bdk::bitcoin::secp256k1::schnorrsig;
use bdk::bitcoin::Amount;
use bdk::{bitcoin, FeeRate};
use clap::{Parser, Subcommand};
use daemon::auth::{self, MAKER_USERNAME};
use bdk::FeeRate;
use clap::Parser;
use clap::Subcommand;
use daemon::auth;
use daemon::auth::MAKER_USERNAME;
use daemon::bitmex_price_feed;
use daemon::db;
use daemon::housekeeping;
use daemon::logger;
use daemon::maker_inc_connections;
use daemon::model::cfd::Role;
use daemon::monitor;
use daemon::oracle;
use daemon::projection;
use daemon::seed::Seed;
use daemon::{
bitmex_price_feed, db, housekeeping, logger, maker_inc_connections, monitor, oracle,
projection, supervisor, wallet, MakerActorSystem, Tasks, HEARTBEAT_INTERVAL, N_PAYOUTS,
SETTLEMENT_INTERVAL,
};
use daemon::supervisor;
use daemon::wallet;
use daemon::MakerActorSystem;
use daemon::Tasks;
use daemon::HEARTBEAT_INTERVAL;
use daemon::N_PAYOUTS;
use daemon::SETTLEMENT_INTERVAL;
use sqlx::sqlite::SqliteConnectOptions;
use sqlx::SqlitePool;
use std::net::SocketAddr;

59
daemon/src/maker_cfd.rs

@ -1,31 +1,56 @@
use crate::address_map::{AddressMap, Stopping};
use crate::cfd_actors::{self, append_cfd_state, insert_cfd_and_update_feed};
use crate::address_map::AddressMap;
use crate::address_map::Stopping;
use crate::cfd_actors::append_cfd_state;
use crate::cfd_actors::insert_cfd_and_update_feed;
use crate::cfd_actors::{self};
use crate::collab_settlement_maker;
use crate::db::load_cfd_by_order_id;
use crate::model::cfd::{
Cfd, CfdState, CfdStateCommon, Dlc, Order, OrderId, Origin, Role, RollOverProposal,
SettlementKind, SettlementProposal, UpdateCfdProposal,
};
use crate::model::{Identity, Price, Timestamp, Usd};
use crate::log_error;
use crate::maker_inc_connections;
use crate::model::cfd::Cfd;
use crate::model::cfd::CfdState;
use crate::model::cfd::CfdStateCommon;
use crate::model::cfd::Dlc;
use crate::model::cfd::Order;
use crate::model::cfd::OrderId;
use crate::model::cfd::Origin;
use crate::model::cfd::Role;
use crate::model::cfd::RollOverProposal;
use crate::model::cfd::SettlementKind;
use crate::model::cfd::SettlementProposal;
use crate::model::cfd::UpdateCfdProposal;
use crate::model::Identity;
use crate::model::Price;
use crate::model::Timestamp;
use crate::model::Usd;
use crate::monitor::MonitorParams;
use crate::projection::{
try_into_update_rollover_proposal, Update, UpdateRollOverProposal, UpdateSettlementProposal,
};
use crate::monitor::{self};
use crate::oracle;
use crate::projection;
use crate::projection::try_into_update_rollover_proposal;
use crate::projection::Update;
use crate::projection::UpdateRollOverProposal;
use crate::projection::UpdateSettlementProposal;
use crate::setup_contract;
use crate::setup_contract::RolloverParams;
use crate::setup_maker;
use crate::tokio_ext::FutureExt;
use crate::wallet;
use crate::wire;
use crate::wire::TakerToMaker;
use crate::{
collab_settlement_maker, log_error, maker_inc_connections, monitor, oracle, projection,
setup_contract, setup_maker, wallet, wire, Tasks,
};
use anyhow::{Context as _, Result};
use crate::Tasks;
use anyhow::Context as _;
use anyhow::Result;
use async_trait::async_trait;
use bdk::bitcoin::secp256k1::schnorrsig;
use futures::channel::mpsc;
use futures::future;
use futures::future::RemoteHandle;
use futures::{future, SinkExt};
use futures::SinkExt;
use sqlx::pool::PoolConnection;
use sqlx::Sqlite;
use std::collections::{HashMap, HashSet};
use std::collections::HashMap;
use std::collections::HashSet;
use time::Duration;
use xtra::prelude::*;
use xtra::Actor as _;

37
daemon/src/maker_inc_connections.rs

@ -1,20 +1,39 @@
use crate::address_map::{AddressMap, Stopping};
use crate::maker_cfd::{FromTaker, TakerConnected, TakerDisconnected};
use crate::model::cfd::{Order, OrderId};
use crate::address_map::AddressMap;
use crate::address_map::Stopping;
use crate::collab_settlement_maker;
use crate::maker_cfd;
use crate::maker_cfd::FromTaker;
use crate::maker_cfd::TakerConnected;
use crate::maker_cfd::TakerDisconnected;
use crate::model::cfd::Order;
use crate::model::cfd::OrderId;
use crate::model::Identity;
use crate::noise;
use crate::noise::TransportStateExt;
use crate::send_to_socket;
use crate::setup_maker;
use crate::tokio_ext::FutureExt;
use crate::wire::{taker_to_maker, EncryptedJsonCodec, MakerToTaker, TakerToMaker, Version};
use crate::{collab_settlement_maker, maker_cfd, noise, send_to_socket, setup_maker, wire, Tasks};
use anyhow::{bail, Context, Result};
use futures::{SinkExt, TryStreamExt};
use crate::wire;
use crate::wire::taker_to_maker;
use crate::wire::EncryptedJsonCodec;
use crate::wire::MakerToTaker;
use crate::wire::TakerToMaker;
use crate::wire::Version;
use crate::Tasks;
use anyhow::bail;
use anyhow::Context;
use anyhow::Result;
use futures::SinkExt;
use futures::TryStreamExt;
use std::collections::HashMap;
use std::io;
use std::net::SocketAddr;
use std::sync::{Arc, Mutex};
use std::sync::Arc;
use std::sync::Mutex;
use std::time::Duration;
use tokio::net::TcpStream;
use tokio_util::codec::{FramedRead, FramedWrite};
use tokio_util::codec::FramedRead;
use tokio_util::codec::FramedWrite;
use xtra::prelude::*;
use xtra::KeepRunning;
use xtra_productivity::xtra_productivity;

31
daemon/src/model.rs

@ -1,19 +1,32 @@
use crate::{impl_sqlx_type_display_from_str, olivia};
use anyhow::{Context, Result};
use bdk::bitcoin::{Address, Amount, Denomination};
use crate::impl_sqlx_type_display_from_str;
use crate::olivia;
use anyhow::Context;
use anyhow::Result;
use bdk::bitcoin::Address;
use bdk::bitcoin::Amount;
use bdk::bitcoin::Denomination;
use chrono::DateTime;
use reqwest::Url;
use rust_decimal::prelude::ToPrimitive;
use rust_decimal::Decimal;
use serde::de::Error as _;
use serde::{Deserialize, Serialize};
use serde_with::{DeserializeFromStr, SerializeDisplay};
use serde::Deserialize;
use serde::Serialize;
use serde_with::DeserializeFromStr;
use serde_with::SerializeDisplay;
use std::convert::TryInto;
use std::fmt;
use std::num::NonZeroU8;
use std::ops::{Add, Div, Mul, Sub};
use std::time::{SystemTime, UNIX_EPOCH};
use std::{fmt, str};
use time::{OffsetDateTime, PrimitiveDateTime, Time};
use std::ops::Add;
use std::ops::Div;
use std::ops::Mul;
use std::ops::Sub;
use std::str;
use std::time::SystemTime;
use std::time::UNIX_EPOCH;
use time::OffsetDateTime;
use time::PrimitiveDateTime;
use time::Time;
pub mod cfd;

47
daemon/src/model/cfd.rs

@ -1,24 +1,47 @@
use crate::model::{
BitMexPriceEventId, Identity, InversePrice, Leverage, Percent, Position, Price, Timestamp,
TradingPair, Usd,
};
use crate::{monitor, oracle, payout_curve};
use anyhow::{bail, Context, Result};
use bdk::bitcoin::secp256k1::{SecretKey, Signature};
use bdk::bitcoin::{Address, Amount, PublicKey, Script, SignedAmount, Transaction, Txid};
use crate::model::BitMexPriceEventId;
use crate::model::Identity;
use crate::model::InversePrice;
use crate::model::Leverage;
use crate::model::Percent;
use crate::model::Position;
use crate::model::Price;
use crate::model::Timestamp;
use crate::model::TradingPair;
use crate::model::Usd;
use crate::monitor;
use crate::oracle;
use crate::payout_curve;
use anyhow::bail;
use anyhow::Context;
use anyhow::Result;
use bdk::bitcoin::secp256k1::SecretKey;
use bdk::bitcoin::secp256k1::Signature;
use bdk::bitcoin::Address;
use bdk::bitcoin::Amount;
use bdk::bitcoin::PublicKey;
use bdk::bitcoin::Script;
use bdk::bitcoin::SignedAmount;
use bdk::bitcoin::Transaction;
use bdk::bitcoin::Txid;
use bdk::descriptor::Descriptor;
use bdk::miniscript::DescriptorTrait;
use maia::secp256k1_zkp::{self, EcdsaAdaptorSignature, SECP256K1};
use maia::{finalize_spend_transaction, spending_tx_sighash, TransactionExt};
use maia::finalize_spend_transaction;
use maia::secp256k1_zkp;
use maia::secp256k1_zkp::EcdsaAdaptorSignature;
use maia::secp256k1_zkp::SECP256K1;
use maia::spending_tx_sighash;
use maia::TransactionExt;
use rocket::request::FromParam;
use rust_decimal::prelude::FromPrimitive;
use rust_decimal::Decimal;
use serde::de::Error as _;
use serde::{Deserialize, Serialize};
use serde::Deserialize;
use serde::Serialize;
use std::collections::HashMap;
use std::fmt;
use std::ops::RangeInclusive;
use time::{Duration, OffsetDateTime};
use time::Duration;
use time::OffsetDateTime;
use uuid::adapter::Hyphenated;
use uuid::Uuid;

43
daemon/src/monitor.rs

@ -1,19 +1,34 @@
use crate::model::cfd::{CetStatus, Cfd, CfdState, Dlc, OrderId};
use crate::log_error;
use crate::model;
use crate::model::cfd::CetStatus;
use crate::model::cfd::Cfd;
use crate::model::cfd::CfdState;
use crate::model::cfd::Dlc;
use crate::model::cfd::OrderId;
use crate::model::BitMexPriceEventId;
use crate::oracle;
use crate::oracle::Attestation;
use crate::{log_error, model, oracle, try_continue};
use anyhow::{Context, Result};
use crate::try_continue;
use anyhow::Context;
use anyhow::Result;
use async_trait::async_trait;
use bdk::bitcoin::{PublicKey, Script, Txid};
use bdk::bitcoin::PublicKey;
use bdk::bitcoin::Script;
use bdk::bitcoin::Txid;
use bdk::descriptor::Descriptor;
use bdk::electrum_client::{ElectrumApi, GetHistoryRes, HeaderNotification};
use bdk::electrum_client::ElectrumApi;
use bdk::electrum_client::GetHistoryRes;
use bdk::electrum_client::HeaderNotification;
use bdk::miniscript::DescriptorTrait;
use std::collections::hash_map::Entry;
use std::collections::{BTreeMap, HashMap};
use std::convert::{TryFrom, TryInto};
use std::collections::BTreeMap;
use std::collections::HashMap;
use std::convert::TryFrom;
use std::convert::TryInto;
use std::fmt;
use std::marker::Send;
use std::ops::{Add, RangeInclusive};
use std::ops::Add;
use std::ops::RangeInclusive;
use xtra::prelude::StrongMessageChannel;
use xtra_productivity::xtra_productivity;
@ -669,10 +684,14 @@ impl xtra::Handler<oracle::Attestation> for Actor {
mod tests {
use super::*;
use bdk::bitcoin::blockdata::block;
use bdk::electrum_client::{
Batch, Error, GetBalanceRes, GetHeadersRes, GetMerkleRes, ListUnspentRes,
RawHeaderNotification, ServerFeaturesRes,
};
use bdk::electrum_client::Batch;
use bdk::electrum_client::Error;
use bdk::electrum_client::GetBalanceRes;
use bdk::electrum_client::GetHeadersRes;
use bdk::electrum_client::GetMerkleRes;
use bdk::electrum_client::ListUnspentRes;
use bdk::electrum_client::RawHeaderNotification;
use bdk::electrum_client::ServerFeaturesRes;
use std::iter::FromIterator;
use tracing_subscriber::prelude::*;

10
daemon/src/noise.rs

@ -1,7 +1,11 @@
use anyhow::{anyhow, Context, Result};
use snow::{Builder, TransportState};
use anyhow::anyhow;
use anyhow::Context;
use anyhow::Result;
use snow::Builder;
use snow::TransportState;
use std::io;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::io::AsyncReadExt;
use tokio::io::AsyncWriteExt;
use tokio::net::TcpStream;
pub static NOISE_MAX_MSG_LEN: u32 = 65535;

28
daemon/src/oracle.rs

@ -1,12 +1,19 @@
use crate::model::cfd::{Cfd, CfdState};
use crate::log_error;
use crate::model::cfd::Cfd;
use crate::model::cfd::CfdState;
use crate::model::BitMexPriceEventId;
use crate::{log_error, tokio_ext, try_continue};
use anyhow::{Context, Result};
use crate::tokio_ext;
use crate::try_continue;
use anyhow::Context;
use anyhow::Result;
use async_trait::async_trait;
use maia::secp256k1_zkp::{schnorrsig, SecretKey};
use rocket::time::{OffsetDateTime, Time};
use maia::secp256k1_zkp::schnorrsig;
use maia::secp256k1_zkp::SecretKey;
use rocket::time::OffsetDateTime;
use rocket::time::Time;
use serde::Deserialize;
use std::collections::{HashMap, HashSet};
use std::collections::HashMap;
use std::collections::HashSet;
use std::ops::Add;
use time::ext::NumericalDuration;
use time::Duration;
@ -304,7 +311,8 @@ impl xtra::Message for NewAttestationFetched {
mod olivia_api {
use crate::model::BitMexPriceEventId;
use anyhow::Context;
use maia::secp256k1_zkp::{schnorrsig, SecretKey};
use maia::secp256k1_zkp::schnorrsig;
use maia::secp256k1_zkp::SecretKey;
use std::convert::TryFrom;
use time::OffsetDateTime;
@ -391,8 +399,10 @@ mod olivia_api {
mod timestamp {
use crate::olivia;
use serde::de::Error as _;
use serde::{Deserialize, Deserializer};
use time::{OffsetDateTime, PrimitiveDateTime};
use serde::Deserialize;
use serde::Deserializer;
use time::OffsetDateTime;
use time::PrimitiveDateTime;
pub fn deserialize<'a, D>(deserializer: D) -> Result<OffsetDateTime, D::Error>
where

16
daemon/src/payout_curve.rs

@ -1,14 +1,18 @@
use std::fmt;
use crate::model::{Leverage, Price, Usd};
use crate::model::Leverage;
use crate::model::Price;
use crate::model::Usd;
use crate::payout_curve::curve::Curve;
use anyhow::{Context, Result};
use anyhow::Context;
use anyhow::Result;
use bdk::bitcoin;
use itertools::Itertools;
use maia::{generate_payouts, Payout};
use maia::generate_payouts;
use maia::Payout;
use ndarray::prelude::*;
use num::{FromPrimitive, ToPrimitive};
use num::FromPrimitive;
use num::ToPrimitive;
use rust_decimal::Decimal;
use std::fmt;
mod basis;
mod basis_eval;

4
daemon/src/payout_curve/basis.rs

@ -2,10 +2,10 @@ use crate::payout_curve::basis_eval::*;
use crate::payout_curve::csr_tools::CSR;
use crate::payout_curve::utils::*;
use crate::payout_curve::Error;
use core::cmp::max;
use ndarray::concatenate;
use ndarray::prelude::*;
use ndarray::{concatenate, s};
use ndarray::s;
#[derive(Clone, Debug)]
pub struct BSplineBasis {

1
daemon/src/payout_curve/basis_eval.rs

@ -1,7 +1,6 @@
use crate::payout_curve::csr_tools::CSR;
use crate::payout_curve::utils::*;
use crate::payout_curve::Error;
use ndarray::prelude::*;
use std::cmp::min;

8
daemon/src/payout_curve/compat.rs

@ -1,5 +1,9 @@
use nalgebra::{ComplexField, DMatrix, Dynamic, Scalar};
use ndarray::{Array1, Array2};
use nalgebra::ComplexField;
use nalgebra::DMatrix;
use nalgebra::Dynamic;
use nalgebra::Scalar;
use ndarray::Array1;
use ndarray::Array2;
use std::fmt::Debug;
pub trait ToNAlgebraMatrix<T> {

3
daemon/src/payout_curve/csr_tools.rs

@ -1,4 +1,5 @@
use crate::payout_curve::compat::{To1DArray, ToNAlgebraMatrix};
use crate::payout_curve::compat::To1DArray;
use crate::payout_curve::compat::ToNAlgebraMatrix;
use crate::payout_curve::Error;
use itertools::Itertools;
use ndarray::prelude::*;

1
daemon/src/payout_curve/curve.rs

@ -2,7 +2,6 @@ use crate::payout_curve::basis::BSplineBasis;
use crate::payout_curve::splineobject::SplineObject;
use crate::payout_curve::utils::*;
use crate::payout_curve::Error;
use ndarray::prelude::*;
use ndarray::s;
use std::cmp::max;

1
daemon/src/payout_curve/curve_factory.rs

@ -2,7 +2,6 @@ use crate::payout_curve::basis::BSplineBasis;
use crate::payout_curve::curve::Curve;
use crate::payout_curve::utils::cmp_f64;
use crate::payout_curve::Error;
use ndarray::prelude::*;
/// Perform general spline interpolation on a provided basis.

6
daemon/src/payout_curve/splineobject.rs

@ -2,9 +2,11 @@ use crate::payout_curve::basis::BSplineBasis;
use crate::payout_curve::csr_tools::CSR;
use crate::payout_curve::Error;
use itertools::Itertools;
use ndarray::concatenate;
use ndarray::prelude::*;
use ndarray::{concatenate, Order};
use ndarray_einsum_beta::{einsum, tensordot};
use ndarray::Order;
use ndarray_einsum_beta::einsum;
use ndarray_einsum_beta::tensordot;
use std::collections::HashMap;
#[derive(Clone, Debug)]

36
daemon/src/projection.rs

@ -1,16 +1,29 @@
use std::collections::HashMap;
use crate::model::cfd::{
Cfd as ModelCfd, OrderId, Role, RollOverProposal, SettlementKind, SettlementProposal,
UpdateCfdProposal,
};
use crate::model::{Leverage, Position, Timestamp, TradingPair};
use crate::{bitmex_price_feed, db, model, tx, Order, UpdateCfdProposals};
use crate::bitmex_price_feed;
use crate::db;
use crate::model;
use crate::model::cfd::Cfd as ModelCfd;
use crate::model::cfd::OrderId;
use crate::model::cfd::Role;
use crate::model::cfd::RollOverProposal;
use crate::model::cfd::SettlementKind;
use crate::model::cfd::SettlementProposal;
use crate::model::cfd::UpdateCfdProposal;
use crate::model::Leverage;
use crate::model::Position;
use crate::model::Timestamp;
use crate::model::TradingPair;
use crate::tx;
use crate::Order;
use crate::UpdateCfdProposals;
use anyhow::Result;
use bdk::bitcoin::{Amount, Network, SignedAmount};
use bdk::bitcoin::Amount;
use bdk::bitcoin::Network;
use bdk::bitcoin::SignedAmount;
use itertools::Itertools;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use serde::Deserialize;
use serde::Serialize;
use std::collections::HashMap;
use time::OffsetDateTime;
use tokio::sync::watch;
use xtra_productivity::xtra_productivity;
@ -597,7 +610,8 @@ mod tests {
use super::*;
use rust_decimal_macros::dec;
use serde_test::{assert_ser_tokens, Token};
use serde_test::assert_ser_tokens;
use serde_test::Token;
#[test]
fn usd_serializes_with_only_cents() {

34
daemon/src/rollover_taker.rs

@ -1,16 +1,30 @@
use crate::address_map::{ActorName, Stopping};
use crate::address_map::ActorName;
use crate::address_map::Stopping;
use crate::connection;
use crate::model::cfd::{Cfd, Dlc, OrderId, Role, RollOverProposal, SettlementKind};
use crate::model::{BitMexPriceEventId, Timestamp};
use crate::oracle::{self, GetAnnouncement};
use crate::projection::{self, UpdateRollOverProposal};
use crate::setup_contract::{self, RolloverParams};
use crate::model::cfd::Cfd;
use crate::model::cfd::Dlc;
use crate::model::cfd::OrderId;
use crate::model::cfd::Role;
use crate::model::cfd::RollOverProposal;
use crate::model::cfd::SettlementKind;
use crate::model::BitMexPriceEventId;
use crate::model::Timestamp;
use crate::oracle;
use crate::oracle::GetAnnouncement;
use crate::projection;
use crate::projection::UpdateRollOverProposal;
use crate::setup_contract;
use crate::setup_contract::RolloverParams;
use crate::tokio_ext::spawn_fallible;
use crate::wire::{self, RollOverMsg};
use anyhow::{Context, Result};
use crate::wire;
use crate::wire::RollOverMsg;
use anyhow::Context;
use anyhow::Result;
use async_trait::async_trait;
use futures::channel::mpsc::{self, UnboundedSender};
use futures::{future, SinkExt};
use futures::channel::mpsc;
use futures::channel::mpsc::UnboundedSender;
use futures::future;
use futures::SinkExt;
use maia::secp256k1_zkp::schnorrsig;
use xtra::prelude::MessageChannel;
use xtra_productivity::xtra_productivity;

3
daemon/src/routes.rs

@ -1,4 +1,5 @@
use rocket::http::{ContentType, Status};
use rocket::http::ContentType;
use rocket::http::Status;
use rust_embed::EmbeddedFile;
use std::borrow::Cow;
use std::path::PathBuf;

31
daemon/src/routes_maker.rs

@ -1,16 +1,29 @@
use anyhow::Result;
use bdk::bitcoin::Network;
use daemon::auth::Authenticated;
use daemon::maker_cfd;
use daemon::maker_inc_connections;
use daemon::model::cfd::OrderId;
use daemon::model::{Price, Usd, WalletInfo};
use daemon::projection::{Cfd, CfdAction, Feeds, Identity};
use daemon::model::Price;
use daemon::model::Usd;
use daemon::model::WalletInfo;
use daemon::monitor;
use daemon::oracle;
use daemon::projection::Cfd;
use daemon::projection::CfdAction;
use daemon::projection::Feeds;
use daemon::projection::Identity;
use daemon::routes::EmbeddedFileExt;
use daemon::to_sse_event::ToSseEvent;
use daemon::{maker_cfd, maker_inc_connections, monitor, oracle, wallet};
use http_api_problem::{HttpApiProblem, StatusCode};
use rocket::http::{ContentType, Header, Status};
use daemon::wallet;
use http_api_problem::HttpApiProblem;
use http_api_problem::StatusCode;
use rocket::http::ContentType;
use rocket::http::Header;
use rocket::http::Status;
use rocket::response::status;
use rocket::response::stream::EventStream;
use rocket::response::{status, Responder};
use rocket::response::Responder;
use rocket::serde::json::Json;
use rocket::State;
use rust_embed::RustEmbed;
@ -266,9 +279,11 @@ pub async fn get_takers<'r>(
mod tests {
use super::*;
use daemon::auth::Password;
use rocket::http::{Header, Status};
use rocket::http::Header;
use rocket::http::Status;
use rocket::local::blocking::Client;
use rocket::{Build, Rocket};
use rocket::Build;
use rocket::Rocket;
#[test]
fn routes_are_password_protected() {

33
daemon/src/routes_taker.rs

@ -1,19 +1,34 @@
use bdk::bitcoin::{Amount, Network};
use bdk::bitcoin::Amount;
use bdk::bitcoin::Network;
use daemon::bitmex_price_feed;
use daemon::connection::ConnectionStatus;
use daemon::model::cfd::{calculate_long_margin, OrderId};
use daemon::model::{Leverage, Price, Usd, WalletInfo};
use daemon::projection::{CfdAction, Feeds};
use daemon::model::cfd::calculate_long_margin;
use daemon::model::cfd::OrderId;
use daemon::model::Leverage;
use daemon::model::Price;
use daemon::model::Usd;
use daemon::model::WalletInfo;
use daemon::monitor;
use daemon::oracle;
use daemon::projection::CfdAction;
use daemon::projection::Feeds;
use daemon::routes::EmbeddedFileExt;
use daemon::taker_cfd;
use daemon::to_sse_event::ToSseEvent;
use daemon::{bitmex_price_feed, monitor, oracle, taker_cfd, tx, wallet};
use http_api_problem::{HttpApiProblem, StatusCode};
use rocket::http::{ContentType, Status};
use daemon::tx;
use daemon::wallet;
use http_api_problem::HttpApiProblem;
use http_api_problem::StatusCode;
use rocket::http::ContentType;
use rocket::http::Status;
use rocket::response::status;
use rocket::response::stream::EventStream;
use rocket::response::{status, Responder};
use rocket::response::Responder;
use rocket::serde::json::Json;
use rocket::State;
use rust_embed::RustEmbed;
use serde::{Deserialize, Serialize};
use serde::Deserialize;
use serde::Serialize;
use std::borrow::Cow;
use std::path::PathBuf;
use tokio::select;

3
daemon/src/seed.rs

@ -1,4 +1,5 @@
use anyhow::{anyhow, Result};
use anyhow::anyhow;
use anyhow::Result;
use bdk::bitcoin::util::bip32::ExtendedPrivKey;
use bdk::bitcoin::Network;
use hkdf::Hkdf;

6
daemon/src/send_to_socket.rs

@ -1,11 +1,13 @@
use crate::wire::{self, EncryptedJsonCodec};
use crate::wire;
use crate::wire::EncryptedJsonCodec;
use futures::SinkExt;
use serde::Serialize;
use std::fmt;
use tokio::io::AsyncWriteExt;
use tokio::net::tcp::OwnedWriteHalf;
use tokio_util::codec::FramedWrite;
use xtra::{Handler, Message};
use xtra::Handler;
use xtra::Message;
pub struct Actor<T> {
write: FramedWrite<OwnedWriteHalf, EncryptedJsonCodec<T>>,

59
daemon/src/setup_contract.rs

@ -1,25 +1,52 @@
use crate::model::cfd::{Cet, Dlc, RevokedCommit, Role};
use crate::model::{Leverage, Price, Usd};
use crate::model;
use crate::model::cfd::Cet;
use crate::model::cfd::Dlc;
use crate::model::cfd::RevokedCommit;
use crate::model::cfd::Role;
use crate::model::Leverage;
use crate::model::Price;
use crate::model::Usd;
use crate::oracle;
use crate::payout_curve;
use crate::tokio_ext::FutureExt;
use crate::wire::{
Msg0, Msg1, Msg2, Msg3, RollOverMsg, RollOverMsg0, RollOverMsg1, RollOverMsg2, RollOverMsg3,
SetupMsg,
};
use crate::{model, oracle, payout_curve, wallet};
use anyhow::{Context, Result};
use bdk::bitcoin::secp256k1::{schnorrsig, Signature, SECP256K1};
use crate::wallet;
use crate::wire::Msg0;
use crate::wire::Msg1;
use crate::wire::Msg2;
use crate::wire::Msg3;
use crate::wire::RollOverMsg;
use crate::wire::RollOverMsg0;
use crate::wire::RollOverMsg1;
use crate::wire::RollOverMsg2;
use crate::wire::RollOverMsg3;
use crate::wire::SetupMsg;
use anyhow::Context;
use anyhow::Result;
use bdk::bitcoin::secp256k1::schnorrsig;
use bdk::bitcoin::secp256k1::Signature;
use bdk::bitcoin::secp256k1::SECP256K1;
use bdk::bitcoin::util::psbt::PartiallySignedTransaction;
use bdk::bitcoin::{Amount, PublicKey, Transaction};
use bdk::bitcoin::Amount;
use bdk::bitcoin::PublicKey;
use bdk::bitcoin::Transaction;
use bdk::descriptor::Descriptor;
use bdk::miniscript::DescriptorTrait;
use futures::stream::FusedStream;
use futures::{Sink, SinkExt, StreamExt};
use futures::Sink;
use futures::SinkExt;
use futures::StreamExt;
use maia::commit_descriptor;
use maia::compute_adaptor_pk;
use maia::create_cfd_transactions;
use maia::interval;
use maia::lock_descriptor;
use maia::renew_cfd_transactions;
use maia::secp256k1_zkp;
use maia::secp256k1_zkp::EcdsaAdaptorSignature;
use maia::{
commit_descriptor, compute_adaptor_pk, create_cfd_transactions, interval, lock_descriptor,
renew_cfd_transactions, secp256k1_zkp, spending_tx_sighash, Announcement, PartyParams,
PunishParams,
};
use maia::spending_tx_sighash;
use maia::Announcement;
use maia::PartyParams;
use maia::PunishParams;
use std::collections::HashMap;
use std::iter::FromIterator;
use std::ops::RangeInclusive;

27
daemon/src/setup_maker.rs

@ -1,15 +1,26 @@
use crate::address_map::{ActorName, Stopping};
use crate::model::cfd::{Cfd, Dlc, Order, OrderId, Role};
use crate::address_map::ActorName;
use crate::address_map::Stopping;
use crate::maker_inc_connections;
use crate::model::cfd::Cfd;
use crate::model::cfd::Dlc;
use crate::model::cfd::Order;
use crate::model::cfd::OrderId;
use crate::model::cfd::Role;
use crate::model::Identity;
use crate::oracle::Announcement;
use crate::setup_contract::{self, SetupParams};
use crate::setup_contract;
use crate::setup_contract::SetupParams;
use crate::tokio_ext::spawn_fallible;
use crate::wire::{self, SetupMsg};
use crate::{maker_inc_connections, wallet};
use anyhow::{Context, Result};
use crate::wallet;
use crate::wire;
use crate::wire::SetupMsg;
use anyhow::Context;
use anyhow::Result;
use async_trait::async_trait;
use futures::channel::mpsc::{self, UnboundedSender};
use futures::{future, SinkExt};
use futures::channel::mpsc;
use futures::channel::mpsc::UnboundedSender;
use futures::future;
use futures::SinkExt;
use maia::secp256k1_zkp::schnorrsig;
use xtra::prelude::MessageChannel;
use xtra_productivity::xtra_productivity;

26
daemon/src/setup_taker.rs

@ -1,13 +1,25 @@
use crate::model::cfd::{Cfd, CfdState, Completed, Dlc, OrderId, Role};
use crate::address_map;
use crate::connection;
use crate::model::cfd::Cfd;
use crate::model::cfd::CfdState;
use crate::model::cfd::Completed;
use crate::model::cfd::Dlc;
use crate::model::cfd::OrderId;
use crate::model::cfd::Role;
use crate::oracle::Announcement;
use crate::setup_contract::{self, SetupParams};
use crate::setup_contract;
use crate::setup_contract::SetupParams;
use crate::tokio_ext::spawn_fallible;
use crate::wire::{self, SetupMsg};
use crate::{address_map, connection, wallet};
use anyhow::{Context, Result};
use crate::wallet;
use crate::wire;
use crate::wire::SetupMsg;
use anyhow::Context;
use anyhow::Result;
use async_trait::async_trait;
use futures::channel::mpsc::{self, UnboundedSender};
use futures::{future, SinkExt};
use futures::channel::mpsc;
use futures::channel::mpsc::UnboundedSender;
use futures::future;
use futures::SinkExt;
use maia::secp256k1_zkp::schnorrsig;
use xtra::prelude::*;
use xtra_productivity::xtra_productivity;

3
daemon/src/supervisor.rs

@ -1,7 +1,8 @@
use crate::Tasks;
use async_trait::async_trait;
use std::fmt;
use xtra::{Address, Context};
use xtra::Address;
use xtra::Context;
use xtra_productivity::xtra_productivity;
/// A supervising actor reacts to messages from the actor it is supervising and restarts it based on

30
daemon/src/taker.rs

@ -1,16 +1,30 @@
use anyhow::{Context, Result};
use anyhow::Context;
use anyhow::Result;
use bdk::bitcoin;
use bdk::bitcoin::secp256k1::schnorrsig;
use bdk::bitcoin::{Address, Amount};
use bdk::{bitcoin, FeeRate};
use clap::{Parser, Subcommand};
use bdk::bitcoin::Address;
use bdk::bitcoin::Amount;
use bdk::FeeRate;
use clap::Parser;
use clap::Subcommand;
use daemon::bitmex_price_feed;
use daemon::connection::connect;
use daemon::db;
use daemon::housekeeping;
use daemon::logger;
use daemon::model::cfd::Role;
use daemon::model::Identity;
use daemon::monitor;
use daemon::oracle;
use daemon::projection;
use daemon::seed::Seed;
use daemon::{
bitmex_price_feed, db, housekeeping, logger, monitor, oracle, projection, supervisor, wallet,
TakerActorSystem, Tasks, HEARTBEAT_INTERVAL, N_PAYOUTS, SETTLEMENT_INTERVAL,
};
use daemon::supervisor;
use daemon::wallet;
use daemon::TakerActorSystem;
use daemon::Tasks;
use daemon::HEARTBEAT_INTERVAL;
use daemon::N_PAYOUTS;
use daemon::SETTLEMENT_INTERVAL;
use sqlx::sqlite::SqliteConnectOptions;
use sqlx::SqlitePool;
use std::net::SocketAddr;

40
daemon/src/taker_cfd.rs

@ -1,14 +1,34 @@
use crate::address_map::{AddressMap, Stopping};
use crate::cfd_actors::{self, append_cfd_state, insert_cfd_and_update_feed};
use crate::address_map::AddressMap;
use crate::address_map::Stopping;
use crate::cfd_actors::append_cfd_state;
use crate::cfd_actors::insert_cfd_and_update_feed;
use crate::cfd_actors::{self};
use crate::collab_settlement_taker;
use crate::connection;
use crate::db::load_cfd_by_order_id;
use crate::model::cfd::{Cfd, CfdState, CfdStateCommon, Completed, Order, OrderId, Origin, Role};
use crate::model::{Identity, Price, Usd};
use crate::monitor::{self, MonitorParams};
use crate::{
collab_settlement_taker, connection, log_error, oracle, projection, rollover_taker,
setup_taker, wallet, Tasks,
};
use anyhow::{bail, Context as _, Result};
use crate::log_error;
use crate::model::cfd::Cfd;
use crate::model::cfd::CfdState;
use crate::model::cfd::CfdStateCommon;
use crate::model::cfd::Completed;
use crate::model::cfd::Order;
use crate::model::cfd::OrderId;
use crate::model::cfd::Origin;
use crate::model::cfd::Role;
use crate::model::Identity;
use crate::model::Price;
use crate::model::Usd;
use crate::monitor::MonitorParams;
use crate::monitor::{self};
use crate::oracle;
use crate::projection;
use crate::rollover_taker;
use crate::setup_taker;
use crate::wallet;
use crate::Tasks;
use anyhow::bail;
use anyhow::Context as _;
use anyhow::Result;
use async_trait::async_trait;
use bdk::bitcoin::secp256k1::schnorrsig;
use xtra::prelude::*;

12
daemon/src/to_sse_event.rs

@ -1,7 +1,13 @@
use crate::connection;
use crate::model;
use crate::model::Timestamp;
use crate::projection::{Cfd, CfdAction, CfdOrder, Identity, Quote};
use crate::to_sse_event::ConnectionCloseReason::{MakerVersionOutdated, TakerVersionOutdated};
use crate::{connection, model};
use crate::projection::Cfd;
use crate::projection::CfdAction;
use crate::projection::CfdOrder;
use crate::projection::Identity;
use crate::projection::Quote;
use crate::to_sse_event::ConnectionCloseReason::MakerVersionOutdated;
use crate::to_sse_event::ConnectionCloseReason::TakerVersionOutdated;
use bdk::bitcoin::Amount;
use rocket::request::FromParam;
use rocket::response::stream::Event;

6
daemon/src/tokio_ext.rs

@ -1,10 +1,12 @@
use futures::future::RemoteHandle;
use futures::FutureExt as _;
use std::any::{Any, TypeId};
use std::any::Any;
use std::any::TypeId;
use std::fmt;
use std::future::Future;
use std::time::Duration;
use tokio::time::{timeout, Timeout};
use tokio::time::timeout;
use tokio::time::Timeout;
pub fn spawn_fallible<F, E>(future: F)
where

3
daemon/src/tx.rs

@ -1,4 +1,5 @@
use bdk::bitcoin::{Network, Txid};
use bdk::bitcoin::Network;
use bdk::bitcoin::Txid;
use serde::Serialize;
use crate::model::cfd;

26
daemon/src/wallet.rs

@ -1,17 +1,31 @@
use crate::model::{Timestamp, WalletInfo};
use crate::model::Timestamp;
use crate::model::WalletInfo;
use crate::Tasks;
use anyhow::{bail, Context, Result};
use anyhow::bail;
use anyhow::Context;
use anyhow::Result;
use async_trait::async_trait;
use bdk::bitcoin::consensus::encode::serialize_hex;
use bdk::bitcoin::util::bip32::ExtendedPrivKey;
use bdk::bitcoin::util::psbt::PartiallySignedTransaction;
use bdk::bitcoin::{Address, Amount, OutPoint, PublicKey, Script, Transaction, Txid};
use bdk::blockchain::{ElectrumBlockchain, NoopProgress};
use bdk::bitcoin::Address;
use bdk::bitcoin::Amount;
use bdk::bitcoin::OutPoint;
use bdk::bitcoin::PublicKey;
use bdk::bitcoin::Script;
use bdk::bitcoin::Transaction;
use bdk::bitcoin::Txid;
use bdk::blockchain::ElectrumBlockchain;
use bdk::blockchain::NoopProgress;
use bdk::database::BatchDatabase;
use bdk::electrum_client;
use bdk::wallet::tx_builder::TxOrdering;
use bdk::wallet::AddressIndex;
use bdk::{electrum_client, FeeRate, KeychainKind, SignOptions};
use maia::{PartyParams, TxBuilderExt};
use bdk::FeeRate;
use bdk::KeychainKind;
use bdk::SignOptions;
use maia::PartyParams;
use maia::TxBuilderExt;
use rocket::serde::json::Value;
use std::collections::HashSet;
use std::time::Duration;

35
daemon/src/wire.rs

@ -1,22 +1,37 @@
use crate::model::cfd::{Order, OrderId};
use crate::model::{BitMexPriceEventId, Price, Timestamp, Usd};
use crate::noise::{NOISE_MAX_MSG_LEN, NOISE_TAG_LEN};
use anyhow::{bail, Result};
use crate::model::cfd::Order;
use crate::model::cfd::OrderId;
use crate::model::BitMexPriceEventId;
use crate::model::Price;
use crate::model::Timestamp;
use crate::model::Usd;
use crate::noise::NOISE_MAX_MSG_LEN;
use crate::noise::NOISE_TAG_LEN;
use anyhow::bail;
use anyhow::Result;
use bdk::bitcoin::secp256k1::Signature;
use bdk::bitcoin::util::psbt::PartiallySignedTransaction;
use bdk::bitcoin::{Address, Amount, PublicKey};
use bdk::bitcoin::Address;
use bdk::bitcoin::Amount;
use bdk::bitcoin::PublicKey;
use bytes::BytesMut;
use maia::secp256k1_zkp::{EcdsaAdaptorSignature, SecretKey};
use maia::{CfdTransactions, PartyParams, PunishParams};
use maia::secp256k1_zkp::EcdsaAdaptorSignature;
use maia::secp256k1_zkp::SecretKey;
use maia::CfdTransactions;
use maia::PartyParams;
use maia::PunishParams;
use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};
use serde::Deserialize;
use serde::Serialize;
use snow::TransportState;
use std::collections::HashMap;
use std::fmt;
use std::marker::PhantomData;
use std::ops::RangeInclusive;
use std::sync::{Arc, Mutex};
use tokio_util::codec::{Decoder, Encoder, LengthDelimitedCodec};
use std::sync::Arc;
use std::sync::Mutex;
use tokio_util::codec::Decoder;
use tokio_util::codec::Encoder;
use tokio_util::codec::LengthDelimitedCodec;
#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, PartialOrd)]
pub struct Version(semver::Version);

22
daemon/tests/happy_path.rs

@ -1,14 +1,24 @@
use std::time::Duration;
use crate::harness::flow::{is_next_none, next, next_cfd, next_order, next_some};
use crate::harness::{
deliver_close_finality_event, deliver_lock_finality_event, dummy_new_order, init_tracing,
start_both, Maker, MakerConfig, Taker, TakerConfig,
};
use crate::harness::deliver_close_finality_event;
use crate::harness::deliver_lock_finality_event;
use crate::harness::dummy_new_order;
use crate::harness::flow::is_next_none;
use crate::harness::flow::next;
use crate::harness::flow::next_cfd;
use crate::harness::flow::next_order;
use crate::harness::flow::next_some;
use crate::harness::init_tracing;
use crate::harness::start_both;
use crate::harness::Maker;
use crate::harness::MakerConfig;
use crate::harness::Taker;
use crate::harness::TakerConfig;
use daemon::connection::ConnectionStatus;
use daemon::model::cfd::OrderId;
use daemon::model::Usd;
use daemon::projection::{CfdState, Identity};
use daemon::projection::CfdState;
use daemon::projection::Identity;
use maia::secp256k1_zkp::schnorrsig;
use rust_decimal_macros::dec;
use tokio::time::sleep;

6
daemon/tests/harness/flow.rs

@ -1,5 +1,7 @@
use anyhow::{Context, Result};
use daemon::projection::{Cfd, CfdOrder};
use anyhow::Context;
use anyhow::Result;
use daemon::projection::Cfd;
use daemon::projection::CfdOrder;
use daemon::tokio_ext::FutureExt;
use std::time::Duration;
use tokio::sync::watch;

3
daemon/tests/harness/maia.rs

@ -1,4 +1,5 @@
use maia::secp256k1_zkp::{schnorrsig, SecretKey};
use maia::secp256k1_zkp::schnorrsig;
use maia::secp256k1_zkp::SecretKey;
use maia::Announcement;
use std::str::FromStr;

3
daemon/tests/harness/mocks/mod.rs

@ -1,6 +1,7 @@
use std::sync::Arc;
use tokio::sync::{Mutex, MutexGuard};
use tokio::sync::Mutex;
use tokio::sync::MutexGuard;
use self::monitor::MonitorActor;
use self::oracle::OracleActor;

3
daemon/tests/harness/mocks/monitor.rs

@ -1,6 +1,7 @@
use std::sync::Arc;
use daemon::{monitor, oracle};
use daemon::monitor;
use daemon::oracle;
use mockall::*;
use tokio::sync::Mutex;
use xtra_productivity::xtra_productivity;

10
daemon/tests/harness/mocks/wallet.rs

@ -1,14 +1,18 @@
use anyhow::Result;
use bdk::bitcoin::ecdsa;
use bdk::bitcoin::util::psbt::PartiallySignedTransaction;
use bdk::bitcoin::{ecdsa, Amount, Txid};
use bdk::bitcoin::Amount;
use bdk::bitcoin::Txid;
use bdk::wallet::tx_builder::TxOrdering;
use bdk::wallet::AddressIndex;
use bdk::FeeRate;
use daemon::bdk_ext::new_test_wallet;
use daemon::model::{Timestamp, WalletInfo};
use daemon::model::Timestamp;
use daemon::model::WalletInfo;
use daemon::wallet;
use maia::secp256k1_zkp::Secp256k1;
use maia::{PartyParams, TxBuilderExt};
use maia::PartyParams;
use maia::TxBuilderExt;
use mockall::*;
use rand::thread_rng;
use std::sync::Arc;

28
daemon/tests/harness/mod.rs

@ -3,15 +3,27 @@ use crate::harness::mocks::oracle::OracleActor;
use crate::harness::mocks::wallet::WalletActor;
use crate::schnorrsig;
use ::bdk::bitcoin::Network;
use daemon::connection::{connect, ConnectionStatus};
use daemon::model::cfd::{OrderId, Role};
use daemon::model::{self, Price, Usd};
use daemon::projection::{Cfd, CfdOrder, Feeds, Identity};
use daemon::connection::connect;
use daemon::connection::ConnectionStatus;
use daemon::db;
use daemon::maker_cfd;
use daemon::maker_inc_connections;
use daemon::model::cfd::OrderId;
use daemon::model::cfd::Role;
use daemon::model::Price;
use daemon::model::Usd;
use daemon::model::{self};
use daemon::projection;
use daemon::projection::Cfd;
use daemon::projection::CfdOrder;
use daemon::projection::Feeds;
use daemon::projection::Identity;
use daemon::seed::Seed;
use daemon::{
db, maker_cfd, maker_inc_connections, projection, taker_cfd, MakerActorSystem, Tasks,
HEARTBEAT_INTERVAL, N_PAYOUTS,
};
use daemon::taker_cfd;
use daemon::MakerActorSystem;
use daemon::Tasks;
use daemon::HEARTBEAT_INTERVAL;
use daemon::N_PAYOUTS;
use rust_decimal_macros::dec;
use sqlx::SqlitePool;
use std::net::SocketAddr;

2
dprint.json

@ -3,7 +3,7 @@
"projectType": "openSource",
"incremental": true,
"rustfmt": {
"imports_granularity": "module",
"imports_granularity": "item",
"wrap_comments": true,
"comment_width": 120
},

Loading…
Cancel
Save