git.delta.rocks / unique-network / refs/commits / 5a619a936664

difftreelog

fix(xcm) improve denythentry, deny transact xcm

Daniel Shiposha2022-08-30parent: #247c0b0.patch.diff
in: master

8 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4572,6 +4572,16 @@
 ]
 
 [[package]]
+name = "logtest"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb3e43a8657c1d64516dcc9db8ca03826a4aceaf89d5ce1b37b59f6ff0e43026"
+dependencies = [
+ "lazy_static",
+ "log",
+]
+
+[[package]]
 name = "lru"
 version = "0.6.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5148,7 +5158,9 @@
  "frame-system-rpc-runtime-api",
  "frame-try-runtime",
  "hex-literal",
+ "impl-trait-for-tuples",
  "log",
+ "logtest",
  "orml-tokens",
  "orml-traits",
  "orml-vesting",
@@ -8466,7 +8478,9 @@
  "frame-system-rpc-runtime-api",
  "frame-try-runtime",
  "hex-literal",
+ "impl-trait-for-tuples",
  "log",
+ "logtest",
  "orml-tokens",
  "orml-traits",
  "orml-vesting",
@@ -12206,7 +12220,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
 dependencies = [
- "cfg-if 0.1.10",
+ "cfg-if 1.0.0",
  "digest 0.10.3",
  "rand 0.8.5",
  "static_assertions",
@@ -12459,7 +12473,9 @@
  "frame-system-rpc-runtime-api",
  "frame-try-runtime",
  "hex-literal",
+ "impl-trait-for-tuples",
  "log",
+ "logtest",
  "orml-tokens",
  "orml-traits",
  "orml-vesting",
modifiedruntime/common/config/xcm.rsdiffbeforeafterboth
172 };172 };
173}173}
174
175pub trait TryPass {
176 fn try_pass<Call>(
177 origin: &MultiLocation,
178 message: &mut Xcm<Call>,
179 ) -> Result<(), ()>;
180}
181
182#[impl_trait_for_tuples::impl_for_tuples(30)]
183impl TryPass for Tuple {
184 fn try_pass<Call>(
185 origin: &MultiLocation,
186 message: &mut Xcm<Call>,
187 ) -> Result<(), ()> {
188 for_tuples!( #(
189 Tuple::try_pass(origin, message)?;
190 )* );
191
192 Ok(())
193 }
194}
174195
175pub struct DenyTransact;196pub struct DenyTransact;
176impl ShouldExecute for DenyTransact {197impl TryPass for DenyTransact {
177 fn should_execute<Call>(198 fn try_pass<Call>(
178 _origin: &MultiLocation,199 _origin: &MultiLocation,
179 message: &mut Xcm<Call>,200 message: &mut Xcm<Call>,
180 _max_weight: Weight,
181 _weight_credit: &mut Weight,
182 ) -> Result<(), ()> {201 ) -> Result<(), ()> {
183 let transact_inst = message202 let transact_inst = message
184 .0203 .0
203/// If it passes the Deny, and matches one of the Allow cases then it is let through.222/// If it passes the Deny, and matches one of the Allow cases then it is let through.
204pub struct DenyThenTry<Deny, Allow>(PhantomData<Deny>, PhantomData<Allow>)223pub struct DenyThenTry<Deny, Allow>(PhantomData<Deny>, PhantomData<Allow>)
205where224where
206 Deny: ShouldExecute,225 Deny: TryPass,
207 Allow: ShouldExecute;226 Allow: ShouldExecute;
208227
209impl<Deny, Allow> ShouldExecute for DenyThenTry<Deny, Allow>228impl<Deny, Allow> ShouldExecute for DenyThenTry<Deny, Allow>
210where229where
211 Deny: ShouldExecute,230 Deny: TryPass,
212 Allow: ShouldExecute,231 Allow: ShouldExecute,
213{232{
214 fn should_execute<Call>(233 fn should_execute<Call>(
217 max_weight: Weight,236 max_weight: Weight,
218 weight_credit: &mut Weight,237 weight_credit: &mut Weight,
219 ) -> Result<(), ()> {238 ) -> Result<(), ()> {
220 Deny::should_execute(origin, message, max_weight, weight_credit)?;239 Deny::try_pass(origin, message)?;
221 Allow::should_execute(origin, message, max_weight, weight_credit)240 Allow::should_execute(origin, message, max_weight, weight_credit)
222 }241 }
223}242}
modifiedruntime/common/tests/xcm.rsdiffbeforeafterboth
--- a/runtime/common/tests/xcm.rs
+++ b/runtime/common/tests/xcm.rs
@@ -34,7 +34,7 @@
 }
 
 #[test]
-fn xcm_barrier_does_not_allow_transact() {
+fn xcm_barrier_denies_transact() {
     // We have a `AllowTopLevelPaidExecutionFrom` barrier,
     // so an XCM program should start from one of the following commands: 
     // * `WithdrawAsset`
modifiedruntime/opal/Cargo.tomldiffbeforeafterboth
--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -463,6 +463,11 @@
 pallet-foreing-assets = { default-features = false, path = "../../pallets/foreing-assets" }
 
 ################################################################################
+# Other Dependencies
+
+impl-trait-for-tuples = "0.2.2"
+
+################################################################################
 # Dev Dependencies
 
 [dev-dependencies.logtest]
modifiedruntime/quartz/Cargo.tomldiffbeforeafterboth
--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -471,6 +471,11 @@
 pallet-foreing-assets = { default-features = false, path = "../../pallets/foreing-assets" }
 
 ################################################################################
+# Other Dependencies
+
+impl-trait-for-tuples = "0.2.2"
+
+################################################################################
 # Dev Dependencies
 
 [dev-dependencies.logtest]
modifiedruntime/quartz/src/xcm_config.rsdiffbeforeafterboth
--- a/runtime/quartz/src/xcm_config.rs
+++ b/runtime/quartz/src/xcm_config.rs
@@ -41,7 +41,7 @@
 };
 use xcm_executor::{
     {Config, XcmExecutor},
-    traits::{Convert as ConvertXcm, FilterAssetLocation, JustTry, MatchesFungible, ShouldExecute},
+    traits::{Convert as ConvertXcm, FilterAssetLocation, JustTry, MatchesFungible},
 };
 
 use up_common::{
@@ -93,12 +93,10 @@
 
 // Allow xcm exchange only with locations in list
 pub struct DenyExchangeWithUnknownLocation;
-impl ShouldExecute for DenyExchangeWithUnknownLocation {
-    fn should_execute<Call>(
+impl TryPass for DenyExchangeWithUnknownLocation {
+    fn try_pass<Call>(
         origin: &MultiLocation,
         message: &mut Xcm<Call>,
-        _max_weight: Weight,
-        _weight_credit: &mut Weight,
     ) -> Result<(), ()> {
 
         // Check if deposit or transfer belongs to allowed parachains
@@ -126,9 +124,11 @@
 }
 
 pub type Barrier = DenyThenTry<
-    DenyExchangeWithUnknownLocation,
     (
         DenyTransact,
+        DenyExchangeWithUnknownLocation,
+    ),
+    (
         TakeWeightCredit,
         AllowTopLevelPaidExecutionFrom<Everything>,
         // Parent and its exec plurality get free execution
modifiedruntime/unique/Cargo.tomldiffbeforeafterboth
--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -463,6 +463,11 @@
 pallet-foreing-assets = { default-features = false, path = "../../pallets/foreing-assets" }
 
 ################################################################################
+# Other Dependencies
+
+impl-trait-for-tuples = "0.2.2"
+
+################################################################################
 # Dev Dependencies
 
 [dev-dependencies.logtest]
modifiedruntime/unique/src/xcm_config.rsdiffbeforeafterboth
--- a/runtime/unique/src/xcm_config.rs
+++ b/runtime/unique/src/xcm_config.rs
@@ -41,7 +41,7 @@
 };
 use xcm_executor::{
     {Config, XcmExecutor},
-    traits::{Convert as ConvertXcm, FilterAssetLocation, JustTry, MatchesFungible, ShouldExecute},
+    traits::{Convert as ConvertXcm, FilterAssetLocation, JustTry, MatchesFungible},
 };
 
 use up_common::{
@@ -67,9 +67,11 @@
 
 
 pub type Barrier = DenyThenTry<
-    DenyExchangeWithUnknownLocation,
     (
         DenyTransact,
+        DenyExchangeWithUnknownLocation,
+    ),
+    (
         TakeWeightCredit,
         AllowTopLevelPaidExecutionFrom<Everything>,
         // Parent and its exec plurality get free execution
@@ -98,12 +100,10 @@
 
 // Allow xcm exchange only with locations in list
 pub struct DenyExchangeWithUnknownLocation;
-impl ShouldExecute for DenyExchangeWithUnknownLocation {
-    fn should_execute<Call>(
+impl TryPass for DenyExchangeWithUnknownLocation {
+    fn try_pass<Call>(
         origin: &MultiLocation,
         message: &mut Xcm<Call>,
-        _max_weight: Weight,
-        _weight_credit: &mut Weight,
     ) -> Result<(), ()> {
 
         // Check if deposit or transfer belongs to allowed parachains