reduce the price of memory
This commit is contained in:
parent
9fa62a1978
commit
928c68f550
63
src/data.rs
63
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user