start rewrite based on ticket #2
keys go migrated to solana_sdk in a 01b889d
This commit is contained in:
parent
01b889d273
commit
d7b0c3fd2c
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,4 @@
|
||||
/target
|
||||
target
|
||||
build
|
||||
detee_challenge_nodes
|
||||
.cargo
|
||||
|
0
Cargo.lock → legacy_challenge/Cargo.lock
generated
0
Cargo.lock → legacy_challenge/Cargo.lock
generated
1297
rewrite/Cargo.lock
generated
Normal file
1297
rewrite/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
10
rewrite/Cargo.toml
Normal file
10
rewrite/Cargo.toml
Normal file
@ -0,0 +1,10 @@
|
||||
[package]
|
||||
name = "rewrite"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
actix-web = "4.9.0"
|
||||
rand = "0.8.5"
|
||||
serde = { version = "1.0.210", features = ["derive"] }
|
||||
tokio = { version = "1.40.0", features = ["macros", "rt-multi-thread", "fs"] }
|
110
rewrite/src/http_server.rs
Normal file
110
rewrite/src/http_server.rs
Normal file
@ -0,0 +1,110 @@
|
||||
use actix_web::{
|
||||
error::ResponseError, get, http::StatusCode, post, web, App, HttpResponse, HttpServer,
|
||||
Responder, Result,
|
||||
};
|
||||
use rand::Rng;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::{fmt, sync::Arc};
|
||||
|
||||
const HOMEPAGE: &str = r#"Welcome, beloved hacker!
|
||||
|
||||
This node is part of the DeTEE hacker-challenge network. This network allows you
|
||||
to mint the token {token_address},
|
||||
and owns the mint address {mint_address}.
|
||||
|
||||
To be able to mint, you will need to send SOL to {mint_address}, however:
|
||||
|
||||
BE AWARE THAT THE ONLY WAY TO GET THE SOL OUT IS BY HACKING THIS NETWORK!
|
||||
DeTEE REPRESENTATIVES DON'T KNOW HOW TO HACK IT! THAT'S ACTUALLY WHY THIS GOT CREATED...
|
||||
|
||||
Allowed operations:
|
||||
|
||||
/nodes <- information about nodes and counters of network activity
|
||||
/mint (address) <- mint DHCT tokens to the address; the wallet needs sol for this operation
|
||||
|
||||
Feel free to use this as a faucet for HCKT tokens, that you can use for testing in any dApp.
|
||||
|
||||
The objective of the hacker challenge is to get the SOL out of {mint_address}.
|
||||
If you hack it, contact us at https://detee.cloud cause we have lots of rewards.
|
||||
"#;
|
||||
|
||||
#[get("/")]
|
||||
async fn homepage() -> impl Responder {
|
||||
HttpResponse::Ok().body(HOMEPAGE)
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct NodesResp {
|
||||
ip: String,
|
||||
last_keepalive: u64,
|
||||
online: bool,
|
||||
public: bool,
|
||||
mints: u64,
|
||||
mint_requests: u64,
|
||||
ratls_attacks: u64,
|
||||
}
|
||||
|
||||
#[get("/nodes")]
|
||||
async fn get_nodes() -> HttpResponse {
|
||||
let mock_nodes = generate_mock_data();
|
||||
HttpResponse::Ok().json(mock_nodes)
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct MintReq {
|
||||
wallet: String,
|
||||
}
|
||||
|
||||
#[post("/mint")]
|
||||
async fn mint(req: web::Json<MintReq>) -> impl Responder {
|
||||
HttpResponse::Ok().json({})
|
||||
}
|
||||
|
||||
// TODO: init(ds: Arc<Store>)
|
||||
pub async fn init() {
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
// .app_data(web::Data::new(ds.clone()))
|
||||
.service(homepage)
|
||||
.service(get_nodes)
|
||||
.service(mint)
|
||||
})
|
||||
.bind("0.0.0.0:31372")
|
||||
.unwrap()
|
||||
.run()
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
fn generate_mock_data() -> Vec<NodesResp> {
|
||||
let mut rng = rand::thread_rng();
|
||||
let mut nodes = Vec::new();
|
||||
|
||||
for _ in 0..15 {
|
||||
let ip = format!(
|
||||
"{}.{}.{}.{}",
|
||||
rng.gen_range(1..=255),
|
||||
rng.gen_range(1..=255),
|
||||
rng.gen_range(1..=255),
|
||||
rng.gen_range(1..=255)
|
||||
);
|
||||
let last_keepalive = rng.gen_range(1_000_000..10_000_000);
|
||||
let online = rng.gen_bool(0.5);
|
||||
let public = rng.gen_bool(0.5);
|
||||
let mints = rng.gen_range(0..500);
|
||||
let mint_requests = rng.gen_range(0..1000);
|
||||
let ratls_attacks = rng.gen_range(0..10);
|
||||
|
||||
nodes.push(NodesResp {
|
||||
ip,
|
||||
last_keepalive,
|
||||
online,
|
||||
public,
|
||||
mints,
|
||||
mint_requests,
|
||||
ratls_attacks,
|
||||
});
|
||||
}
|
||||
|
||||
nodes
|
||||
}
|
14
rewrite/src/main.rs
Normal file
14
rewrite/src/main.rs
Normal file
@ -0,0 +1,14 @@
|
||||
mod http_server;
|
||||
|
||||
use tokio::task::JoinSet;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let mut long_term_tasks = JoinSet::new();
|
||||
|
||||
long_term_tasks.spawn(http_server::init());
|
||||
|
||||
long_term_tasks.join_next().await;
|
||||
println!("Shutting down...");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user