From 9aa284536652612e3db74d16dc69d241791bc6ea Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Fri, 30 Dec 2022 07:56:59 +1300 Subject: [PATCH] POW setting for your posts [This currently blocks the overlord while it's computing PoW] --- src/overlord/mod.rs | 8 ++++++-- src/settings.rs | 10 ++++++++-- src/signer.rs | 7 +++++-- src/ui/settings.rs | 12 ++++++++++++ 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/overlord/mod.rs b/src/overlord/mod.rs index 5a819760..17db4787 100644 --- a/src/overlord/mod.rs +++ b/src/overlord/mod.rs @@ -668,7 +668,9 @@ impl Overlord { ots: None, }; - GLOBALS.signer.read().await.sign_preevent(pre_event)? + let powint = GLOBALS.settings.read().await.pow; + let pow = if powint > 0 { Some(powint) } else { None }; + GLOBALS.signer.read().await.sign_preevent(pre_event, pow)? }; let relays: Vec = GLOBALS @@ -724,7 +726,9 @@ impl Overlord { ots: None, }; - GLOBALS.signer.read().await.sign_preevent(pre_event)? + let powint = GLOBALS.settings.read().await.pow; + let pow = if powint > 0 { Some(powint) } else { None }; + GLOBALS.signer.read().await.sign_preevent(pre_event, pow)? }; let relays: Vec = GLOBALS diff --git a/src/settings.rs b/src/settings.rs index e4c440eb..90b186ba 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -14,6 +14,7 @@ pub const DEFAULT_NUM_RELAYS_PER_PERSON: u8 = 2; pub const DEFAULT_MAX_RELAYS: u8 = 15; pub const DEFAULT_MAX_FPS: u32 = 60; pub const DEFAULT_FEED_RECOMPUTE_INTERVAL_MS: u32 = 1000; +pub const DEFAULT_POW: u8 = 0; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Settings { @@ -29,6 +30,7 @@ pub struct Settings { pub encrypted_private_key: Option, pub max_fps: u32, pub feed_recompute_interval_ms: u32, + pub pow: u8, } impl Default for Settings { @@ -46,6 +48,7 @@ impl Default for Settings { encrypted_private_key: None, max_fps: DEFAULT_MAX_FPS, feed_recompute_interval_ms: DEFAULT_FEED_RECOMPUTE_INTERVAL_MS, + pow: DEFAULT_POW, } } } @@ -102,6 +105,7 @@ impl Settings { .parse::() .unwrap_or(DEFAULT_FEED_RECOMPUTE_INTERVAL_MS) } + "pow" => settings.pow = row.1.parse::().unwrap_or(DEFAULT_POW), _ => {} } } @@ -117,8 +121,9 @@ impl Settings { "REPLACE INTO settings (key, value) VALUES \ ('feed_chunk', ?),('overlap', ?),('autofollow', ?),\ ('view_posts_referred_to', ?),('view_posts_referring_to', ?),\ - ('view_threaded', ?),('num_relays_per_person', ?), \ - ('max_relays', ?),('max_fps', ?),('feed_recompute_interval_ms', ?)", + ('view_threaded', ?),('num_relays_per_person', ?),\ + ('max_relays', ?),('max_fps', ?),('feed_recompute_interval_ms', ?),\ + ('pow', ?)", )?; stmt.execute(( self.feed_chunk, @@ -139,6 +144,7 @@ impl Settings { self.max_relays, self.max_fps, self.feed_recompute_interval_ms, + self.pow, ))?; // Save private key identity diff --git a/src/signer.rs b/src/signer.rs index 65b52710..5889f6f2 100644 --- a/src/signer.rs +++ b/src/signer.rs @@ -58,9 +58,12 @@ impl Signer { } #[allow(dead_code)] - pub fn sign_preevent(&self, preevent: PreEvent) -> Result { + pub fn sign_preevent(&self, preevent: PreEvent, pow: Option) -> Result { match self { - Signer::Ready(pk) => Ok(Event::new(preevent, pk)?), + Signer::Ready(pk) => match pow { + Some(pow) => Ok(Event::new_with_pow(preevent, pk, pow)?), + None => Ok(Event::new(preevent, pk)?), + }, _ => Err(Error::NoPrivateKey), } } diff --git a/src/ui/settings.rs b/src/ui/settings.rs index 454b9c85..b6013934 100644 --- a/src/ui/settings.rs +++ b/src/ui/settings.rs @@ -90,6 +90,18 @@ pub(super) fn update( ui.separator(); ui.add_space(12.0); + ui.heading("Posting"); + + ui.horizontal(|ui| { + ui.label("Proof of Work: ") + .on_hover_text("The larger the number, the longer it takes."); + ui.add(Slider::new(&mut app.settings.pow, 0..=40).text("leading zeroes")); + }); + + ui.add_space(12.0); + ui.separator(); + ui.add_space(12.0); + ui.heading("User Interface"); ui.horizontal(|ui| {