mirror of
https://github.com/uqbar-dao/nectar.git
synced 2024-12-22 16:11:38 +03:00
Merge branch 'main' into hf/towards-a-working-spawn
This commit is contained in:
commit
1344984f94
7
Cargo.lock
generated
7
Cargo.lock
generated
@ -525,14 +525,16 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chrono"
|
name = "chrono"
|
||||||
version = "0.4.30"
|
version = "0.4.31"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877"
|
checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android-tzdata",
|
"android-tzdata",
|
||||||
"iana-time-zone",
|
"iana-time-zone",
|
||||||
|
"js-sys",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"serde",
|
"serde",
|
||||||
|
"wasm-bindgen",
|
||||||
"windows-targets",
|
"windows-targets",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -4829,6 +4831,7 @@ dependencies = [
|
|||||||
"bytes",
|
"bytes",
|
||||||
"cap-std",
|
"cap-std",
|
||||||
"chacha20poly1305",
|
"chacha20poly1305",
|
||||||
|
"chrono",
|
||||||
"cita_trie",
|
"cita_trie",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
"digest 0.10.7",
|
"digest 0.10.7",
|
||||||
|
@ -21,6 +21,7 @@ blake3 = "1.4.1"
|
|||||||
bytes = "1.4.0"
|
bytes = "1.4.0"
|
||||||
cap-std = "2.0.0"
|
cap-std = "2.0.0"
|
||||||
chacha20poly1305 = "0.10.1"
|
chacha20poly1305 = "0.10.1"
|
||||||
|
chrono = "0.4.31"
|
||||||
cita_trie = "4.0.0"
|
cita_trie = "4.0.0"
|
||||||
crossterm = { version = "0.26.1", features = ["event-stream", "bracketed-paste"] }
|
crossterm = { version = "0.26.1", features = ["event-stream", "bracketed-paste"] }
|
||||||
digest = "0.10"
|
digest = "0.10"
|
||||||
|
@ -31,7 +31,7 @@ If you do not receive QNS updates in terminal, it's a sign that the default publ
|
|||||||
|
|
||||||
Also, make sure not to use the same home directory for two nodes at once! You can use any name for the home directory.
|
Also, make sure not to use the same home directory for two nodes at once! You can use any name for the home directory.
|
||||||
```bash
|
```bash
|
||||||
cargo +nightly run --release home
|
cargo +nightly run --release home --rpc wss://eth-sepolia.g.alchemy.com/v2/<your-api-key>
|
||||||
```
|
```
|
||||||
|
|
||||||
On boot you will be prompted to navigate to `localhost:8080`. Make sure your eth wallet is connected to the Sepolia test network. Login should be very straightforward, just submit the transactions and follow the flow.
|
On boot you will be prompted to navigate to `localhost:8080`. Make sure your eth wallet is connected to the Sepolia test network. Login should be very straightforward, just submit the transactions and follow the flow.
|
||||||
|
@ -526,42 +526,42 @@ impl Guest for Component {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if !auth_success {
|
// if !auth_success {
|
||||||
print_to_terminal(1, "http_bindings: failure to authenticate");
|
// print_to_terminal(1, "http_bindings: failure to authenticate");
|
||||||
let proxy_path = message_json["proxy_path"].as_str();
|
// let proxy_path = message_json["proxy_path"].as_str();
|
||||||
|
|
||||||
let redirect_path: String = match proxy_path {
|
// let redirect_path: String = match proxy_path {
|
||||||
Some(pp) => {
|
// Some(pp) => {
|
||||||
form_urlencoded::byte_serialize(pp.as_bytes()).collect()
|
// form_urlencoded::byte_serialize(pp.as_bytes()).collect()
|
||||||
}
|
// }
|
||||||
None => {
|
// None => {
|
||||||
form_urlencoded::byte_serialize(path.as_bytes()).collect()
|
// form_urlencoded::byte_serialize(path.as_bytes()).collect()
|
||||||
}
|
// }
|
||||||
};
|
// };
|
||||||
|
|
||||||
let location = match proxy_path {
|
// let location = match proxy_path {
|
||||||
Some(_) => format!(
|
// Some(_) => format!(
|
||||||
"/http-proxy/serve/{}/login?redirect={}",
|
// "/http-proxy/serve/{}/login?redirect={}",
|
||||||
&our.node, redirect_path
|
// &our.node, redirect_path
|
||||||
),
|
// ),
|
||||||
None => format!("/login?redirect={}", redirect_path),
|
// None => format!("/login?redirect={}", redirect_path),
|
||||||
};
|
// };
|
||||||
|
|
||||||
send_http_response(
|
// send_http_response(
|
||||||
302,
|
// 302,
|
||||||
{
|
// {
|
||||||
let mut headers = HashMap::new();
|
// let mut headers = HashMap::new();
|
||||||
headers.insert(
|
// headers.insert(
|
||||||
"Content-Type".to_string(),
|
// "Content-Type".to_string(),
|
||||||
"text/html".to_string(),
|
// "text/html".to_string(),
|
||||||
);
|
// );
|
||||||
headers.insert("Location".to_string(), location);
|
// headers.insert("Location".to_string(), location);
|
||||||
headers
|
// headers
|
||||||
},
|
// },
|
||||||
"Auth cookie not valid".as_bytes().to_vec(),
|
// "Auth cookie not valid".as_bytes().to_vec(),
|
||||||
);
|
// );
|
||||||
continue;
|
// continue;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
if bound_path.local_only && !address.starts_with("127.0.0.1:") {
|
if bound_path.local_only && !address.starts_with("127.0.0.1:") {
|
||||||
|
@ -8,6 +8,7 @@ use hex;
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::string::FromUtf8Error;
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
mod process_lib;
|
mod process_lib;
|
||||||
@ -259,23 +260,17 @@ impl UqProcess for Component {
|
|||||||
// bindings::print_to_terminal(0, format!("qns_indexer: got NodeRegistered event: {:?}", e).as_str());
|
// bindings::print_to_terminal(0, format!("qns_indexer: got NodeRegistered event: {:?}", e).as_str());
|
||||||
|
|
||||||
let node = &e.topics[1];
|
let node = &e.topics[1];
|
||||||
let decoded =
|
let decoded = NodeRegistered::decode_data(&decode_hex_to_vec(&e.data), true).unwrap();
|
||||||
NodeRegistered::decode_data(&decode_hex_to_vec(&e.data), true)
|
let Ok(name) = dnswire_decode(decoded.0.clone()) else {
|
||||||
.unwrap();
|
bindings::print_to_terminal(0, &format!("qns_indexer: failed to decode name: {:?}", decoded.0));
|
||||||
let name = dnswire_decode(decoded.0);
|
continue;
|
||||||
|
};
|
||||||
// bindings::print_to_terminal(0, format!("qns_indexer: NODE1: {:?}", node).as_str());
|
|
||||||
// bindings::print_to_terminal(0, format!("qns_indexer: NAME: {:?}", name.to_string()).as_str());
|
|
||||||
|
|
||||||
state.names.insert(node.to_string(), name);
|
state.names.insert(node.to_string(), name);
|
||||||
}
|
}
|
||||||
WsChanged::SIGNATURE_HASH => {
|
WsChanged::SIGNATURE_HASH => {
|
||||||
// bindings::print_to_terminal(0, format!("qns_indexer: got WsChanged event: {:?}", e).as_str());
|
|
||||||
|
|
||||||
let node = &e.topics[1];
|
let node = &e.topics[1];
|
||||||
// bindings::print_to_terminal(0, format!("qns_indexer: NODE2: {:?}", node.to_string()).as_str());
|
let decoded = WsChanged::decode_data(&decode_hex_to_vec(&e.data), true).unwrap();
|
||||||
let decoded =
|
|
||||||
WsChanged::decode_data(&decode_hex_to_vec(&e.data), true).unwrap();
|
|
||||||
let public_key = hex::encode(decoded.0);
|
let public_key = hex::encode(decoded.0);
|
||||||
let ip = decoded.1;
|
let ip = decoded.1;
|
||||||
let port = decoded.2;
|
let port = decoded.2;
|
||||||
@ -291,12 +286,10 @@ impl UqProcess for Component {
|
|||||||
})
|
})
|
||||||
.collect::<Vec<String>>();
|
.collect::<Vec<String>>();
|
||||||
|
|
||||||
let name = state.names.get(node).unwrap();
|
let Some(name) = state.names.get(node) else {
|
||||||
// bindings::print_to_terminal(0, format!("qns_indexer: NAME: {:?}", name).as_str());
|
bindings::print_to_terminal(0, &format!("qns_indexer: failed to find name for node during WsChanged: {:?}", node));
|
||||||
// bindings::print_to_terminal(0, format!("qns_indexer: DECODED: {:?}", decoded).as_str());
|
continue;
|
||||||
// bindings::print_to_terminal(0, format!("qns_indexer: PUB KEY: {:?}", public_key).as_str());
|
};
|
||||||
// bindings::print_to_terminal(0, format!("qns_indexer: IP PORT: {:?} {:?}", ip, port).as_str());
|
|
||||||
// bindings::print_to_terminal(0, format!("qns_indexer: ROUTERS: {:?}", routers).as_str());
|
|
||||||
|
|
||||||
let update = QnsUpdate {
|
let update = QnsUpdate {
|
||||||
name: name.clone(),
|
name: name.clone(),
|
||||||
@ -378,7 +371,7 @@ fn hex_to_u64(hex: &str) -> Result<u64, std::num::ParseIntError> {
|
|||||||
u64::from_str_radix(without_prefix, 16)
|
u64::from_str_radix(without_prefix, 16)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dnswire_decode(wire_format_bytes: Vec<u8>) -> String {
|
fn dnswire_decode(wire_format_bytes: Vec<u8>) -> Result<String, FromUtf8Error> {
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
let mut result = Vec::new();
|
let mut result = Vec::new();
|
||||||
|
|
||||||
@ -396,12 +389,12 @@ fn dnswire_decode(wire_format_bytes: Vec<u8>) -> String {
|
|||||||
|
|
||||||
let flat: Vec<_> = result.into_iter().flatten().collect();
|
let flat: Vec<_> = result.into_iter().flatten().collect();
|
||||||
|
|
||||||
let name = String::from_utf8(flat).unwrap();
|
let name = String::from_utf8(flat)?;
|
||||||
|
|
||||||
// Remove the trailing '.' if it exists (it should always exist)
|
// Remove the trailing '.' if it exists (it should always exist)
|
||||||
if name.ends_with('.') {
|
if name.ends_with('.') {
|
||||||
name[0..name.len() - 1].to_string()
|
Ok(name[0..name.len()-1].to_string())
|
||||||
} else {
|
} else {
|
||||||
name
|
Ok(name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"files": {
|
"files": {
|
||||||
"main.css": "/static/css/main.9b4dbe66.css",
|
"main.css": "/static/css/main.9b4dbe66.css",
|
||||||
"main.js": "/static/js/main.f54b619d.js",
|
"main.js": "/static/js/main.321651c6.js",
|
||||||
"index.html": "/index.html",
|
"index.html": "/index.html",
|
||||||
"main.9b4dbe66.css.map": "/static/css/main.9b4dbe66.css.map",
|
"main.9b4dbe66.css.map": "/static/css/main.9b4dbe66.css.map",
|
||||||
"main.f54b619d.js.map": "/static/js/main.f54b619d.js.map"
|
"main.321651c6.js.map": "/static/js/main.321651c6.js.map"
|
||||||
},
|
},
|
||||||
"entrypoints": [
|
"entrypoints": [
|
||||||
"static/css/main.9b4dbe66.css",
|
"static/css/main.9b4dbe66.css",
|
||||||
"static/js/main.f54b619d.js"
|
"static/js/main.321651c6.js"
|
||||||
]
|
]
|
||||||
}
|
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
src/register_app/static/js/main.321651c6.js.map
Normal file
1
src/register_app/static/js/main.321651c6.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,5 +1,6 @@
|
|||||||
use crate::types::*;
|
use crate::types::*;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use chrono::{Datelike, Local, Timelike};
|
||||||
use crossterm::{
|
use crossterm::{
|
||||||
cursor,
|
cursor,
|
||||||
event::{
|
event::{
|
||||||
@ -188,7 +189,8 @@ pub async fn terminal(
|
|||||||
// aaa
|
// aaa
|
||||||
prints = print_rx.recv() => match prints {
|
prints = print_rx.recv() => match prints {
|
||||||
Some(printout) => {
|
Some(printout) => {
|
||||||
let _ = writeln!(log_writer, "{}", printout.content);
|
let now = Local::now();
|
||||||
|
let _ = writeln!(log_writer, "{} {}", now.to_rfc2822(), printout.content);
|
||||||
if match printout.verbosity {
|
if match printout.verbosity {
|
||||||
0 => false,
|
0 => false,
|
||||||
1 => !verbose_mode,
|
1 => !verbose_mode,
|
||||||
@ -200,7 +202,14 @@ pub async fn terminal(
|
|||||||
execute!(
|
execute!(
|
||||||
stdout,
|
stdout,
|
||||||
cursor::MoveTo(0, win_rows - 1),
|
cursor::MoveTo(0, win_rows - 1),
|
||||||
terminal::Clear(ClearType::CurrentLine)
|
terminal::Clear(ClearType::CurrentLine),
|
||||||
|
Print(format!("{} {}/{} {:02}:{:02} ",
|
||||||
|
now.weekday(),
|
||||||
|
now.month(),
|
||||||
|
now.day(),
|
||||||
|
now.hour(),
|
||||||
|
now.minute(),
|
||||||
|
)),
|
||||||
)?;
|
)?;
|
||||||
for line in printout.content.lines() {
|
for line in printout.content.lines() {
|
||||||
execute!(
|
execute!(
|
||||||
|
Loading…
Reference in New Issue
Block a user