Log Proof of Work.

This commit is contained in:
Hunter Trujillo 2023-04-24 00:27:56 -06:00 committed by Mike Dilger
parent b4fbff9264
commit bd1ca5992c
6 changed files with 60 additions and 14 deletions

4
Cargo.lock generated
View File

@ -1722,7 +1722,7 @@ dependencies = [
[[package]]
name = "gossip-relay-picker"
version = "0.2.0-unstable"
source = "git+https://github.com/mikedilger/gossip-relay-picker?rev=4648e7b6dc74e52df0a7cc00a5814f689a8a9d3c#4648e7b6dc74e52df0a7cc00a5814f689a8a9d3c"
source = "git+https://github.com/mikedilger/gossip-relay-picker?rev=18a8cb0648bbe48d55fb5c73d5a2a9ced9a1698b#18a8cb0648bbe48d55fb5c73d5a2a9ced9a1698b"
dependencies = [
"async-trait",
"dashmap",
@ -2449,7 +2449,7 @@ dependencies = [
[[package]]
name = "nostr-types"
version = "0.6.0-unstable"
source = "git+https://github.com/mikedilger/nostr-types?rev=3066f3dbe95c98ce5527777412db289b266d1f4a#3066f3dbe95c98ce5527777412db289b266d1f4a"
source = "git+https://github.com/mikedilger/nostr-types?rev=3ecc9250f15962abe479d6d41a42b98a97ccf8b6#3ecc9250f15962abe479d6d41a42b98a97ccf8b6"
dependencies = [
"aes",
"base64 0.21.0",

View File

@ -29,7 +29,7 @@ encoding_rs = "0.8"
fallible-iterator = "0.2"
futures = "0.3"
futures-util = "0.3"
gossip-relay-picker = { git = "https://github.com/mikedilger/gossip-relay-picker", rev = "4648e7b6dc74e52df0a7cc00a5814f689a8a9d3c" }
gossip-relay-picker = { git = "https://github.com/mikedilger/gossip-relay-picker", rev = "18a8cb0648bbe48d55fb5c73d5a2a9ced9a1698b" }
hex = "0.4"
http = "0.2"
humansize = "2.1"
@ -38,7 +38,7 @@ lazy_static = "1.4"
linkify = "0.9"
memoize = "0.4"
mime = "0.3"
nostr-types = { git = "https://github.com/mikedilger/nostr-types", rev = "3066f3dbe95c98ce5527777412db289b266d1f4a" }
nostr-types = { git = "https://github.com/mikedilger/nostr-types", rev = "3ecc9250f15962abe479d6d41a42b98a97ccf8b6" }
parking_lot = "0.12"
qrcode = { git = "https://github.com/mikedilger/qrcode-rust", rev = "519b77b3efa3f84961169b47d3de08c5ddd86548" }
rand = "0.8"

View File

@ -148,7 +148,7 @@ impl Minion {
content: "".to_string(),
ots: None,
};
let event = GLOBALS.signer.sign_preevent(pre_event, None)?;
let event = GLOBALS.signer.sign_preevent(pre_event, None, None)?;
let msg = ClientMessage::Auth(Box::new(event));
let wire = serde_json::to_string(&msg)?;
let ws_sink = self.sink.as_mut().unwrap();

View File

@ -17,6 +17,7 @@ use nostr_types::{
};
use std::collections::HashMap;
use std::sync::atomic::Ordering;
use std::sync::mpsc;
use tokio::sync::broadcast::Sender;
use tokio::sync::mpsc::UnboundedReceiver;
use tokio::{select, task};
@ -903,7 +904,15 @@ impl Overlord {
let powint = GLOBALS.settings.read().pow;
let pow = if powint > 0 { Some(powint) } else { None };
GLOBALS.signer.sign_preevent(pre_event, pow)?
let (work_sender, work_receiver) = mpsc::channel();
let event = GLOBALS
.signer
.sign_preevent(pre_event, pow, Some(work_sender))?;
work_logger(&work_receiver, powint).await;
event
};
// Process this event locally
@ -986,7 +995,7 @@ impl Overlord {
ots: None,
};
let event = GLOBALS.signer.sign_preevent(pre_event, None)?;
let event = GLOBALS.signer.sign_preevent(pre_event, None, None)?;
let advertise_to_relay_urls: Vec<RelayUrl> = GLOBALS.relays_url_filtered(|r| r.advertise);
@ -1051,7 +1060,15 @@ impl Overlord {
let powint = GLOBALS.settings.read().pow;
let pow = if powint > 0 { Some(powint) } else { None };
GLOBALS.signer.sign_preevent(pre_event, pow)?
let (work_sender, work_receiver) = mpsc::channel();
let event = GLOBALS
.signer
.sign_preevent(pre_event, pow, Some(work_sender))?;
work_logger(&work_receiver, powint).await;
event
};
let relays: Vec<DbRelay> = GLOBALS.relays_filtered(|r| r.write);
@ -1143,7 +1160,7 @@ impl Overlord {
ots: None,
};
let event = GLOBALS.signer.sign_preevent(pre_event, None)?;
let event = GLOBALS.signer.sign_preevent(pre_event, None, None)?;
// Push to all of the relays we post to
let relays: Vec<DbRelay> = GLOBALS.relays_filtered(|r| r.write);
@ -1258,7 +1275,15 @@ impl Overlord {
let powint = GLOBALS.settings.read().pow;
let pow = if powint > 0 { Some(powint) } else { None };
GLOBALS.signer.sign_preevent(pre_event, pow)?
let (work_sender, work_receiver) = mpsc::channel();
let event = GLOBALS
.signer
.sign_preevent(pre_event, pow, Some(work_sender))?;
work_logger(&work_receiver, powint).await;
event
};
// Process this event locally
@ -1515,7 +1540,7 @@ impl Overlord {
};
// Should we add a pow? Maybe the relay needs it.
GLOBALS.signer.sign_preevent(pre_event, None)?
GLOBALS.signer.sign_preevent(pre_event, None, None)?
};
// Process this event locally
@ -1643,3 +1668,17 @@ impl Overlord {
Ok(())
}
}
async fn work_logger(work_receiver: &mpsc::Receiver<u8>, powint: u8) {
loop {
if let Ok(work) = work_receiver.recv() {
*GLOBALS.status_message.write().await = format!("PoW: {work}/{powint}");
if work >= powint {
*GLOBALS.status_message.write().await =
format!("Message sent with {work} bits of work computed.");
break;
}
}
}
}

View File

@ -822,7 +822,7 @@ impl People {
ots: None,
};
GLOBALS.signer.sign_preevent(pre_event, None)
GLOBALS.signer.sign_preevent(pre_event, None, None)
}
pub fn follow(&self, pubkeyhex: &PublicKeyHex, follow: bool) {

View File

@ -1,3 +1,5 @@
use std::sync::mpsc::Sender;
use crate::error::{Error, ErrorKind};
use crate::globals::GLOBALS;
use nostr_types::{EncryptedPrivateKey, Event, KeySecurity, PreEvent, PrivateKey, PublicKey};
@ -155,10 +157,15 @@ impl Signer {
self.private.read().as_ref().map(|pk| pk.key_security())
}
pub fn sign_preevent(&self, preevent: PreEvent, pow: Option<u8>) -> Result<Event, Error> {
pub fn sign_preevent(
&self,
preevent: PreEvent,
pow: Option<u8>,
work_sender: Option<Sender<u8>>,
) -> Result<Event, Error> {
match &*self.private.read() {
Some(pk) => match pow {
Some(pow) => Ok(Event::new_with_pow(preevent, pk, pow, None)?),
Some(pow) => Ok(Event::new_with_pow(preevent, pk, pow, work_sender)?),
None => Ok(Event::new(preevent, pk)?),
},
_ => Err((ErrorKind::NoPrivateKey, file!(), line!()).into()),