aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/handlers.rs35
1 files changed, 13 insertions, 22 deletions
diff --git a/src/handlers.rs b/src/handlers.rs
index 736ad29..f80aa60 100644
--- a/src/handlers.rs
+++ b/src/handlers.rs
@@ -26,18 +26,6 @@ use warp::{http::StatusCode, reply};
26 26
27use crate::PRIVATE_KEY; 27use crate::PRIVATE_KEY;
28 28
29// Valid blocks should have this many transactions
30const BLOCK_TRANSACTION_COUNT: u8 = 4;
31// Inital registration bonus
32const REGISTER_BONUS: u16 = 20;
33// Coinbase reward
34const BLOCK_REWARD: u16 = 2;
35// Transaction amount limit
36const TX_UPPER_LIMIT: u16 = 4;
37const TX_LOWER_LIMIT: u16 = 1;
38// Transaction traffic reward
39const TX_TRAFFIC_REWARD: u16 = 1;
40
41// Encryption primitive 29// Encryption primitive
42type Aes128Cbc = Cbc<Aes128, Pkcs7>; 30type Aes128Cbc = Cbc<Aes128, Pkcs7>;
43 31
@@ -327,7 +315,7 @@ pub async fn authenticate_user(
327 let new_user = User { 315 let new_user = User {
328 user_id: privileged_student_id, 316 user_id: privileged_student_id,
329 public_key: request.public_key, 317 public_key: request.public_key,
330 balance: REGISTER_BONUS, 318 balance: db.config.register_bonus,
331 is_bot: false, 319 is_bot: false,
332 }; 320 };
333 321
@@ -392,17 +380,18 @@ pub async fn propose_block(
392 warn!("New block proposal: {:?}", &new_block); 380 warn!("New block proposal: {:?}", &new_block);
393 381
394 // Check if there are enough transactions in the block 382 // Check if there are enough transactions in the block
395 if new_block.transaction_list.len() < BLOCK_TRANSACTION_COUNT as usize { 383 let block_transaction_count = db.config.block_transaction_count;
384 if new_block.transaction_list.len() < block_transaction_count as usize {
396 debug!( 385 debug!(
397 "{} transactions offered, needed {}", 386 "{} transactions offered, needed {}",
398 new_block.transaction_list.len(), 387 new_block.transaction_list.len(),
399 BLOCK_TRANSACTION_COUNT 388 block_transaction_count
400 ); 389 );
401 let res_json = warp::reply::json(&GradeCoinResponse { 390 let res_json = warp::reply::json(&GradeCoinResponse {
402 res: ResponseType::Error, 391 res: ResponseType::Error,
403 message: format!( 392 message: format!(
404 "There should be at least {} transactions in the block", 393 "There should be at least {} transactions in the block",
405 BLOCK_TRANSACTION_COUNT 394 block_transaction_count
406 ), 395 ),
407 }); 396 });
408 397
@@ -552,8 +541,8 @@ pub async fn propose_block(
552 // See: internal_user_fingerprint, internal_user 541 // See: internal_user_fingerprint, internal_user
553 let coinbase = pending_transactions.get(&new_block.transaction_list[0]).unwrap(); 542 let coinbase = pending_transactions.get(&new_block.transaction_list[0]).unwrap();
554 let mut coinbase_user = users_store.get_mut(&coinbase.source).unwrap(); 543 let mut coinbase_user = users_store.get_mut(&coinbase.source).unwrap();
555 coinbase_user.balance += BLOCK_REWARD; 544 coinbase_user.balance += db.config.block_reward;
556 debug!("{} block reward went to {:?} for mining the block", BLOCK_REWARD, coinbase_user); 545 debug!("{} block reward went to {:?} for mining the block", db.config.block_reward, coinbase_user);
557 546
558 let mut holding: HashMap<String, Transaction> = HashMap::new(); 547 let mut holding: HashMap<String, Transaction> = HashMap::new();
559 548
@@ -564,7 +553,7 @@ pub async fn propose_block(
564 let target = &transaction.target; 553 let target = &transaction.target;
565 554
566 if let Some(from) = users_store.get_mut(source) { 555 if let Some(from) = users_store.get_mut(source) {
567 from.balance -= transaction.amount - TX_TRAFFIC_REWARD; 556 from.balance -= transaction.amount - db.config.tx_traffic_reward;
568 } 557 }
569 558
570 if let Some(to) = users_store.get_mut(target) { 559 if let Some(to) = users_store.get_mut(target) {
@@ -758,17 +747,19 @@ pub async fn propose_transaction(
758 } 747 }
759 748
760 // Is transaction amount within bounds 749 // Is transaction amount within bounds
761 if new_transaction.amount > TX_UPPER_LIMIT || new_transaction.amount < TX_LOWER_LIMIT { 750 let tx_upper_limit = db.config.tx_upper_limit;
751 let tx_lower_limit = db.config.tx_lower_limit;
752 if new_transaction.amount > tx_upper_limit || new_transaction.amount < tx_lower_limit {
762 debug!( 753 debug!(
763 "Transaction amount is not between {} and {}, was {}", 754 "Transaction amount is not between {} and {}, was {}",
764 TX_LOWER_LIMIT, TX_UPPER_LIMIT, new_transaction.amount 755 tx_lower_limit, tx_upper_limit, new_transaction.amount
765 ); 756 );
766 return Ok(warp::reply::with_status( 757 return Ok(warp::reply::with_status(
767 warp::reply::json(&GradeCoinResponse { 758 warp::reply::json(&GradeCoinResponse {
768 res: ResponseType::Error, 759 res: ResponseType::Error,
769 message: format!( 760 message: format!(
770 "Transaction amount should be between {} and {}", 761 "Transaction amount should be between {} and {}",
771 TX_LOWER_LIMIT, TX_UPPER_LIMIT 762 tx_lower_limit, tx_upper_limit
772 ), 763 ),
773 }), 764 }),
774 StatusCode::BAD_REQUEST, 765 StatusCode::BAD_REQUEST,