From 5a68bccd3a0d4dfa02561016d942ddbccca5ae4c Mon Sep 17 00:00:00 2001
From: hinto-janaiyo <hinto.janaiyo@protonmail.com>
Date: Mon, 23 Jan 2023 17:05:34 -0500
Subject: [PATCH] node: add seed nodes, change ping color

---
 CHANGELOG.md | 13 ++++++++----
 README.md    | 45 +++++++++++++++++++++--------------------
 src/node.rs  | 56 +++++++++++++++++++++++++++++++---------------------
 3 files changed, 67 insertions(+), 47 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5167ade..29617b5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,11 +1,16 @@
 # v1.1.1
 ## Updates
-* Added [`nodes.hashvault.pro`](https://hashvault.pro) to [Community Monero Nodes](https://github.com/hinto-janaiyo/gupax#community-monero-nodes) list
-* Added [`node.moneroworld.com`](https://moneroworld.com) to [Community Monero Nodes](https://github.com/hinto-janaiyo/gupax#community-monero-nodes) list
-* Added warning in `[P2Pool Simple]` tab about using remote nodes
+* **Nodes:** Added 5 nodes to [Community Monero Nodes](https://github.com/hinto-janaiyo/gupax#community-monero-nodes) list:
+	- `nodes.hashvault.pro`
+	- `node.moneroworld.com`
+	- `uwillrunanodesoon.moneroworld.com`
+	- `176.9.0.187` [(Monero seed node)](https://github.com/monero-project/monero/blob/release-v0.18/src/p2p/net_node.inl#L708)
+	- `51.79.173.165` [(Monero seed node)](https://github.com/monero-project/monero/blob/release-v0.18/src/p2p/net_node.inl#L715)
+* **P2Pool:** Added warning in `[P2Pool Simple]` tab about using remote nodes
 
 ## Fixes
-* Top/Bottom bars are smaller, fixes some UI overflowing or being cramped
+* **UI:** Top/Bottom bars are smaller, fixes some UI overflowing or being cramped
+* **Nodes:** Node ping colors are more strict (<200ms = GREEN, 200ms-499ms = YELLOW, >500ms = RED) 
 
 ## Bundled Versions
 * [`P2Pool v3.0`](https://github.com/SChernykh/p2pool/releases/tag/v3.0)
diff --git a/README.md b/README.md
index 4d41f0d..484bd54 100644
--- a/README.md
+++ b/README.md
@@ -525,27 +525,30 @@ In general, a suitable node needs to:
 - Have ZMQ enabled
 - Have an owner known by the general Monero community
 
-| Name                                                  | Owner Type | IP/Domain                        | RPC Port | ZMQ Port |
-|-------------------------------------------------------|------------|----------------------------------|----------|----------|
-| [C3pool](https://www.c3pool.com)                      | Pool       | node.c3pool.com                  | 18081    | 18083    |
-| [Cake](https://cakewallet.com)                        | Wallet     | xmr-node.cakewallet.com          | 18081    | 18083    |
-| [CakeEu](https://cakewallet.com)                      | Wallet     | xmr-node-eu.cakewallet.com       | 18081    | 18083    |
-| [CakeUk](https://cakewallet.com)                      | Wallet     | xmr-node-uk.cakewallet.com       | 18081    | 18083    |
-| [CakeUs](https://cakewallet.com)                      | Wallet     | xmr-node-usa-east.cakewallet.com | 18081    | 18083    |
-| [Feather1](https://github.com/feather-wallet/feather) | Wallet     | selsta1.featherwallet.net        | 18081    | 18083    |
-| [Feather2](https://github.com/feather-wallet/feather) | Wallet     | selsta2.featherwallet.net        | 18081    | 18083    |
-| [HashVault](https://hashvault.pro)                    | Pool       | nodes.hashvault.pro              | 18081    | 18083    |
-| [MajesticBankIs](https://www.majesticbank.sc)         | Exchange   | node.majesticbank.is             | 18089    | 18083    |
-| [MajesticBankSu](https://www.majesticbank.sc)         | Exchange   | node.majesticbank.su             | 18089    | 18083    |
-| [MoneroWorld](https://moneroworld.com)                | Individual | node.moneroworld.com             | 18089    | 18083    |
-| [Monerujo](https://www.monerujo.io)                   | Wallet     | nodex.monerujo.io                | 18081    | 18083    |
-| [Plowsof1](https://github.com/plowsof)                | Individual | node.monerodevs.org              | 18089    | 18084    |
-| [Plowsof2](https://github.com/plowsof)                | Individual | node2.monerodevs.org             | 18089    | 18084    |
-| [Rino](https://rino.io)                               | Wallet     | node.community.rino.io           | 18081    | 18083    |
-| [Seth](https://github.com/sethforprivacy)             | Individual | node.sethforprivacy.com          | 18089    | 18083    |
-| [SupportXmr](https://www.supportxmr.com)              | Pool       | node.supportxmr.com              | 18081    | 18083    |
-| [SupportXmrIr](https://www.supportxmr.com)            | Pool       | node.supportxmr.ir               | 18089    | 18083    |
-| [XmrVsBeast](https://xmrvsbeast.com)                  | Pool       | p2pmd.xmrvsbeast.com             | 18081    | 18083    |
+| Name           | Owner                                             | Owner Type | IP/Domain                         | RPC Port | ZMQ Port |
+|----------------|---------------------------------------------------|------------|-----------------------------------|----------|----------|
+| C3pool         | [C3pool](https://www.c3pool.com)                  | Pool       | node.c3pool.com                   | 18081    | 18083    |
+| Cake           | [Cake](https://cakewallet.com)                    | Wallet     | xmr-node.cakewallet.com           | 18081    | 18083    |
+| CakeEu         | [Cake](https://cakewallet.com)                    | Wallet     | xmr-node-eu.cakewallet.com        | 18081    | 18083    |
+| CakeUk         | [Cake](https://cakewallet.com)                    | Wallet     | xmr-node-uk.cakewallet.com        | 18081    | 18083    |
+| CakeUs         | [Cake](https://cakewallet.com)                    | Wallet     | xmr-node-usa-east.cakewallet.com  | 18081    | 18083    |
+| Feather1       | [Feather](https://featherwallet.org)              | Wallet     | selsta1.featherwallet.net         | 18081    | 18083    |
+| Feather2       | [Feather](https://featherwallet.org)              | Wallet     | selsta2.featherwallet.net         | 18081    | 18083    |
+| HashVault      | [HashVault](https://hashvault.pro)                | Pool       | nodes.hashvault.pro               | 18081    | 18083    |
+| MajesticBankIs | [MajesticBank](https://www.majesticbank.sc)       | Exchange   | node.majesticbank.is              | 18089    | 18083    |
+| MajesticBankSu | [MajesticBank](https://www.majesticbank.sc)       | Exchange   | node.majesticbank.su              | 18089    | 18083    |
+| MoneroSeed1    | [Monero](https://github.com/monero-project/monero/blob/release-v0.18/src/p2p/net_node.inl#L708) | Seed Node | 176.9.0.187   | 18089 | 18083 |
+| MoneroSeed2    | [Monero](https://github.com/monero-project/monero/blob/release-v0.18/src/p2p/net_node.inl#L715) | Seed Node | 51.79.173.165 | 18089 | 18083 |
+| MoneroWorld1   | [Gingeropolous](https://github.com/Gingeropolous) | Individual | node.moneroworld.com              | 18089    | 18083    |
+| MoneroWorld2   | [Gingeropolous](https://github.com/Gingeropolous) | Individual | uwillrunanodesoon.moneroworld.com | 18089    | 18083    |
+| Monerujo       | [Monerujo](https://www.monerujo.io)               | Wallet     | nodex.monerujo.io                 | 18081    | 18083    |
+| Plowsof1       | [Plowsof](https://github.com/plowsof)             | Individual | node.monerodevs.org               | 18089    | 18084    |
+| Plowsof2       | [Plowsof](https://github.com/plowsof)             | Individual | node2.monerodevs.org              | 18089    | 18084    |
+| Rino           | [Rino](https://rino.io)                           | Wallet     | node.community.rino.io            | 18081    | 18083    |
+| Seth           | [Seth](https://github.com/sethforprivacy)         | Individual | node.sethforprivacy.com           | 18089    | 18083    |
+| SupportXmr     | [SupportXMR](https://www.supportxmr.com)          | Pool       | node.supportxmr.com               | 18081    | 18083    |
+| SupportXmrIr   | [SupportXMR](https://www.supportxmr.com)          | Pool       | node.supportxmr.ir                | 18089    | 18083    |
+| XmrVsBeast     | [XMRvsBeast](https://xmrvsbeast.com)              | Pool       | p2pmd.xmrvsbeast.com              | 18081    | 18083    |
 
 ## Build
 ### General Info
diff --git a/src/node.rs b/src/node.rs
index 88c84fc..2a81c35 100644
--- a/src/node.rs
+++ b/src/node.rs
@@ -45,7 +45,10 @@ pub const FEATHER_2: &str = "selsta2.featherwallet.net:18081";
 pub const HASHVAULT: &str = "nodes.hashvault.pro:18081";
 pub const MAJESTICBANK_IS: &str = "node.majesticbank.is:18089";
 pub const MAJESTICBANK_SU: &str = "node.majesticbank.su:18089";
-pub const MONEROWORLD: &str = "node.moneroworld.com:18089";
+pub const MONEROSEED_1: &str = "176.9.0.187:18089";
+pub const MONEROSEED_2: &str = "51.79.173.165:18089";
+pub const MONEROWORLD_1: &str = "node.moneroworld.com:18089";
+pub const MONEROWORLD_2: &str = "uwillrunanodesoon.moneroworld.com:18089";
 pub const MONERUJO: &str = "nodex.monerujo.io:18081";
 pub const PLOWSOF_1: &str = "node.monerodevs.org:18089"; // ZMQ = 18084
 pub const PLOWSOF_2: &str = "node2.monerodevs.org:18089"; // ZMQ = 18084
@@ -55,9 +58,9 @@ pub const SUPPORTXMR: &str = "node.supportxmr.com:18081";
 pub const SUPPORTXMR_IR: &str = "node.supportxmr.ir:18081";
 pub const XMRVSBEAST: &str = "p2pmd.xmrvsbeast.com:18081";
 
-pub const NODE_IPS: [&str; 19] = [
-	C3POOL,CAKE,CAKE_EU,CAKE_UK,CAKE_US,FEATHER_1,FEATHER_2,HASHVAULT,MAJESTICBANK_IS,MAJESTICBANK_SU,
-	MONEROWORLD,MONERUJO,PLOWSOF_1,PLOWSOF_2,RINO,SETH,SUPPORTXMR,SUPPORTXMR_IR,XMRVSBEAST,
+pub const NODE_IPS: [&str; 22] = [
+	C3POOL,CAKE,CAKE_EU,CAKE_UK,CAKE_US,FEATHER_1,FEATHER_2,HASHVAULT,MAJESTICBANK_IS,MAJESTICBANK_SU,MONEROSEED_1,MONEROSEED_2,
+	MONEROWORLD_1,MONEROWORLD_2,MONERUJO,PLOWSOF_1,PLOWSOF_2,RINO,SETH,SUPPORTXMR,SUPPORTXMR_IR,XMRVSBEAST,
 ];
 
 pub const COMMUNITY_NODE_LENGTH: usize = NODE_IPS.len();
@@ -65,8 +68,8 @@ pub const COMMUNITY_NODE_MAX_CHARS: usize = 14;
 
 #[derive(Copy,Clone,Eq,PartialEq,Debug,Deserialize,Serialize)]
 pub enum NodeEnum {
-	C3pool,Cake,CakeEu,CakeUk,CakeUs,MajesticBankIs,MajesticBankSu,MoneroWorld,Monerujo,Plowsof1,
-	Plowsof2,Rino,Feather1,Feather2,HashVault,Seth,SupportXmr,SupportXmrIr,XmrVsBeast,
+	C3pool,Cake,CakeEu,CakeUk,CakeUs,MajesticBankIs,MajesticBankSu,MoneroSeed1,MoneroSeed2,MoneroWorld1,MoneroWorld2,
+	Monerujo,Plowsof1,Plowsof2,Rino,Feather1,Feather2,HashVault,Seth,SupportXmr,SupportXmrIr,XmrVsBeast,
 }
 
 impl Default for NodeEnum {
@@ -92,15 +95,18 @@ impl NodeEnum {
 			HashVault      => 7,
 			MajesticBankIs => 8,
 			MajesticBankSu => 9,
-			MoneroWorld    => 10,
-			Monerujo       => 11,
-			Plowsof1       => 12,
-			Plowsof2       => 13,
-			Rino           => 14,
-			Seth           => 15,
-			SupportXmr     => 16,
-			SupportXmrIr   => 17,
-			_              => 18,
+			MoneroSeed1    => 10,
+			MoneroSeed2    => 11,
+			MoneroWorld1   => 12,
+			MoneroWorld2   => 13,
+			Monerujo       => 14,
+			Plowsof1       => 15,
+			Plowsof2       => 16,
+			Rino           => 17,
+			Seth           => 18,
+			SupportXmr     => 19,
+			SupportXmrIr   => 20,
+			_              => 21,
 		}
 	}
 
@@ -200,7 +206,10 @@ pub fn ip_to_enum(ip: &'static str) -> NodeEnum {
 		HASHVAULT       => HashVault,
 		MAJESTICBANK_IS => MajesticBankIs,
 		MAJESTICBANK_SU => MajesticBankSu,
-		MONEROWORLD     => MoneroWorld,
+		MONEROSEED_1    => MoneroSeed1,
+		MONEROSEED_2    => MoneroSeed2,
+		MONEROWORLD_1   => MoneroWorld1,
+		MONEROWORLD_2   => MoneroWorld2,
 		MONERUJO        => Monerujo,
 		PLOWSOF_1       => Plowsof1,
 		PLOWSOF_2       => Plowsof2,
@@ -224,7 +233,10 @@ pub fn enum_to_ip(node: NodeEnum) -> &'static str {
 		HashVault      => HASHVAULT,
 		MajesticBankIs => MAJESTICBANK_IS,
 		MajesticBankSu => MAJESTICBANK_SU,
-		MoneroWorld    => MONEROWORLD,
+		MoneroSeed1    => MONEROSEED_1,
+		MoneroSeed2    => MONEROSEED_2,
+		MoneroWorld1   => MONEROWORLD_1,
+		MoneroWorld2   => MONEROWORLD_2,
 		Monerujo       => MONERUJO,
 		Plowsof1       => PLOWSOF_1,
 		Plowsof2       => PLOWSOF_2,
@@ -347,9 +359,9 @@ impl Ping {
 	// This used to be done 3x linearly but after testing, sending a single
 	// JSON-RPC call to all IPs asynchronously resulted in the same data.
 	//
-	// <300ms  = GREEN
-	// <1000ms = YELLOW
-	// >1000ms = RED
+	// <200ms  = GREEN
+	// <500ms = YELLOW
+	// >500ms = RED
 	// timeout = BLACK
 	// default = GRAY
 	#[tokio::main]
@@ -421,9 +433,9 @@ impl Ping {
 			},
 		};
 		let color;
-		if ms < 300 {
+		if ms < 200 {
 			color = GREEN;
-		} else if ms < 1000 {
+		} else if ms < 500 {
 			color = YELLOW;
 		} else if ms < 5000 {
 			color = RED;