From e7aaeab27ab53148c65cf9a7c11f58c498e6949f Mon Sep 17 00:00:00 2001 From: f321x Date: Wed, 3 Jul 2024 12:52:00 +0000 Subject: [PATCH] finish submit_maker_bond endpoint coordinator --- .../coordinator/src/communication/mod.rs | 32 ++++++++++++------- .../coordinator/src/database/mod.rs | 7 ++-- taptrade-cli-demo/coordinator/src/main.rs | 2 +- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/taptrade-cli-demo/coordinator/src/communication/mod.rs b/taptrade-cli-demo/coordinator/src/communication/mod.rs index da72cbe..3cddd29 100755 --- a/taptrade-cli-demo/coordinator/src/communication/mod.rs +++ b/taptrade-cli-demo/coordinator/src/communication/mod.rs @@ -4,6 +4,7 @@ mod utils; use self::api::*; use self::utils::*; use super::*; +use crate::wallet::*; use axum::{ http::StatusCode, response::{IntoResponse, Response}, @@ -14,7 +15,6 @@ use rand::Rng; use serde::{Deserialize, Serialize}; use std::net::SocketAddr; use tokio::net::TcpListener; -// use crate::coordinator::verify_psbt; // // Axum handler functions @@ -46,17 +46,27 @@ async fn submit_maker_bond( Extension(wallet): Extension, Json(payload): Json, ) -> Result { - let bond_requirements = database.fetch_maker_request(&payload.robohash_hex).await?; + let bond_requirements = if let Ok(requirements) = database + .fetch_bond_requirements(&payload.robohash_hex) + .await + { + requirements + } else { + return Ok(StatusCode::NOT_FOUND.into_response()); + }; - // validate bond (check amounts, valid inputs, correct addresses, valid signature, feerate) - // if !wallet - // .validate_bond_tx_hex(&payload.signed_bond_hex) - // .await? - // { - // return Ok(StatusCode::NOT_ACCEPTABLE.into_response()); - // } - let offer_id_hex = generate_random_order_id(16); // 16 bytes random offer id, maybe a different system makes more sense later on? (uuid or increasing counter...) - // create address for taker bond + match wallet + .validate_bond_tx_hex(&payload.signed_bond_hex, bond_requirements) + .await + { + Ok(()) => (), + Err(e) => { + dbg!(e); + return Ok(StatusCode::NOT_ACCEPTABLE.into_response()); + } + } + let offer_id_hex: String = generate_random_order_id(16); // 16 bytes random offer id, maybe a different system makes more sense later on? (uuid or increasing counter...) + // create address for taker bond let new_taker_bond_address = wallet.get_new_address().await?; // insert bond into sql database and move offer to different table let bond_locked_until_timestamp = database diff --git a/taptrade-cli-demo/coordinator/src/database/mod.rs b/taptrade-cli-demo/coordinator/src/database/mod.rs index 6e5e3df..c88243d 100644 --- a/taptrade-cli-demo/coordinator/src/database/mod.rs +++ b/taptrade-cli-demo/coordinator/src/database/mod.rs @@ -146,17 +146,18 @@ impl CoordinatorDB { Ok(()) } - pub async fn fetch_maker_request(&self, robohash: &String) -> Result { + pub async fn fetch_bond_requirements(&self, robohash: &String) -> Result { let maker_request = sqlx::query( - "SELECT bond_address, bond_amount_sat FROM maker_requests WHERE robohash = ?", + "SELECT bond_address, bond_amount_sat, amount_sat FROM maker_requests WHERE robohash = ?", ) .bind(hex::decode(robohash)?) .fetch_one(&*self.db_pool) .await?; - Ok(BondRequirementResponse { + Ok(BondRequirements { bond_address: maker_request.try_get("bond_address")?, locking_amount_sat: maker_request.try_get::("bond_amount_sat")? as u64, + min_input_sum_sat: maker_request.try_get::("amount_sat")? as u64, }) } diff --git a/taptrade-cli-demo/coordinator/src/main.rs b/taptrade-cli-demo/coordinator/src/main.rs index c44bad4..afae419 100755 --- a/taptrade-cli-demo/coordinator/src/main.rs +++ b/taptrade-cli-demo/coordinator/src/main.rs @@ -10,7 +10,7 @@ use dotenv::dotenv; use std::time::{SystemTime, UNIX_EPOCH}; use std::{env, sync::Arc}; use tokio::sync::Mutex; -use wallet::CoordinatorWallet; +use wallet::*; // populate .env with values before starting #[tokio::main]