From 3cf6efd905358c5e3f22957295221046351ffafb Mon Sep 17 00:00:00 2001 From: Szegoo Date: Fri, 5 Jan 2024 11:53:01 +0100 Subject: [PATCH] clean up --- Cargo.lock | 41 ++++++++++---------- config.toml | 2 +- registry.json | 6 --- routes/src/lib.rs | 3 ++ routes/src/register.rs | 87 ++++++++++++++++++++++++------------------ shared/Cargo.toml | 2 +- shared/src/config.rs | 5 ++- 7 files changed, 79 insertions(+), 67 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ac36965..85e6b29 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1545,7 +1545,7 @@ dependencies = [ "atomic 0.6.0", "pear", "serde", - "toml 0.8.2", + "toml", "uncased", "version_check", ] @@ -2729,7 +2729,7 @@ version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate 2.0.1", + "proc-macro-crate 2.0.0", "proc-macro2", "quote", "syn 1.0.109", @@ -2977,11 +2977,10 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" dependencies = [ - "toml_datetime", "toml_edit 0.20.2", ] @@ -3851,7 +3850,7 @@ dependencies = [ "serde", "serde_json", "subxt", - "toml 0.5.11", + "toml", "types", ] @@ -4792,30 +4791,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.8.2" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.20.2", + "toml_edit 0.21.0", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] @@ -4836,6 +4826,17 @@ name = "toml_edit" version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" dependencies = [ "indexmap 2.1.0", "serde", diff --git a/config.toml b/config.toml index b641310..f25029c 100644 --- a/config.toml +++ b/config.toml @@ -4,4 +4,4 @@ registry = "registry.json" [payment_info] rpc_url = "wss://rpc.ibp.network/polkadot" receiver = "126X27SbhrV19mBFawys3ovkyBS87SGfYwtwa8J2FjHrtbmA" -cost = 100 +cost = "100" diff --git a/registry.json b/registry.json index fb45ea8..7585d2a 100644 --- a/registry.json +++ b/registry.json @@ -4,11 +4,5 @@ "rpc_url": "wss://acala-rpc.dwellir.com", "para_id": 2000, "relay_chain": "Polkadot" - }, - { - "name": "Acala", - "rpc_url": "wss://acala-rpc.dwellir.com", - "para_id": 2005, - "relay_chain": "Polkadot" } ] \ No newline at end of file diff --git a/routes/src/lib.rs b/routes/src/lib.rs index 2fa5e42..4b4b89d 100644 --- a/routes/src/lib.rs +++ b/routes/src/lib.rs @@ -41,6 +41,8 @@ pub enum Error { PaymentRequired, /// Failed to validate they payment. PaymentValidationFailed, + /// The payment was not found in the specified block. + PaymentNotFound, } impl<'r> Responder<'r, 'static> for Error { @@ -61,6 +63,7 @@ impl From for Error { "ConsumptionDataNotFound" => Self::ConsumptionDataNotFound, "InvalidData" => Self::InvalidData, "PaymentValidationFailed" => Self::PaymentValidationFailed, + "PaymentNotFound" => Self::PaymentNotFound, _ => panic!("UnknownError"), } } diff --git a/routes/src/register.rs b/routes/src/register.rs index 135ea79..821ee9e 100644 --- a/routes/src/register.rs +++ b/routes/src/register.rs @@ -63,6 +63,12 @@ pub struct RegistrationData { pub async fn register_para(registration_data: Json) -> Result<(), Error> { let para = registration_data.para.clone(); + log::info!( + target: LOG_TARGET, + "Attempting to register para: {}:{}", + para.relay_chain, para.para_id + ); + let mut paras = registered_paras(); if registered_para(para.relay_chain.clone(), para.para_id).is_some() { @@ -108,36 +114,34 @@ async fn validate_registration_payment( payment_info: PaymentInfo, receipt: Receipt, ) -> Result<(), Error> { - if let Ok(rpc_client) = RpcClient::from_url(&payment_info.rpc_url.clone()).await { - let params = rpc_params![Some(receipt.block_number)]; - // TODO: ensure that the specified block is finalized. - let block_hash: H256 = rpc_client.request("chain_getBlockHash", params).await.unwrap(); - - let api = OnlineClient::::from_url(payment_info.rpc_url.clone()) - .await - .unwrap(); - let block = api.blocks().at(block_hash).await.unwrap(); - - let payment = opaque_payment_extrinsic(para, payment_info).await?; - - let extrinsics = block.extrinsics().await.unwrap(); - let extrinsics: Vec> = extrinsics - .iter() - .filter_map(|ext| { - ext.as_ref().ok().and_then(|e| e.as_root_extrinsic::().ok()) - }) - .map(|ext| ext.encode()) - .collect(); - - if extrinsics.contains(&payment.encode()) { - // Green light - } else { - // Red light - } - + let rpc_client = RpcClient::from_url(&payment_info.rpc_url.clone()) + .await + .map_err(|_| Error::PaymentValidationFailed)?; + + let params = rpc_params![Some(receipt.block_number)]; + // TODO: ensure that the specified block is finalized. + let block_hash: H256 = rpc_client.request("chain_getBlockHash", params).await.unwrap(); + + let api = OnlineClient::::from_url(payment_info.rpc_url.clone()) + .await + .map_err(|_| Error::PaymentValidationFailed)?; + + let block = api.blocks().at(block_hash).await.map_err(|_| Error::PaymentValidationFailed)?; + let payment = opaque_payment_extrinsic(para, payment_info).await?; + + let extrinsics = block.extrinsics().await.unwrap(); + let extrinsics: Vec> = extrinsics + .iter() + .filter_map(|ext| { + ext.as_ref().ok().and_then(|e| e.as_root_extrinsic::().ok()) + }) + .map(|ext| ext.encode()) + .collect(); + + if extrinsics.contains(&payment.encode()) { Ok(()) } else { - Err(Error::PaymentValidationFailed) + Err(Error::PaymentNotFound) } } @@ -145,16 +149,25 @@ async fn opaque_payment_extrinsic( para: Parachain, payment_info: PaymentInfo, ) -> Result { - let transfer_call = polkadot::Call::Balances(BalancesCall::transfer_keep_alive { - dest: payment_info.receiver.into(), - value: payment_info.cost as u128, - }); + if let Ok(cost) = payment_info.cost.parse::() { + let transfer_call = polkadot::Call::Balances(BalancesCall::transfer_keep_alive { + dest: payment_info.receiver.into(), + value: cost, + }); - let remark = format!("{}:{}", para.relay_chain, para.para_id).as_bytes().to_vec(); - let remark_call = polkadot::Call::System(SystemCall::remark { remark }); + let remark = format!("{}:{}", para.relay_chain, para.para_id).as_bytes().to_vec(); + let remark_call = polkadot::Call::System(SystemCall::remark { remark }); - let batch_call = - polkadot::Call::Utility(UtilityCall::batch_all { calls: vec![transfer_call, remark_call] }); + let batch_call = polkadot::Call::Utility(UtilityCall::batch_all { + calls: vec![transfer_call, remark_call], + }); - Ok(batch_call) + Ok(batch_call) + } else { + log::error!( + target: LOG_TARGET, + "Failed to parse cost", + ); + Err(Error::PaymentValidationFailed) + } } diff --git a/shared/Cargo.toml b/shared/Cargo.toml index 6a4e71a..f49c820 100644 --- a/shared/Cargo.toml +++ b/shared/Cargo.toml @@ -11,7 +11,7 @@ license.workspace = true [dependencies] csv = "1.3.0" log = "0.4" -toml = "0.5.8" +toml = "0.8.8" serde = "1.0.193" serde_json = "1.0.108" subxt = "0.32.1" diff --git a/shared/src/config.rs b/shared/src/config.rs index 4058700..4db9d07 100644 --- a/shared/src/config.rs +++ b/shared/src/config.rs @@ -14,7 +14,6 @@ // along with RegionX. If not, see . use subxt::utils::AccountId32; -use types::Balance; const CONFIG_FILE: &str = "config.toml"; @@ -25,7 +24,9 @@ pub struct PaymentInfo { /// The account that the payment should be sent to. pub receiver: AccountId32, /// The cost of the payment. - pub cost: u64, + // + // Defined as a `String` since the `toml` crate has issues parsing `u128`. + pub cost: String, } #[derive(serde::Deserialize)]