diff options
Diffstat (limited to 'src/handlers.rs')
-rw-r--r-- | src/handlers.rs | 35 |
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 | ||
27 | use crate::PRIVATE_KEY; | 27 | use crate::PRIVATE_KEY; |
28 | 28 | ||
29 | // Valid blocks should have this many transactions | ||
30 | const BLOCK_TRANSACTION_COUNT: u8 = 4; | ||
31 | // Inital registration bonus | ||
32 | const REGISTER_BONUS: u16 = 20; | ||
33 | // Coinbase reward | ||
34 | const BLOCK_REWARD: u16 = 2; | ||
35 | // Transaction amount limit | ||
36 | const TX_UPPER_LIMIT: u16 = 4; | ||
37 | const TX_LOWER_LIMIT: u16 = 1; | ||
38 | // Transaction traffic reward | ||
39 | const TX_TRAFFIC_REWARD: u16 = 1; | ||
40 | |||
41 | // Encryption primitive | 29 | // Encryption primitive |
42 | type Aes128Cbc = Cbc<Aes128, Pkcs7>; | 30 | type 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, |