testnet starting
This commit is contained in:
		
							parent
							
								
									216b08be57
								
							
						
					
					
						commit
						1804c8e00c
					
				
							
								
								
									
										95
									
								
								rewrite/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										95
									
								
								rewrite/Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -237,6 +237,21 @@ dependencies = [ | ||||
|  "alloc-no-stdlib", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "android-tzdata" | ||||
| version = "0.1.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "android_system_properties" | ||||
| version = "0.1.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" | ||||
| dependencies = [ | ||||
|  "libc", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "anyhow" | ||||
| version = "1.0.89" | ||||
| @ -723,7 +738,12 @@ version = "0.4.38" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" | ||||
| dependencies = [ | ||||
|  "android-tzdata", | ||||
|  "iana-time-zone", | ||||
|  "js-sys", | ||||
|  "num-traits", | ||||
|  "wasm-bindgen", | ||||
|  "windows-targets", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -769,6 +789,12 @@ dependencies = [ | ||||
|  "version_check", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "core-foundation-sys" | ||||
| version = "0.8.7" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "cpufeatures" | ||||
| version = "0.2.14" | ||||
| @ -1169,6 +1195,25 @@ dependencies = [ | ||||
|  "tracing", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "hacker-challenge" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "actix-web", | ||||
|  "async-stream", | ||||
|  "chrono", | ||||
|  "dashmap", | ||||
|  "prost", | ||||
|  "prost-types", | ||||
|  "rand 0.8.5", | ||||
|  "serde", | ||||
|  "solana-sdk", | ||||
|  "tokio", | ||||
|  "tokio-stream", | ||||
|  "tonic", | ||||
|  "tonic-build", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "hashbrown" | ||||
| version = "0.12.3" | ||||
| @ -1343,6 +1388,29 @@ dependencies = [ | ||||
|  "tracing", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "iana-time-zone" | ||||
| version = "0.1.60" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" | ||||
| dependencies = [ | ||||
|  "android_system_properties", | ||||
|  "core-foundation-sys", | ||||
|  "iana-time-zone-haiku", | ||||
|  "js-sys", | ||||
|  "wasm-bindgen", | ||||
|  "windows-core", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "iana-time-zone-haiku" | ||||
| version = "0.1.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" | ||||
| dependencies = [ | ||||
|  "cc", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "ident_case" | ||||
| version = "1.0.1" | ||||
| @ -2045,24 +2113,6 @@ version = "0.8.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rewrite" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "actix-web", | ||||
|  "async-stream", | ||||
|  "dashmap", | ||||
|  "prost", | ||||
|  "prost-types", | ||||
|  "rand 0.8.5", | ||||
|  "serde", | ||||
|  "solana-sdk", | ||||
|  "tokio", | ||||
|  "tokio-stream", | ||||
|  "tonic", | ||||
|  "tonic-build", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustc-demangle" | ||||
| version = "0.1.24" | ||||
| @ -2865,6 +2915,15 @@ dependencies = [ | ||||
|  "wasm-bindgen", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "windows-core" | ||||
| version = "0.52.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" | ||||
| dependencies = [ | ||||
|  "windows-targets", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "windows-sys" | ||||
| version = "0.52.0" | ||||
|  | ||||
| @ -1,11 +1,12 @@ | ||||
| [package] | ||||
| name = "rewrite" | ||||
| name = "hacker-challenge" | ||||
| version = "0.1.0" | ||||
| edition = "2021" | ||||
| 
 | ||||
| [dependencies] | ||||
| actix-web = "4.9.0" | ||||
| async-stream = "0.3.5" | ||||
| chrono = "0.4.38" | ||||
| dashmap = "6.1.0" | ||||
| prost = "0.13.2" | ||||
| prost-types = "0.13.2" | ||||
|  | ||||
							
								
								
									
										4
									
								
								rewrite/scripts/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										4
									
								
								rewrite/scripts/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| FROM alpine:edge | ||||
| COPY start.sh /start.sh | ||||
| COPY hacker-challenge /hacker-challenge | ||||
| ENTRYPOINT ["/start.sh"] | ||||
							
								
								
									
										12
									
								
								rewrite/scripts/start.sh
									
									
									
									
									
										Executable file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										12
									
								
								rewrite/scripts/start.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,12 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| # This script start the hacker challenge from within the docker container. | ||||
| # It's only purpose is to help bootstrap a test network. | ||||
| 
 | ||||
| if [ -z "${INIT_NODES}" ]; then | ||||
|   echo "The INIT_NODES environment variable is not set." | ||||
| else | ||||
|   echo $INIT_NODES | tr ' ' '\n' > /detee_challenge_nodes | ||||
| fi | ||||
| 
 | ||||
| /hacker-challenge | ||||
							
								
								
									
										24
									
								
								rewrite/scripts/testnet.sh
									
									
									
									
									
										Executable file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										24
									
								
								rewrite/scripts/testnet.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,24 @@ | ||||
| #!/bin/bash | ||||
| cd "$(dirname "$0")"/.. | ||||
| set -e | ||||
| cargo build --release --target x86_64-unknown-linux-musl | ||||
| rm -rf build | ||||
| mkdir -p build | ||||
| cp ./target/x86_64-unknown-linux-musl/release/hacker-challenge build/ | ||||
| cp scripts/start.sh build/ | ||||
| cp scripts/Dockerfile build/ | ||||
| cd build | ||||
| 
 | ||||
| docker build -t hacker-challenge:latest . | ||||
| 
 | ||||
| docker ps -a | grep 'hacker-challenge' | awk '{ print $NF }' | xargs docker rm -f || true | ||||
| 
 | ||||
| docker run -d --name "hacker-challenge_0" \ | ||||
|   hacker-challenge:latest | ||||
| 
 | ||||
| for i in {1..10} | ||||
| do | ||||
|   docker run -d --name "hacker-challenge_$i" \ | ||||
|     --env INIT_NODES="172.17.0.2 172.17.0.3 172.17.0.4" \ | ||||
|     hacker-challenge:latest | ||||
| done | ||||
| @ -5,6 +5,7 @@ use dashmap::DashSet; | ||||
| use solana_sdk::signature::keypair::Keypair; | ||||
| use std::time::SystemTime; | ||||
| use std::time::{Duration, UNIX_EPOCH}; | ||||
| use chrono::{DateTime, Utc}; | ||||
| 
 | ||||
| type IP = String; | ||||
| pub const LOCALHOST: &str = "localhost"; | ||||
| @ -93,7 +94,9 @@ impl Store { | ||||
|     } | ||||
| 
 | ||||
|     pub fn increase_mint_requests(&self) { | ||||
|         println!("increasing localhost"); | ||||
|         if let Some(mut localhost_info) = self.nodes.get_mut(LOCALHOST) { | ||||
|             println!("increasing localhost from {}", localhost_info.mint_requests); | ||||
|             localhost_info.mint_requests += 1; | ||||
|         } | ||||
|     } | ||||
| @ -155,15 +158,21 @@ impl Store { | ||||
|     pub fn get_http_node_list(&self) -> Vec<crate::http_server::NodesResp> { | ||||
|         self.nodes | ||||
|             .iter() | ||||
|             .map(|node| crate::http_server::NodesResp { | ||||
|             .map(|node| { | ||||
|                 let joined_at: DateTime<Utc> = node.value().started_at.into(); | ||||
|                 let last_keepalive: DateTime<Utc> = node.value().started_at.into(); | ||||
|                 let joined_at = joined_at.format("%Y-%m-%d %H:%M:%S").to_string(); | ||||
|                 let last_keepalive = last_keepalive.format("%Y-%m-%d %H:%M:%S").to_string(); | ||||
|                 crate::http_server::NodesResp { | ||||
|                 ip: node.key().to_string(), | ||||
|                 joined_at: node.value().started_at, | ||||
|                 last_keepalive: node.value().keepalive, | ||||
|                 joined_at, | ||||
|                 last_keepalive, | ||||
|                 mints: node.value().mints, | ||||
|                 ratls_connections: node.value().ratls_conns, | ||||
|                 ratls_attacks: node.value().ratls_attacks, | ||||
|                 public: node.value().public, | ||||
|                 mint_requests: node.value().mint_requests, | ||||
|             } | ||||
|             }) | ||||
|             .collect() | ||||
|     } | ||||
|  | ||||
| @ -10,10 +10,9 @@ use actix_web::{ | ||||
|     HttpServer, | ||||
|     Responder, | ||||
| }; | ||||
| use chrono::{DateTime, Utc}; | ||||
| use serde::{Deserialize, Serialize}; | ||||
| use std::sync::Arc; | ||||
| use std::time::SystemTime; | ||||
| // use std::{fmt, sync::Arc};
 | ||||
| 
 | ||||
| const HOMEPAGE: &str = r#"Welcome, beloved hacker!
 | ||||
| 
 | ||||
| @ -45,8 +44,8 @@ async fn homepage() -> impl Responder { | ||||
| #[derive(Serialize)] | ||||
| pub struct NodesResp { | ||||
|     pub ip: String, | ||||
|     pub joined_at: SystemTime, | ||||
|     pub last_keepalive: SystemTime, | ||||
|     pub joined_at: String, | ||||
|     pub last_keepalive: String, | ||||
|     pub mint_requests: u64, | ||||
|     pub ratls_attacks: u64, | ||||
|     pub ratls_connections: u64, | ||||
| @ -66,6 +65,7 @@ struct MintReq { | ||||
| 
 | ||||
| #[post("/mint")] | ||||
| async fn mint(ds: web::Data<Arc<Store>>, _: web::Json<MintReq>) -> impl Responder { | ||||
|     println!("wat"); | ||||
|     ds.increase_mint_requests(); | ||||
|     HttpResponse::Ok().json({}) | ||||
| } | ||||
| @ -84,4 +84,3 @@ pub async fn init(ds: Arc<Store>) { | ||||
|     .await | ||||
|     .unwrap(); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -66,12 +66,14 @@ async fn main() { | ||||
|     long_term_tasks.spawn(http_server::init(ds.clone())); | ||||
|     long_term_tasks.spawn(grpc::server::MyServer::init(ds.clone(), tx.clone()).start()); | ||||
| 
 | ||||
|     let input = File::open(INIT_NODES).unwrap(); | ||||
|     let buffered = BufReader::new(input); | ||||
|     for line in buffered.lines() { | ||||
|         init_tasks.spawn( | ||||
|             grpc::client::ConnManager::init(ds.clone(), tx.clone()).start_with_node(line.unwrap()), | ||||
|         ); | ||||
|     if let Ok(input) = File::open(INIT_NODES) { | ||||
|         let buffered = BufReader::new(input); | ||||
|         for line in buffered.lines() { | ||||
|             init_tasks.spawn( | ||||
|                 grpc::client::ConnManager::init(ds.clone(), tx.clone()) | ||||
|                     .start_with_node(line.unwrap()), | ||||
|             ); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     let mut connection_count = 0; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user