From 928c68f550edc54768f1348def8aecded1fda6d1 Mon Sep 17 00:00:00 2001 From: ghe0 Date: Mon, 27 Jan 2025 17:49:23 +0200 Subject: [PATCH] reduce the price of memory --- src/data.rs | 63 +++++++++++++++++++++++++++-------------------------- src/main.rs | 2 +- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/data.rs b/src/data.rs index ff0620b..fb81bcb 100644 --- a/src/data.rs +++ b/src/data.rs @@ -98,7 +98,7 @@ impl Contract { // I tried, but this can be done better. // Storage cost should also be based on tier (self.vcpus as u64 * 10) - + ((self.memory_mb + 256) as u64 * 4 / 100) + + ((self.memory_mb + 256) as u64 / 200) + (self.disk_size_gb as u64 / 10) + (!self.public_ipv4.is_empty() as u64 * 10) } @@ -191,34 +191,37 @@ impl BrainData { }); } - pub fn contracts_cron(&self) { - let mut deleted_contracts = Vec::new(); + pub async fn contracts_cron(&self) { + let mut deleted_contracts: Vec<(String, String)> = Vec::new(); log::debug!("Running contracts cron..."); - let mut contracts = self.contracts.write().unwrap(); - contracts.retain_mut(|c| { - let owner_key = self - .find_nodes_by_pubkey(&c.node_pubkey) - .unwrap() - .owner_key - .clone(); - let minutes_to_collect = (Utc::now() - c.collected_at).num_minutes() as u64; - c.collected_at = Utc::now(); - log::debug!("{minutes_to_collect}"); - let mut nanotokens_to_collect = c.price_per_minute().saturating_mul(minutes_to_collect); - if nanotokens_to_collect > c.locked_nano { - nanotokens_to_collect = c.locked_nano; - } - log::debug!( - "Removing {nanotokens_to_collect} nanotokens from {}", - c.uuid - ); - c.locked_nano -= nanotokens_to_collect; - self.add_nano_to_wallet(&owner_key, nanotokens_to_collect); - if c.locked_nano == 0 { - deleted_contracts.push((c.uuid.clone(), c.node_pubkey.clone())); - } - c.locked_nano > 0 - }); + { + let mut contracts = self.contracts.write().unwrap(); + contracts.retain_mut(|c| { + let owner_key = self + .find_nodes_by_pubkey(&c.node_pubkey) + .unwrap() + .owner_key + .clone(); + let minutes_to_collect = (Utc::now() - c.collected_at).num_minutes() as u64; + c.collected_at = Utc::now(); + log::debug!("{minutes_to_collect}"); + let mut nanotokens_to_collect = + c.price_per_minute().saturating_mul(minutes_to_collect); + if nanotokens_to_collect > c.locked_nano { + nanotokens_to_collect = c.locked_nano; + } + log::debug!( + "Removing {nanotokens_to_collect} nanotokens from {}", + c.uuid + ); + c.locked_nano -= nanotokens_to_collect; + self.add_nano_to_wallet(&owner_key, nanotokens_to_collect); + if c.locked_nano == 0 { + deleted_contracts.push((c.uuid.clone(), c.node_pubkey.clone())); + } + c.locked_nano > 0 + }); + } // inform daemons of the deletion of the contracts for (uuid, node_pubkey) in deleted_contracts.iter() { if let Some(daemon_tx) = self.daemon_tx.get(&node_pubkey.clone()) { @@ -228,9 +231,7 @@ impl BrainData { })), }; let daemon_tx = daemon_tx.clone(); - tokio::runtime::Runtime::new().unwrap().spawn(async move { - let _ = daemon_tx.send(msg).await; - }); + let _ = daemon_tx.send(msg).await; } } } diff --git a/src/main.rs b/src/main.rs index 4bf30f7..ae04f30 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,7 +19,7 @@ async fn main() { tokio::spawn(async move { loop { tokio::time::sleep(tokio::time::Duration::from_secs(60)).await; - data_clone.contracts_cron(); + data_clone.contracts_cron().await; } }); let addr = "0.0.0.0:31337".parse().unwrap();