mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-29 08:21:47 +00:00
Log Proof of Work.
This commit is contained in:
parent
b4fbff9264
commit
bd1ca5992c
4
Cargo.lock
generated
4
Cargo.lock
generated
@ -1722,7 +1722,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "gossip-relay-picker"
|
name = "gossip-relay-picker"
|
||||||
version = "0.2.0-unstable"
|
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 = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"dashmap",
|
"dashmap",
|
||||||
@ -2449,7 +2449,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "nostr-types"
|
name = "nostr-types"
|
||||||
version = "0.6.0-unstable"
|
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 = [
|
dependencies = [
|
||||||
"aes",
|
"aes",
|
||||||
"base64 0.21.0",
|
"base64 0.21.0",
|
||||||
|
@ -29,7 +29,7 @@ encoding_rs = "0.8"
|
|||||||
fallible-iterator = "0.2"
|
fallible-iterator = "0.2"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
futures-util = "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"
|
hex = "0.4"
|
||||||
http = "0.2"
|
http = "0.2"
|
||||||
humansize = "2.1"
|
humansize = "2.1"
|
||||||
@ -38,7 +38,7 @@ lazy_static = "1.4"
|
|||||||
linkify = "0.9"
|
linkify = "0.9"
|
||||||
memoize = "0.4"
|
memoize = "0.4"
|
||||||
mime = "0.3"
|
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"
|
parking_lot = "0.12"
|
||||||
qrcode = { git = "https://github.com/mikedilger/qrcode-rust", rev = "519b77b3efa3f84961169b47d3de08c5ddd86548" }
|
qrcode = { git = "https://github.com/mikedilger/qrcode-rust", rev = "519b77b3efa3f84961169b47d3de08c5ddd86548" }
|
||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
|
@ -148,7 +148,7 @@ impl Minion {
|
|||||||
content: "".to_string(),
|
content: "".to_string(),
|
||||||
ots: None,
|
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 msg = ClientMessage::Auth(Box::new(event));
|
||||||
let wire = serde_json::to_string(&msg)?;
|
let wire = serde_json::to_string(&msg)?;
|
||||||
let ws_sink = self.sink.as_mut().unwrap();
|
let ws_sink = self.sink.as_mut().unwrap();
|
||||||
|
@ -17,6 +17,7 @@ use nostr_types::{
|
|||||||
};
|
};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::atomic::Ordering;
|
use std::sync::atomic::Ordering;
|
||||||
|
use std::sync::mpsc;
|
||||||
use tokio::sync::broadcast::Sender;
|
use tokio::sync::broadcast::Sender;
|
||||||
use tokio::sync::mpsc::UnboundedReceiver;
|
use tokio::sync::mpsc::UnboundedReceiver;
|
||||||
use tokio::{select, task};
|
use tokio::{select, task};
|
||||||
@ -903,7 +904,15 @@ impl Overlord {
|
|||||||
|
|
||||||
let powint = GLOBALS.settings.read().pow;
|
let powint = GLOBALS.settings.read().pow;
|
||||||
let pow = if powint > 0 { Some(powint) } else { None };
|
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
|
// Process this event locally
|
||||||
@ -986,7 +995,7 @@ impl Overlord {
|
|||||||
ots: None,
|
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);
|
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 powint = GLOBALS.settings.read().pow;
|
||||||
let pow = if powint > 0 { Some(powint) } else { None };
|
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);
|
let relays: Vec<DbRelay> = GLOBALS.relays_filtered(|r| r.write);
|
||||||
@ -1143,7 +1160,7 @@ impl Overlord {
|
|||||||
ots: None,
|
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
|
// Push to all of the relays we post to
|
||||||
let relays: Vec<DbRelay> = GLOBALS.relays_filtered(|r| r.write);
|
let relays: Vec<DbRelay> = GLOBALS.relays_filtered(|r| r.write);
|
||||||
@ -1258,7 +1275,15 @@ impl Overlord {
|
|||||||
|
|
||||||
let powint = GLOBALS.settings.read().pow;
|
let powint = GLOBALS.settings.read().pow;
|
||||||
let pow = if powint > 0 { Some(powint) } else { None };
|
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
|
// Process this event locally
|
||||||
@ -1515,7 +1540,7 @@ impl Overlord {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Should we add a pow? Maybe the relay needs it.
|
// 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
|
// Process this event locally
|
||||||
@ -1643,3 +1668,17 @@ impl Overlord {
|
|||||||
Ok(())
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -822,7 +822,7 @@ impl People {
|
|||||||
ots: None,
|
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) {
|
pub fn follow(&self, pubkeyhex: &PublicKeyHex, follow: bool) {
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
use std::sync::mpsc::Sender;
|
||||||
|
|
||||||
use crate::error::{Error, ErrorKind};
|
use crate::error::{Error, ErrorKind};
|
||||||
use crate::globals::GLOBALS;
|
use crate::globals::GLOBALS;
|
||||||
use nostr_types::{EncryptedPrivateKey, Event, KeySecurity, PreEvent, PrivateKey, PublicKey};
|
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())
|
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() {
|
match &*self.private.read() {
|
||||||
Some(pk) => match pow {
|
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)?),
|
None => Ok(Event::new(preevent, pk)?),
|
||||||
},
|
},
|
||||||
_ => Err((ErrorKind::NoPrivateKey, file!(), line!()).into()),
|
_ => Err((ErrorKind::NoPrivateKey, file!(), line!()).into()),
|
||||||
|
Loading…
Reference in New Issue
Block a user