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), |
