diff --git a/src/dbsync/api.rs b/src/dbsync/api.rs index c070ee7..9f3cd1e 100644 --- a/src/dbsync/api.rs +++ b/src/dbsync/api.rs @@ -2147,30 +2147,32 @@ pub async fn pool_description( #[cfg(test)] mod tests { - use crate::{dbsync::DataProviderDBSyncError, provider::CardanoDataProvider}; + use crate::{dbsync::DataProviderDBSyncError, provider::CardanoDataProvider, DataProvider, DBSyncProvider}; + use crate::dbsync; use bigdecimal::BigDecimal; use itertools::Itertools; use serde_json::json; use std::str::FromStr; + fn data_provider() -> DataProvider { + let dp = DataProvider::new(DBSyncProvider::new(crate::Config { + db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), + })); + dp + } + #[tokio::test] async fn test_tx_history() { let r = vec!["addr_test1qqt86eq9972q3qttj6ztje97llasktzfzvhmdccqjlqjaq2cer3t74yn0dm8xqnr7rtwhkqcrpsmphwcf0mlmn39ry6qy6q5t2","addr_test1qpg8ehvgj9zxrx59et72yjn2p02xwsm3l89jwj8ujcj63ujcer3t74yn0dm8xqnr7rtwhkqcrpsmphwcf0mlmn39ry6qw23emu","addr_test1qqdp3cry5vc2gfjljctdu638tvkcqfx40fjunht9hrmru5zcer3t74yn0dm8xqnr7rtwhkqcrpsmphwcf0mlmn39ry6qnaxxgs","addr_test1qr2mw080ujz0unmpn9lx5ftfuewc6htyr6v3a0svul2zgezcer3t74yn0dm8xqnr7rtwhkqcrpsmphwcf0mlmn39ry6qgryf7t","addr_test1qr7tqh7tsg4lut3jv6tsfwlv464m6knjjw90ugyz8uzgr6zcer3t74yn0dm8xqnr7rtwhkqcrpsmphwcf0mlmn39ry6qt0jxzj","addr_test1qrscurjp292sxv24sepj7ghq4ydkkekzaz53zwfswcna6ljcer3t74yn0dm8xqnr7rtwhkqcrpsmphwcf0mlmn39ry6q8pu3l5","addr_test1qqssrphse6qmp9h0ksu5vfmsx99tfl2lc6rhvy2spd5wr86cer3t74yn0dm8xqnr7rtwhkqcrpsmphwcf0mlmn39ry6qw59j4j","addr_test1qqgagc0fy6nm0qe4h8zqxsg952tqjeg7l7j0agd0cx4u25zcer3t74yn0dm8xqnr7rtwhkqcrpsmphwcf0mlmn39ry6qxvept2"]; - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); - let t = dp.tx_history(&r, None).await.unwrap(); + let t = data_provider().tx_history(&r, None).await.unwrap(); println!("{t:?}"); } #[tokio::test] async fn test_discover_transaction() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); - let t = crate::dbsync::discover_transaction( - dp.provider(), + let t = dbsync::discover_transaction( + data_provider().provider(), "1b07f1152e52ce0a9dbb561aa2e2d1750ca3a1a4141150a8bad342947a66a3a6", ) .await; @@ -2179,19 +2181,13 @@ mod tests { #[tokio::test] async fn test_get_pools() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); - let t = crate::dbsync::get_pools(dp.provider()).await; + let t = dbsync::get_pools(data_provider().provider()).await; println!("{t:?}"); } #[tokio::test] async fn test_epoch_nonce() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); - let t = crate::dbsync::epoch_nonce(dp.provider(), 205) + let t = dbsync::epoch_nonce(data_provider().provider(), 205) .await .unwrap(); println!("Nonce: {}\nEntropy: {:?}", hex::encode(&t.0), t.1); @@ -2199,11 +2195,8 @@ mod tests { #[tokio::test] async fn test_is_nft() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); - let t = crate::dbsync::is_nft( - dp.provider(), + let t = dbsync::is_nft( + data_provider().provider(), &[ "asset1a0q0grruzd3dm2c9ev890zfaytty8tfcl4qt3a", "asset1h3pg9m9arlwl4l8z3dwg3lwg54j70zqdrjhy88", @@ -2218,11 +2211,8 @@ mod tests { #[tokio::test] async fn test_supply() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); - let t = crate::dbsync::token_supply( - dp.provider(), + let t = dbsync::token_supply( + data_provider().provider(), "asset1m099azmatp3f3xehsu4sqvr45jzqafxmm0dra0", ) .await @@ -2235,23 +2225,19 @@ mod tests { // make projection accurate for higher epoch values. #[tokio::test] async fn reward_projection() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); - let pool_hash = "pool1ayc7a29ray6yv4hn7ge72hpjafg9vvpmtscnq9v8r0zh7azas9c"; let stake_addr = "stake_test1upvv3c4l2jfhkannqf3lp4htmqvpscdsmhvyhalaecj3jdqtfcgvh"; // stake_test1upvv3c4l2jfhkannqf3lp4htmqvpscdsmhvyhalaecj3jdqtfcgvh let current_epoch = 25; let func_value = super::personal_delegator_rewards_next_epoch( - dp.provider(), + data_provider().provider(), pool_hash, current_epoch, stake_addr, ) .unwrap(); let real_value = - super::earned_reward(dp.provider(), stake_addr, current_epoch as i64).unwrap(); + super::earned_reward(data_provider().provider(), stake_addr, current_epoch as i64).unwrap(); println!("correct_reward: {}", real_value); println!("projected reward: {}", func_value); @@ -2260,13 +2246,10 @@ mod tests { #[tokio::test] async fn retrieve_staked_amount() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let epoch = 275; let stake_addr = "stake_test1upvv3c4l2jfhkannqf3lp4htmqvpscdsmhvyhalaecj3jdqtfcgvh"; - let func_value = super::retrieve_staked_amount(dp.provider(), epoch, stake_addr).unwrap(); + let func_value = super::retrieve_staked_amount(data_provider().provider(), epoch, stake_addr).unwrap(); let real_value = BigDecimal::from_str("10305915710").unwrap(); assert_eq!(func_value, real_value); @@ -2274,11 +2257,8 @@ mod tests { #[tokio::test] async fn mint_metadata() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let fingerprint_in = "asset1kngmwlxpfzc6pk027zvhsfpprp452gt3enhhxh"; - let func_value = super::mint_metadata(dp.provider(), fingerprint_in).unwrap(); + let func_value = super::mint_metadata(data_provider().provider(), fingerprint_in).unwrap(); let real_value = super::TokenInfoView { fingerprint: "asset1kngmwlxpfzc6pk027zvhsfpprp452gt3enhhxh".to_string(), policy: "994cf4c18f5613ca49c275f63d464b6d95123bfa8985e82b24b5680b".to_string(), @@ -2306,11 +2286,8 @@ mod tests { #[tokio::test] #[allow(non_snake_case)] async fn mint_metadata_bug_CMW_78() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let fingerprint_in = "asset162kdtwq54e5khz5y6naa55xqvk0zk5fpce8c76"; // contains non-UTF8 characters - let func_value = super::mint_metadata(dp.provider(), fingerprint_in).unwrap(); + let func_value = super::mint_metadata(data_provider().provider(), fingerprint_in).unwrap(); let real_value = super::TokenInfoView { fingerprint: "asset162kdtwq54e5khz5y6naa55xqvk0zk5fpce8c76".to_string(), policy: "8cbe56131657c928cee716677bd3eac885f9fcad10f9fa70e533f635".to_string(), @@ -2336,12 +2313,8 @@ mod tests { #[tokio::test] #[allow(non_snake_case)] async fn get_txo_tokens_CMW_81() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); - let utxo_tokens = super::get_txo_tokens( - dp.provider(), + data_provider().provider(), 3312750, 0 ).unwrap(); @@ -2356,7 +2329,7 @@ mod tests { println!("utxo_tokens[0]: {:?}", utxo_tokens[0]); let utxo_tokens = super::get_txo_tokens( - dp.provider(), + data_provider().provider(), 3312750, 1 ).unwrap(); @@ -2437,12 +2410,8 @@ mod tests { #[tokio::test] #[allow(non_snake_case)] async fn get_utxo_tokens_CMW_81() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); - let utxo_tokens = super::get_utxo_tokens( - dp.provider(), + data_provider().provider(), 3317731, 0 ).unwrap(); @@ -2466,7 +2435,7 @@ mod tests { assert_eq!(hex::encode(utxo_tokens[2].name.clone()), "7441726b"); let utxo_tokens = super::get_utxo_tokens( - dp.provider(), + data_provider().provider(), 3317731, 1 ).unwrap(); @@ -2492,181 +2461,127 @@ mod tests { #[tokio::test] async fn pool_vrf_key_hash() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1uh5xdjv70q5eyl5z644p23mvhd3dx0gwr8pjnlj9pwd3jgkvd0e"; - let _func_value = hex::encode(super::pool_vrf_key_hash(dp.provider(), pool_hash).await.unwrap()); + let _func_value = hex::encode(super::pool_vrf_key_hash(data_provider().provider(), pool_hash).await.unwrap()); let _manual_value = "335399acf3228243efb0fec0e43f18d61a496d4fd740fd800f9b91b5fa7d0540"; } #[tokio::test] async fn pool_blocks_minted() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1uh5xdjv70q5eyl5z644p23mvhd3dx0gwr8pjnlj9pwd3jgkvd0e"; - let _func_value = super::pool_blocks_minted(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_blocks_minted(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = 13; } #[tokio::test] async fn pool_blocks_current_epoch() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool14u22dyym8k2g2twvgct86njg3m9cc7j2fc74yamy6672s6up7a0"; - let _func_value = super::pool_blocks_current_epoch(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_blocks_current_epoch(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = 25; } #[tokio::test] async fn pool_reward_recipients() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1rk2y9gx6vll8lawzdqlky5p2a3ypzsxg07arg8gmhkjj2905035"; - let _func_value = super::pool_reward_recipients(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_reward_recipients(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = 207; } #[tokio::test] async fn pool_last_reward_earned_epoch() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1rk2y9gx6vll8lawzdqlky5p2a3ypzsxg07arg8gmhkjj2905035"; - let _func_value = super::pool_last_reward_earned_epoch(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_last_reward_earned_epoch(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = 349; } #[tokio::test] async fn pool_declared_pledge() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1vezalga3ge0mt0xf4txz66ctufk6nrmemhhpshwkhedk5jf0stw"; - let _func_value = super::pool_declared_pledge(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_declared_pledge(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = BigDecimal::from_str("125000000000").unwrap(); } #[tokio::test] async fn pool_margin_cost() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1vezalga3ge0mt0xf4txz66ctufk6nrmemhhpshwkhedk5jf0stw"; - let _func_value = super::pool_margin_cost(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_margin_cost(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = 0.075; } #[tokio::test] async fn pool_fixed_cost() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1vezalga3ge0mt0xf4txz66ctufk6nrmemhhpshwkhedk5jf0stw"; - let _func_value = super::pool_fixed_cost(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_fixed_cost(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = BigDecimal::from_str("340000000").unwrap(); } #[tokio::test] async fn pool_reward_address() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1vezalga3ge0mt0xf4txz66ctufk6nrmemhhpshwkhedk5jf0stw"; - let _func_value = super::pool_reward_address(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_reward_address(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = "stake_test1uz5ah77y8xvnxs6cyp979hg7fhxezjw39jfrpardqymnz7sg7ea8y"; } #[tokio::test] async fn pool_owner() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1vezalga3ge0mt0xf4txz66ctufk6nrmemhhpshwkhedk5jf0stw"; - let _func_value = super::pool_owner(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_owner(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = "stake_test1uz5ah77y8xvnxs6cyp979hg7fhxezjw39jfrpardqymnz7sg7ea8y"; } #[tokio::test] async fn pool_registration() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1vezalga3ge0mt0xf4txz66ctufk6nrmemhhpshwkhedk5jf0stw"; - let _func_value = super::pool_registration(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_registration(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = 175; } #[tokio::test] async fn pool_retirement() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool17hsjytkcntlh6py4gnmk4695cux28tpcxrggs9ln97mvvtplr2m"; - let func_value = super::pool_retirement(dp.provider(), pool_hash).await.unwrap(); + let func_value = super::pool_retirement(data_provider().provider(), pool_hash).await.unwrap(); let manual_value = 26; } #[tokio::test] async fn pool_url() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool17hsjytkcntlh6py4gnmk4695cux28tpcxrggs9ln97mvvtplr2m"; - let _func_value = super::pool_url(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_url(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = "https://armadacardano.io/metadata.json"; } #[tokio::test] async fn pool_ticker() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1l5u4zh84na80xr56d342d32rsdw62qycwaw97hy9wwsc6axdwla"; - let _func_value = super::pool_ticker(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_ticker(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = "EUSKL"; } #[tokio::test] async fn pool_metadata_json() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1l5u4zh84na80xr56d342d32rsdw62qycwaw97hy9wwsc6axdwla"; - let _func_value = super::pool_metadata_json(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_metadata_json(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = json!({"name": "EUSKAL STAKE POOL TESTNET", "ticker": "EUSKL", "homepage": "https://euskalstakepool.win", "description": "EUSKAL STAKE POOL TESTNET"}); } #[tokio::test] async fn pool_name() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1l5u4zh84na80xr56d342d32rsdw62qycwaw97hy9wwsc6axdwla"; - let _func_value = super::pool_name(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_name(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = "EUSKAL STAKE POOL TESTNET"; } #[tokio::test] async fn pool_homepage() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1l5u4zh84na80xr56d342d32rsdw62qycwaw97hy9wwsc6axdwla"; - let _func_value = super::pool_homepage(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_homepage(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = "https://euskalstakepool.win"; } #[tokio::test] async fn pool_description() { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_DB_URL").unwrap(), - })); let pool_hash = "pool1l5u4zh84na80xr56d342d32rsdw62qycwaw97hy9wwsc6axdwla"; - let _func_value = super::pool_description(dp.provider(), pool_hash).await.unwrap(); + let _func_value = super::pool_description(data_provider().provider(), pool_hash).await.unwrap(); let _manual_value = "EUSKAL STAKE POOL TESTNET"; } } \ No newline at end of file diff --git a/src/server/handler/handler_rest/info.rs b/src/server/handler/handler_rest/info.rs index 5eb5d5c..3c32479 100644 --- a/src/server/handler/handler_rest/info.rs +++ b/src/server/handler/handler_rest/info.rs @@ -6,12 +6,22 @@ use crate::server::error::RESTError; use crate::server::filter::with_auth; use crate::server::handler::make_error; use crate::{models::TokenInfoView, provider::CardanoDataProvider}; +use crate::DataProvider; +use crate::DBSyncProvider; use ::log::debug; use cardano_serialization_lib::utils::from_bignum; use dcslc::{make_fingerprint, TransactionUnspentOutputs}; use rweb::*; use serde_json::json; +fn data_provider() -> Result, Rejection> { + let dp = DataProvider::new(DBSyncProvider::new(crate::Config { + db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, + })); + + Ok(dp) +} + #[get("/utxos/{address}")] #[openapi( id = "api.info.utxos", @@ -23,11 +33,7 @@ pub async fn utxos_per_addr( #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { // check against dataprovider - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let utxos = dp + let utxos = data_provider()? .script_utxos(&address) .await .map_err(|_| RESTError::Custom("Could not find UTxOs".to_string()))?; @@ -47,13 +53,10 @@ pub async fn address_exists( #[query] addresses: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); let mut addresses: Vec = parse_string_vec_from_query(&addresses)?; let addresses = addresses.iter_mut().map(|address| &address[..]).collect(); - let result = dp.addresses_exist(&addresses).await?; + let result = data_provider()?.addresses_exist(&addresses).await?; Ok(rweb::Json::from(json!(result))) } @@ -83,10 +86,7 @@ pub async fn mint_metadata( fingerprint: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: dotenv::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - let metadata: TokenInfoView = match dp.mint_metadata(&fingerprint).await { + let metadata: TokenInfoView = match data_provider()?.mint_metadata(&fingerprint).await { Ok(metadata) => metadata, Err(e) => return Err(RESTError::Custom(e.to_string()).into()), }; @@ -104,11 +104,8 @@ pub async fn mint_metadata_policy_assetname( assetname: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); let fingerprint = make_fingerprint(&policy, &assetname).unwrap(); - let metadata: TokenInfoView = dp.mint_metadata(&fingerprint).await?; + let metadata: TokenInfoView = data_provider()?.mint_metadata(&fingerprint).await?; Ok(rweb::Json::from(json!(metadata))) } @@ -123,15 +120,13 @@ pub async fn tx_history( #[query] slot: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); + let mut addresses: Vec = parse_string_vec_from_query(&addresses)?; let addresses = addresses.iter_mut().map(|address| &address[..]).collect(); let slot = slot.parse::().ok(); - let history = dp.tx_history(&addresses, slot).await?; + let history = data_provider()?.tx_history(&addresses, slot).await?; Ok(rweb::Json::from(json!(history))) } @@ -146,11 +141,10 @@ pub async fn tx_history_discover( hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); debug!("Try to discover Transaction: {:?}", hash); - let tx = crate::dbsync::discover_transaction(dp.provider(), &hash).await; + let tx = crate::dbsync::discover_transaction( + data_provider()?.provider(), &hash + ).await; match tx { Ok(tx) => Ok(rweb::Json::from(json!(tx))), @@ -189,14 +183,10 @@ pub(crate) async fn get_asset_for_addresses( addresses: &Vec, ) -> Result, Rejection> { debug!("{addresses:?}"); - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - let mut utxos = TransactionUnspentOutputs::new(); for a in addresses { - let us = dp.script_utxos(a).await?; + let us = data_provider()?.script_utxos(a).await?; utxos.merge(us); } @@ -302,13 +292,9 @@ pub async fn handle_asset_for_stake_address( } }; - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - // dp //.wallet_utxos(&reward_address.to_bech32(None).unwrap()) let utxos = match get_stake_address_utxos_dep( - dp.provider(), + data_provider()?.provider(), &reward_address.to_bech32(None).unwrap(), ) { Ok(u) => u, @@ -403,10 +389,7 @@ pub async fn retrieve_active_pools( page: usize, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - let pools = crate::dbsync::get_pools(dp.provider()).await?; + let pools = crate::dbsync::get_pools(data_provider()?.provider()).await?; let pools_paged: Vec> = pools.chunks(100).map(|s| s.into()).collect(); if pools_paged.len() < page { return make_error( @@ -427,10 +410,7 @@ pub async fn retrieve_active_pools( pub async fn retrieve_active_pools_all_pages( #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - let pools = crate::dbsync::get_pools(dp.provider()).await?; + let pools = crate::dbsync::get_pools(data_provider()?.provider()).await?; let pools_paged: Vec> = pools.chunks(100).map(|s| s.into()).collect(); Ok(rweb::Json::from(json!(pools_paged))) } @@ -445,10 +425,7 @@ pub async fn token_supply( fingerprint: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - let supply = crate::dbsync::token_supply(dp.provider(), &fingerprint).await; + let supply = crate::dbsync::token_supply(data_provider()?.provider(), &fingerprint).await; if let Err(e) = &supply { return make_error( format!("Could not get supply for {:?}", e.to_string()), @@ -479,13 +456,9 @@ pub async fn is_nft( ); } }; - debug!("Creatign dataprovider instance"); - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); debug!("Try to execute query"); let supply = crate::dbsync::is_nft( - dp.provider(), + data_provider()?.provider(), &f.iter().map(|n| &**n).collect::>()[..], ) .await; @@ -511,14 +484,10 @@ pub async fn retrieve_staked_amount( stake_addr: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - dbg!(epoch.clone()); dbg!(stake_addr.clone()); - let staked_amount = dp + let staked_amount = data_provider()? .retrieve_staked_amount(epoch, &stake_addr) .await .map_err(|_| RESTError::Custom("Couldn't find staked amount".to_string()))?; @@ -537,11 +506,7 @@ pub async fn retrieve_generated_rewards( stake_addr: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let generated_rewards = dp + let generated_rewards = data_provider()? .retrieve_generated_rewards(&stake_addr) .await .map_err(|_| RESTError::Custom("Couldn't find generated rewards".to_string()))?; @@ -559,11 +524,7 @@ pub async fn pool_vrf_key_hash( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_vrf_key_hash = dp + let pool_vrf_key_hash = data_provider()? .pool_vrf_key_hash(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find pools VRF key hash".to_string()))?; @@ -581,11 +542,7 @@ pub async fn pool_blocks_minted( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_blocks_minted = dp + let pool_blocks_minted = data_provider()? .pool_blocks_minted(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the total number of blocks minted by the given pool".to_string()))?; @@ -603,11 +560,7 @@ pub async fn pool_blocks_current_epoch( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_blocks_current_epoch = dp + let pool_blocks_current_epoch = data_provider()? .pool_blocks_current_epoch(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the quantity of blocks minted by the given pool in current epoch".to_string()))?; @@ -625,11 +578,7 @@ pub async fn pool_reward_recipients( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_reward_recipients = dp + let pool_reward_recipients = data_provider()? .pool_reward_recipients(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the quantity of delegators that received rewards".to_string()))?; @@ -647,11 +596,7 @@ pub async fn pool_last_reward_earned_epoch( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_last_reward_earned_epoch = dp + let pool_last_reward_earned_epoch = data_provider()? .pool_last_reward_earned_epoch(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the last epoch when the given pool distributed rewards".to_string()))?; @@ -670,11 +615,7 @@ pub async fn pool_declared_pledge( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_declared_pledge = dp + let pool_declared_pledge = data_provider()? .pool_declared_pledge(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the amount of Ada pledged by the given pool".to_string()))?; @@ -692,11 +633,7 @@ pub async fn pool_margin_cost( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_margin_cost = dp + let pool_margin_cost = data_provider()? .pool_margin_cost(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the margin cost of the given pool".to_string()))?; @@ -714,11 +651,7 @@ pub async fn pool_fixed_cost( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_fixed_cost = dp + let pool_fixed_cost = data_provider()? .pool_fixed_cost(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the fixed cost of the given pool".to_string()))?; @@ -736,11 +669,7 @@ pub async fn pool_reward_address( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_reward_address = dp + let pool_reward_address = data_provider()? .pool_reward_address(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the reward address of the given pool".to_string()))?; @@ -758,11 +687,7 @@ pub async fn pool_owner( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_owner = dp + let pool_owner = data_provider()? .pool_owner(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the owner of the given pool".to_string()))?; @@ -780,11 +705,7 @@ pub async fn pool_registration( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_registration = dp + let pool_registration = data_provider()? .pool_registration(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the epoch in which the given pool made its latest registration".to_string()))?; @@ -802,11 +723,7 @@ pub async fn pool_retirement( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_retirement = dp + let pool_retirement = data_provider()? .pool_retirement(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the epoch in which the given pool retired".to_string()))?; @@ -824,11 +741,7 @@ pub async fn pool_url( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_url = dp + let pool_url = data_provider()? .pool_url(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the url in which the given pool stores its metadata".to_string()))?; @@ -846,11 +759,7 @@ pub async fn pool_ticker( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_ticker = dp + let pool_ticker = data_provider()? .pool_ticker(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the ticker of the given stake pool".to_string()))?; @@ -868,11 +777,7 @@ pub async fn pool_metadata_json( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_metadata_json = dp + let pool_metadata_json = data_provider()? .pool_metadata_json(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the metadata JSON of the given stake pool".to_string()))?; @@ -890,11 +795,7 @@ pub async fn pool_name( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_name = dp + let pool_name = data_provider()? .pool_name(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the name of the given stake pool".to_string()))?; @@ -912,11 +813,7 @@ pub async fn pool_homepage( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_homepage = dp + let pool_homepage = data_provider()? .pool_homepage(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the homepage of the given stake pool".to_string()))?; @@ -934,11 +831,7 @@ pub async fn pool_description( pool_hash: String, #[filter = "with_auth"] _user_id: String, ) -> Result, Rejection> { - let dp = crate::DataProvider::new(crate::DBSyncProvider::new(crate::Config { - db_path: std::env::var("DBSYNC_URL").map_err(|_| warp::reject::not_found())?, - })); - - let pool_description = dp + let pool_description = data_provider()? .pool_description(&pool_hash) .await .map_err(|_| RESTError::Custom("Couldn't find the description of the given stake pool".to_string()))?;