From d690884b395fec3a165d8ed84461a9402f1f7f35 Mon Sep 17 00:00:00 2001 From: Bryan Chen Date: Wed, 8 Dec 2021 22:38:46 +1300 Subject: [PATCH 1/5] fix oracle origin check --- oracle/src/lib.rs | 22 +++++++++++++--------- oracle/src/tests.rs | 15 +++++++++++++++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/oracle/src/lib.rs b/oracle/src/lib.rs index 767580789..f376791e5 100644 --- a/oracle/src/lib.rs +++ b/oracle/src/lib.rs @@ -160,7 +160,8 @@ pub mod module { values: Vec<(T::OracleKey, T::OracleValue)>, ) -> DispatchResultWithPostInfo { let feeder = ensure_signed(origin.clone()) - .or_else(|_| ensure_root(origin).map(|_| T::RootOperatorAccountId::get()))?; + .map(Some) + .or_else(|_| ensure_root(origin).map(|_| None))?; Self::do_feed_values(feeder, values)?; Ok(Pays::No.into()) } @@ -219,12 +220,16 @@ impl, I: 'static> Pallet { T::CombineData::combine_data(key, values, Self::values(key)) } - fn do_feed_values(who: T::AccountId, values: Vec<(T::OracleKey, T::OracleValue)>) -> DispatchResult { + fn do_feed_values(who: Option, values: Vec<(T::OracleKey, T::OracleValue)>) -> DispatchResult { // ensure feeder is authorized - ensure!( - T::Members::contains(&who) || who == T::RootOperatorAccountId::get(), - Error::::NoPermission - ); + if let Some(ref who) = who { + ensure!( + T::Members::contains(who), + Error::::NoPermission + ); + } + + let who = who.unwrap_or_else(|| T::RootOperatorAccountId::get()); // ensure account hasn't dispatched an updated yet ensure!( @@ -273,7 +278,7 @@ impl, I: 'static> DataProviderExtended Option> { Self::get_no_op(key) } - #[allow(clippy::complexity)] + fn get_all_values() -> Vec<(T::OracleKey, Option>)> { Self::get_all_values() } @@ -281,7 +286,6 @@ impl, I: 'static> DataProviderExtended, I: 'static> DataFeeder for Pallet { fn feed_value(who: T::AccountId, key: T::OracleKey, value: T::OracleValue) -> DispatchResult { - Self::do_feed_values(who, vec![(key, value)])?; - Ok(()) + Self::do_feed_values(Some(who), vec![(key, value)]) } } diff --git a/oracle/src/tests.rs b/oracle/src/tests.rs index 6ff2819e4..2cf9bb7ac 100644 --- a/oracle/src/tests.rs +++ b/oracle/src/tests.rs @@ -88,6 +88,21 @@ fn should_feed_values_from_root() { }); } +#[test] +fn should_not_feed_values_from_root_directly() { + new_test_ext().execute_with(|| { + let root_feeder: AccountId = RootOperatorAccountId::get(); + + assert_noop!( + ModuleOracle::feed_values( + Origin::signed(root_feeder), + vec![(50, 1000), (51, 900), (52, 800)] + ), + Error::::NoPermission, + ); + }); +} + #[test] fn should_update_is_updated() { new_test_ext().execute_with(|| { From c1cc141b4c5b086e6c96aa750075c3b2e0b2de86 Mon Sep 17 00:00:00 2001 From: Bryan Chen Date: Wed, 8 Dec 2021 22:41:04 +1300 Subject: [PATCH 2/5] update --- oracle/src/lib.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/oracle/src/lib.rs b/oracle/src/lib.rs index f376791e5..6ca4e06d3 100644 --- a/oracle/src/lib.rs +++ b/oracle/src/lib.rs @@ -222,14 +222,15 @@ impl, I: 'static> Pallet { fn do_feed_values(who: Option, values: Vec<(T::OracleKey, T::OracleValue)>) -> DispatchResult { // ensure feeder is authorized - if let Some(ref who) = who { + let who = if let Some(who) = who { ensure!( - T::Members::contains(who), + T::Members::contains(&who), Error::::NoPermission ); - } - - let who = who.unwrap_or_else(|| T::RootOperatorAccountId::get()); + who + } else { + T::RootOperatorAccountId::get() + }; // ensure account hasn't dispatched an updated yet ensure!( From 121e58dd4d02df80efb1c1ddac11e15ca0a6305f Mon Sep 17 00:00:00 2001 From: Bryan Chen Date: Wed, 8 Dec 2021 22:48:33 +1300 Subject: [PATCH 3/5] fmt --- oracle/src/lib.rs | 5 +---- oracle/src/tests.rs | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/oracle/src/lib.rs b/oracle/src/lib.rs index 6ca4e06d3..c9f0fc122 100644 --- a/oracle/src/lib.rs +++ b/oracle/src/lib.rs @@ -223,10 +223,7 @@ impl, I: 'static> Pallet { fn do_feed_values(who: Option, values: Vec<(T::OracleKey, T::OracleValue)>) -> DispatchResult { // ensure feeder is authorized let who = if let Some(who) = who { - ensure!( - T::Members::contains(&who), - Error::::NoPermission - ); + ensure!(T::Members::contains(&who), Error::::NoPermission); who } else { T::RootOperatorAccountId::get() diff --git a/oracle/src/tests.rs b/oracle/src/tests.rs index 2cf9bb7ac..928e34b89 100644 --- a/oracle/src/tests.rs +++ b/oracle/src/tests.rs @@ -94,10 +94,7 @@ fn should_not_feed_values_from_root_directly() { let root_feeder: AccountId = RootOperatorAccountId::get(); assert_noop!( - ModuleOracle::feed_values( - Origin::signed(root_feeder), - vec![(50, 1000), (51, 900), (52, 800)] - ), + ModuleOracle::feed_values(Origin::signed(root_feeder), vec![(50, 1000), (51, 900), (52, 800)]), Error::::NoPermission, ); }); From 0e9927b41734b78f7dd35ebfbbfe8bb70dcd6cf4 Mon Sep 17 00:00:00 2001 From: Bryan Chen Date: Thu, 9 Dec 2021 11:10:58 +1300 Subject: [PATCH 4/5] update --- oracle/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/oracle/src/lib.rs b/oracle/src/lib.rs index c9f0fc122..8100ab33c 100644 --- a/oracle/src/lib.rs +++ b/oracle/src/lib.rs @@ -277,6 +277,7 @@ impl, I: 'static> DataProviderExtended Vec<(T::OracleKey, Option>)> { Self::get_all_values() } From 127741118b49056684bd34badee938ba029c1c7f Mon Sep 17 00:00:00 2001 From: Bryan Chen Date: Thu, 9 Dec 2021 13:38:22 +1300 Subject: [PATCH 5/5] update --- oracle/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oracle/src/lib.rs b/oracle/src/lib.rs index 8100ab33c..0a037dea7 100644 --- a/oracle/src/lib.rs +++ b/oracle/src/lib.rs @@ -277,7 +277,7 @@ impl, I: 'static> DataProviderExtended Vec<(T::OracleKey, Option>)> { Self::get_all_values() }