diff options
-rw-r--r-- | src/handlers.rs | 11 | ||||
-rw-r--r-- | tests/route_tests.rs | 56 |
2 files changed, 34 insertions, 33 deletions
diff --git a/src/handlers.rs b/src/handlers.rs index 482f5b1..e63933d 100644 --- a/src/handlers.rs +++ b/src/handlers.rs | |||
@@ -8,6 +8,7 @@ use jsonwebtoken::errors::ErrorKind; | |||
8 | use jsonwebtoken::{decode, Algorithm, DecodingKey, TokenData, Validation}; | 8 | use jsonwebtoken::{decode, Algorithm, DecodingKey, TokenData, Validation}; |
9 | use log::{debug, warn}; | 9 | use log::{debug, warn}; |
10 | use md5::Md5; | 10 | use md5::Md5; |
11 | use parking_lot::RwLockUpgradableReadGuard; | ||
11 | use rsa::{PaddingScheme, RSAPrivateKey}; | 12 | use rsa::{PaddingScheme, RSAPrivateKey}; |
12 | use serde::Serialize; | 13 | use serde::Serialize; |
13 | use sha2::Sha256; | 14 | use sha2::Sha256; |
@@ -334,7 +335,7 @@ pub async fn authorized_propose_block( | |||
334 | 335 | ||
335 | let users_store = db.users.upgradable_read(); | 336 | let users_store = db.users.upgradable_read(); |
336 | 337 | ||
337 | println!("{:?}", &new_block); | 338 | warn!("{:?}", &new_block); |
338 | 339 | ||
339 | if new_block.transaction_list.is_empty() { | 340 | if new_block.transaction_list.is_empty() { |
340 | let res_json = warp::reply::json(&GradeCoinResponse { | 341 | let res_json = warp::reply::json(&GradeCoinResponse { |
@@ -455,7 +456,7 @@ pub async fn authorized_propose_block( | |||
455 | 456 | ||
456 | { | 457 | { |
457 | let pending_transactions = db.pending_transactions.read(); | 458 | let pending_transactions = db.pending_transactions.read(); |
458 | let mut users = db.users.write(); | 459 | let mut users_store = RwLockUpgradableReadGuard::upgrade(users_store); |
459 | 460 | ||
460 | let coinbase_fingerprint = new_block.transaction_list.get(0).unwrap(); | 461 | let coinbase_fingerprint = new_block.transaction_list.get(0).unwrap(); |
461 | 462 | ||
@@ -464,17 +465,17 @@ pub async fn authorized_propose_block( | |||
464 | let source = &transaction.source; | 465 | let source = &transaction.source; |
465 | let target = &transaction.target; | 466 | let target = &transaction.target; |
466 | 467 | ||
467 | if let Some(from) = users.get_mut(source) { | 468 | if let Some(from) = users_store.get_mut(source) { |
468 | from.balance -= transaction.amount; | 469 | from.balance -= transaction.amount; |
469 | } | 470 | } |
470 | 471 | ||
471 | if let Some(to) = users.get_mut(target) { | 472 | if let Some(to) = users_store.get_mut(target) { |
472 | to.balance += transaction.amount; | 473 | to.balance += transaction.amount; |
473 | } | 474 | } |
474 | } | 475 | } |
475 | } | 476 | } |
476 | 477 | ||
477 | if let Some(coinbase_user) = users.get_mut(coinbase_fingerprint) { | 478 | if let Some(coinbase_user) = users_store.get_mut(coinbase_fingerprint) { |
478 | coinbase_user.balance += BLOCK_REWARD as i32; | 479 | coinbase_user.balance += BLOCK_REWARD as i32; |
479 | } | 480 | } |
480 | } | 481 | } |
diff --git a/tests/route_tests.rs b/tests/route_tests.rs index de60414..59483d3 100644 --- a/tests/route_tests.rs +++ b/tests/route_tests.rs | |||
@@ -28,39 +28,39 @@ FQIDAQAB | |||
28 | ); | 28 | ); |
29 | 29 | ||
30 | // -----BEGIN RSA PRIVATE KEY----- | 30 | // -----BEGIN RSA PRIVATE KEY----- |
31 | // MIIEpAIBAAKCAQEA5yWTMeFqr2nvOC9oR5Wq/nzcNlwCIaziojt7rJ4BBvuwkT0t | 31 | // MIIEpAIBAAKCAQEA5yWTMeFqr2nvOC9oR5Wq/nzcNlwCIaziojt7rJ4BBvuwkT0t |
32 | // ERDz8AgvUsaewiB+Fz5OXTeb3WAB1FEXnBXGekrGzvC8jHQMKHyNoWzUlpQJ9UMt | 32 | // ERDz8AgvUsaewiB+Fz5OXTeb3WAB1FEXnBXGekrGzvC8jHQMKHyNoWzUlpQJ9UMt |
33 | // dQIWPOCuMyLpc+rNPL3428U8UpldjbTHHyq2/ef6abkdj+XWg/slYtrFeOf3ktc1 | 33 | // dQIWPOCuMyLpc+rNPL3428U8UpldjbTHHyq2/ef6abkdj+XWg/slYtrFeOf3ktc1 |
34 | // l50R4k8VO8L6kQuh2+YIjXGPLShRaqnUQPtH8LFPX4bO9lJ9mAoMZFec6XVwumn/ | 34 | // l50R4k8VO8L6kQuh2+YIjXGPLShRaqnUQPtH8LFPX4bO9lJ9mAoMZFec6XVwumn/ |
35 | // uqu9jyWQL6qh6gtwQHgN+A9wGvzVvltJ9h8sshSHWWtBD0M19ilbXhKyBsHSSZkp | 35 | // uqu9jyWQL6qh6gtwQHgN+A9wGvzVvltJ9h8sshSHWWtBD0M19ilbXhKyBsHSSZkp |
36 | // x+TAvFhfQ8JURw7KqahUPVlCwJ5OIKccJ/6FFQIDAQABAoIBADTZGnZlG4dPqSon | 36 | // x+TAvFhfQ8JURw7KqahUPVlCwJ5OIKccJ/6FFQIDAQABAoIBADTZGnZlG4dPqSon |
37 | // bKgxSA83bQHgt3wLkyWUhApLdeCq2wvZ+NvWDG/s7yT11IZ991ZJIJGfjTtoIALz | 37 | // bKgxSA83bQHgt3wLkyWUhApLdeCq2wvZ+NvWDG/s7yT11IZ991ZJIJGfjTtoIALz |
38 | // J3rAX8jGH/5gfDuArOb000z9HP3wivZQjawa9gqlNC7s5INkQ9iHdsaIqeoYtpMX | 38 | // J3rAX8jGH/5gfDuArOb000z9HP3wivZQjawa9gqlNC7s5INkQ9iHdsaIqeoYtpMX |
39 | // qg8uLPiQeWiCsoeb/Rff7ARWEKA7udoZ2uZcZFMHTKx+mBpk8IiepQAJPBRVwmXk | 39 | // qg8uLPiQeWiCsoeb/Rff7ARWEKA7udoZ2uZcZFMHTKx+mBpk8IiepQAJPBRVwmXk |
40 | // x/3LTaezi6Tkvp/k/gf4IeSICiRGFRmm2Vxciduj11/CrdTHPQLz/Rh5/IN8Bkry | 40 | // x/3LTaezi6Tkvp/k/gf4IeSICiRGFRmm2Vxciduj11/CrdTHPQLz/Rh5/IN8Bkry |
41 | // xdQdQxxhwxF/ap6OJIJyguq7gximn2uK0jbHY3nRmrF8SsEtIT+Gd7I46L/goR8c | 41 | // xdQdQxxhwxF/ap6OJIJyguq7gximn2uK0jbHY3nRmrF8SsEtIT+Gd7I46L/goR8c |
42 | // jQOQRmECgYEA9RJSOBUkZMLoUcC2LGJBZOAnJZ7WToCVdu3LrPceRYtQHwcznW4O | 42 | // jQOQRmECgYEA9RJSOBUkZMLoUcC2LGJBZOAnJZ7WToCVdu3LrPceRYtQHwcznW4O |
43 | // NAHF+blQRzqvbMi11ap8NVpkDDu0ki/Yi2VdSVjQmlaOcpAXjN6T5ZrKoz61xj4g | 43 | // NAHF+blQRzqvbMi11ap8NVpkDDu0ki/Yi2VdSVjQmlaOcpAXjN6T5ZrKoz61xj4g |
44 | // 2T2/K6d6ypkZRKPhKCC1iI419rq/APVEZHYCl7jZp4iD2izHiegZYccCgYEA8XRK | 44 | // 2T2/K6d6ypkZRKPhKCC1iI419rq/APVEZHYCl7jZp4iD2izHiegZYccCgYEA8XRK |
45 | // rfVuPiYsaB07eJrRKKjuoM1Jcr19jZyXY8sbALRcExaTX2CRaPA7binVeDBXayQ1 | 45 | // rfVuPiYsaB07eJrRKKjuoM1Jcr19jZyXY8sbALRcExaTX2CRaPA7binVeDBXayQ1 |
46 | // I0+kA1nV1EI+ROegV+b6gs2YaUmMJzI1yLqMqGDgHFxFvhkDsZaI+/V+G9eOLEt4 | 46 | // I0+kA1nV1EI+ROegV+b6gs2YaUmMJzI1yLqMqGDgHFxFvhkDsZaI+/V+G9eOLEt4 |
47 | // 5ic5tImfZITLE/GSC8b+C16gxMGUN4t9gHq2okMCgYAKyNedaDDFzl3y2wwpP9mo | 47 | // 5ic5tImfZITLE/GSC8b+C16gxMGUN4t9gHq2okMCgYAKyNedaDDFzl3y2wwpP9mo |
48 | // 2sReP3Mm2Tm6lhRUdDt8y/impOZ8kw9E8p8HskP6HncBzoNR98KnhmbIswfrNvfM | 48 | // 2sReP3Mm2Tm6lhRUdDt8y/impOZ8kw9E8p8HskP6HncBzoNR98KnhmbIswfrNvfM |
49 | // ipVkWOg1IoH6QKUIqfLQM9OfA290Xd+ML89t2Fzq9XnLL3sFDQtwCvIM/YLSQ/jS | 49 | // ipVkWOg1IoH6QKUIqfLQM9OfA290Xd+ML89t2Fzq9XnLL3sFDQtwCvIM/YLSQ/jS |
50 | // gu7yRkwttzA2NapCQ1h6mQKBgQClwBwn8Qyd01y2mCKkNzsP+2/cqTAbeSNAXFe8 | 50 | // gu7yRkwttzA2NapCQ1h6mQKBgQClwBwn8Qyd01y2mCKkNzsP+2/cqTAbeSNAXFe8 |
51 | // pMfDowx1+hBu7/7CF+/kPwmQuTa5kSB9PgWsWzYjwNm4OX1j+mbL9lEDLf7tRVWQ | 51 | // pMfDowx1+hBu7/7CF+/kPwmQuTa5kSB9PgWsWzYjwNm4OX1j+mbL9lEDLf7tRVWQ |
52 | // lydJyz7tmRYzWj6j4V/l/u90M3QgyiqTbCf73GG0AkjaRwHn3dG1gl9A0lZqDvK3 | 52 | // lydJyz7tmRYzWj6j4V/l/u90M3QgyiqTbCf73GG0AkjaRwHn3dG1gl9A0lZqDvK3 |
53 | // iQXouwKBgQCrx6SCnEkhLISSZpzdDehtWmyCQJIwcdlRQlAmFLVn+TJHTXR7xUm2 | 53 | // iQXouwKBgQCrx6SCnEkhLISSZpzdDehtWmyCQJIwcdlRQlAmFLVn+TJHTXR7xUm2 |
54 | // VpTrPTfaYWx83OQUn/OZqY5gIQ+jlfwqnVg+PDQQ/P09/4xygRCLvjL6NCSvtkj1 | 54 | // VpTrPTfaYWx83OQUn/OZqY5gIQ+jlfwqnVg+PDQQ/P09/4xygRCLvjL6NCSvtkj1 |
55 | // MRArEl4y68+jZLRu74TVG0lXi6ht6KhNHF6GiWKU9FHZ4B+btLicsg== | 55 | // MRArEl4y68+jZLRu74TVG0lXi6ht6KhNHF6GiWKU9FHZ4B+btLicsg== |
56 | // -----END RSA PRIVATE KEY----- | 56 | // -----END RSA PRIVATE KEY----- |
57 | |||
58 | 57 | ||
59 | db.pending_transactions.write().insert( | 58 | db.pending_transactions.write().insert( |
60 | "mock_transaction_source".to_owned(), | 59 | "mock_transaction_source".to_owned(), |
61 | Transaction { | 60 | Transaction { |
62 | by: "mock_transaction_source".to_owned(), | 61 | by: "mock_transaction_source".to_owned(), |
63 | source: "31415926535897932384626433832795028841971693993751058209749445923".to_owned(), | 62 | source: "31415926535897932384626433832795028841971693993751058209749445923" |
63 | .to_owned(), | ||
64 | target: "mock_transaction_source".to_owned(), | 64 | target: "mock_transaction_source".to_owned(), |
65 | amount: 3, | 65 | amount: 3, |
66 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 13).and_hms(20, 55, 30), | 66 | timestamp: chrono::NaiveDate::from_ymd(2021, 04, 13).and_hms(20, 55, 30), |