Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
33 changes: 32 additions & 1 deletion src/database/db.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// sled db to store and fetch scenarios
use crate::database::decode::decompress_string;
use crate::database::types::Urldata;
use crate::database::types::{TxInfo, Urldata};
use crate::error::Error as CrateError;
use crate::scenarios::scenario_parse::generate_random_id;
use crate::scenarios::scenario_types::Graph;
Expand Down Expand Up @@ -36,10 +36,41 @@ pub struct Loghandler {}

/// Polodb
impl Loghandler {
/// read the logs.db
pub fn read_db(&self) -> Result<PoloDB, Error> {
let open: PoloDB = PoloDB::open_file("logs.db")?;
return Ok(open);
}
/// insert transaction to the Mempool
pub fn insert_tx(
&self,
scenario_id: String,
amount: String,
chain: String,
txType: String,
) -> Result<(), Error> {
let db = self.read_db()?;
let tx_pool = format!("{}_txpool", scenario_id);
let collection = db.collection::<TxInfo>(tx_pool.as_str());
collection.insert_one(TxInfo {
amount: amount,
chain: chain,
txType: txType,
Date: "".to_string(),
})?;
Ok(())
}

/// get mempool for scenarioid
pub fn get_transactions(&self, scenario_id: String) -> Result<Vec<TxInfo>, Error> {
let db = self.read_db()?;
let tx_pool = format!("{}_txpool", scenario_id);

let collection = db.collection::<TxInfo>(tx_pool.as_str());
let entries = collection.find(None)?; // return all entries under parent key
let listan: Vec<TxInfo> = entries.into_iter().map(|entry| entry.unwrap()).collect();
Ok(listan)
}

/// insert a log into the log files
pub fn insert_logs(&self, scenario_id: String, message: String) -> Result<(), Error> {
Expand Down
13 changes: 13 additions & 0 deletions src/database/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,19 @@ pub struct UrlResponse {
pub shortUrl: String,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct TxQueue {
pub mempool: Vec<TxInfo>,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct TxInfo {
pub chain: String,
pub amount: String,
pub txType: String,
pub Date: String,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct job_start {
pub scenario_id: String,
Expand Down
66 changes: 49 additions & 17 deletions src/jobs/jobs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,31 +60,63 @@ pub async fn start_job_worker(scenario_id: String, delay: u64) -> Result<(), Err
MultiNodes::Action(chain_node) => {
let form_me = chain_node.clone().formData.expect("");
let txtype = form_me.action.expect("could not get tx type");
let s_chain = form_me.actionData.clone().expect("could not get source.chain").source.chain;
let d_chain = form_me.actionData.clone().expect("could not get target.chain").target.chain;
let s_address = form_me.actionData.clone().expect("could not get source.address").source.address;
let d_address = form_me.actionData.clone().expect("could not get target address").target.address.expect("target address problem");
let s_chain = form_me
.actionData
.clone()
.expect("could not get source.chain")
.source
.chain;
let d_chain = form_me
.actionData
.clone()
.expect("could not get target.chain")
.target
.chain;
let s_address = form_me
.actionData
.clone()
.expect("could not get source.address")
.source
.address;
let d_address = form_me
.actionData
.clone()
.expect("could not get target address")
.target
.address
.expect("target address problem");

let d_amount = form_me.actionData.clone().expect("could not get source.amount").source.amount;
let s_assetid = form_me.actionData.clone().expect("could not get assetid").source.assetId.expect("no assetid").to_string();
let log_entry_go = format!(
"Drafting {} tx from {} to {}",
txtype, s_chain, d_chain
);
println!("Log entry go: {:?}", log_entry_go);
log_db.insert_logs(scenario_id.clone(), log_entry_go.clone())?;
let d_amount = form_me
.actionData
.clone()
.expect("could not get source.amount")
.source
.amount;
let s_assetid = form_me
.actionData
.clone()
.expect("could not get assetid")
.source
.assetId
.expect("no assetid")
.to_string();
let log_entry_go =
format!("Drafting {} tx from {} to {}", txtype, s_chain, d_chain);
println!("Log entry go: {:?}", log_entry_go);
log_db.insert_logs(scenario_id.clone(), log_entry_go.clone())?;

// let s_chain = chain_node.source_chain.clone();
// let d_chain = chain_node.dest_chain.clone();
// let d_amount = chain_node.amount.clone();
// let s_assetid = chain_node.assetid.clone();
// let d_address = chain_node.dest_address.clone();
// let tx_response: String =
let tx_response = match generate_tx(s_chain, d_chain, d_amount, s_assetid, d_address).await {
Ok(value) => value.txdata, // if all good return the txdata
_ => "Could not generate transaction".to_string(),
};
log_db.insert_logs(scenario_id.clone(), tx_response.clone())?;
let tx_response =
match generate_tx(s_chain, d_chain, d_amount, s_assetid, d_address).await {
Ok(value) => value.txdata, // if all good return the txdata
_ => "Could not generate transaction".to_string(),
};
log_db.insert_logs(scenario_id.clone(), tx_response.clone())?;

println!("Action node: {:?}", chain_node);
log_db
Expand Down
18 changes: 17 additions & 1 deletion src/routes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use crate::database::db::{DBhandler, Loghandler};
use crate::database::decode::decompress_string;
use crate::database::types::{
job_start, BroadcastInput, BroadcastStatus, GenericOut, GetUrlResponse, LogsOut, ScenarioInfo,
ScenarioInfoOut, UrlResponse, Urldata,
ScenarioInfoOut, TxInfo, TxQueue, UrlResponse, Urldata,
};
use crate::jobs::threads::{thread_status, ThreadManager}; // ThreadInfo
use crate::scenarios::scenario_parse::{multi_scenario_info, scenario_information};
Expand Down Expand Up @@ -116,6 +116,22 @@ pub async fn start_job(
});
}

/// Threadbags mempool
#[post("/scenario/tx")]
pub async fn scenario_transactions(
data: web::Json<ScenarioInfo>,
db: web::Data<Loghandler>,
) -> web::Json<TxQueue> {
let scenario_id = data.into_inner().id;

let output: Vec<TxInfo> = match db.into_inner().get_transactions(scenario_id) {
Ok(value) => value.into_iter().map(|entry| entry).collect(),
_ => Vec::new(),
};

return web::Json(TxQueue { mempool: output });
}

/*
curl -X POST -H "Content-Type: application/json" -d '{"id": "H!Xz6LWvg"}' http://localhost:8081/scenario/info -v
{"success":true,"result":[{"source_chain":"polkadot","source_address":"5GdvmQtUwByTt6Vkx41vtWvg5guyaH3BL2yn6iamg1RViiKD","dest_chain":"assetHub","dest_address":"5D7RT7vqgZKUoKxrPMihNeXBzhrmWjd5meprfUFhtrULJ4ng","assetid":"0","amount":"1","txtype":"swap","tx":"not set"},{"source_chain":"assetHub","source_address":"5D7RT7vqgZKUoKxrPMihNeXBzhrmWjd5meprfUFhtrULJ4ng","dest_chain":"hydraDx","dest_address":"5D7RT7vqgZKUoKxrPMihNeXBzhrmWjd5meprfUFhtrULJ4ng","assetid":"3","amount":"2","txtype":"swap","tx":"not set"},{"source_chain":"hydraDx","source_address":"5D7RT7vqgZKUoKxrPMihNeXBzhrmWjd5meprfUFhtrULJ4ng","dest_chain":"hydraDx","dest_address":"5D7RT7vqgZKUoKxrPMihNeXBzhrmWjd5meprfUFhtrULJ4ng","assetid":"5","amount":"2","txtype":"swap","tx":"not set"}]}
Expand Down