aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornecrashter2022-04-23 16:42:46 +0300
committerYigit Sever2022-04-23 18:10:12 +0300
commit92b37178167435027bb9e4db22b5c44977f341f9 (patch)
tree7170010cd9693a9976c5f71cfbf648ea7abef80f
parent8d7a1c4337af570c691c3c16527b724ae57ed80f (diff)
downloadgradecoin-92b37178167435027bb9e4db22b5c44977f341f9.tar.gz
gradecoin-92b37178167435027bb9e4db22b5c44977f341f9.tar.bz2
gradecoin-92b37178167435027bb9e4db22b5c44977f341f9.zip
Configurable hash zero hexadecimal character count
-rw-r--r--config.yaml2
-rw-r--r--src/config.rs2
-rw-r--r--src/handlers.rs15
3 files changed, 14 insertions, 5 deletions
diff --git a/config.yaml b/config.yaml
index caac122..e2f6b72 100644
--- a/config.yaml
+++ b/config.yaml
@@ -9,6 +9,8 @@ url_prefix: ""
9preapproved_users: "students.csv" 9preapproved_users: "students.csv"
10# Valid blocks should have this many transactions 10# Valid blocks should have this many transactions
11block_transaction_count: 4 11block_transaction_count: 4
12# How many zero hexadecimal characters should a correct hash start with?
13hash_zeros: 6
12# Bonus awarded after registration 14# Bonus awarded after registration
13register_bonus: 20 15register_bonus: 20
14# Coinbase reward 16# Coinbase reward
diff --git a/src/config.rs b/src/config.rs
index 9fb268b..7a524fc 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -15,6 +15,8 @@ pub struct Config {
15 pub preapproved_users: String, 15 pub preapproved_users: String,
16 // Valid blocks should have this many transactions 16 // Valid blocks should have this many transactions
17 pub block_transaction_count: u8, 17 pub block_transaction_count: u8,
18 // How many zero hexadecimal characters should a correct hash start with?
19 pub hash_zeros: u8,
18 // Inital registration bonus 20 // Inital registration bonus
19 pub register_bonus: u16, 21 pub register_bonus: u16,
20 // Coinbase reward 22 // Coinbase reward
diff --git a/src/handlers.rs b/src/handlers.rs
index 44c5299..6619924 100644
--- a/src/handlers.rs
+++ b/src/handlers.rs
@@ -524,14 +524,19 @@ pub async fn propose_block(
524 return Ok(warp::reply::with_status(res_json, StatusCode::BAD_REQUEST)); 524 return Ok(warp::reply::with_status(res_json, StatusCode::BAD_REQUEST));
525 } 525 }
526 526
527 // Are the 6 leftmost characters (=24 bits) zero? 527 // Are the n leftmost characters zero?
528 let should_zero = i32::from(hashvalue[0]) + i32::from(hashvalue[1]) + i32::from(hashvalue[2]); 528 let hash_correct = hash_string.chars()
529 .take(db.config.hash_zeros.into())
530 .all(|x| x == '0');
529 531
530 if should_zero != 0 { 532 if !hash_correct {
531 debug!("the hash does not have 6 rightmost zero bits"); 533 debug!("The hash does not have {} leftmost zero characters", db.config.hash_zeros);
532 let res_json = warp::reply::json(&GradeCoinResponse { 534 let res_json = warp::reply::json(&GradeCoinResponse {
533 res: ResponseType::Error, 535 res: ResponseType::Error,
534 message: "Given block hash is larger than target value".to_owned(), 536 message: format!(
537 "Given block hash does not start with {} zero hexadecimal characters",
538 db.config.hash_zeros
539 ),
535 }); 540 });
536 541
537 return Ok(warp::reply::with_status(res_json, StatusCode::BAD_REQUEST)); 542 return Ok(warp::reply::with_status(res_json, StatusCode::BAD_REQUEST));