Skip to content

Commit 4ab71b5

Browse files
authored
allow root to feed values (#201)
1 parent de957f9 commit 4ab71b5

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

oracle/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ mod tests;
88
mod timestamped_value;
99

1010
use codec::Encode;
11+
pub use default_combine_data::DefaultCombineData;
1112
use frame_support::{
1213
decl_error, decl_event, decl_module, decl_storage, ensure,
1314
traits::{ChangeMembers, Get, InitializeMembers, Time},
@@ -25,8 +26,7 @@ use sp_std::{convert::TryInto, prelude::*, vec};
2526
// FIXME: `pallet/frame-` prefix should be used for all pallet modules, but currently `frame_system`
2627
// would cause compiling error in `decl_module!` and `construct_runtime!`
2728
// #3295 https://github.com/paritytech/substrate/issues/3295
28-
pub use default_combine_data::DefaultCombineData;
29-
use frame_system::{self as system, ensure_none, ensure_signed};
29+
use frame_system::{self as system, ensure_none, ensure_root, ensure_signed};
3030
pub use orml_traits::{CombineData, DataProvider, DataProviderExtended, OnNewData, OnRedundantCall};
3131
use orml_utilities::OrderedSet;
3232
pub use timestamped_value::TimestampedValue;
@@ -124,7 +124,7 @@ decl_module! {
124124
// we can skip doing it here again.
125125
_signature: <T::AuthorityId as RuntimeAppPublic>::Signature,
126126
) {
127-
ensure_none(origin)?;
127+
ensure_none(origin.clone()).or_else(|_| ensure_root(origin))?;
128128
let who = Self::members().0[index as usize].clone();
129129
Self::_feed_values(who, values)?;
130130
}

oracle/src/tests.rs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use frame_support::{
1111
unsigned::ValidateUnsigned,
1212
};
1313
use sp_runtime::{
14-
testing::UintAuthorityId,
14+
testing::{TestSignature, UintAuthorityId},
1515
transaction_validity::{InvalidTransaction, TransactionSource, TransactionValidityError},
1616
RuntimeAppPublic,
1717
};
@@ -76,6 +76,44 @@ fn should_feed_values() {
7676
});
7777
}
7878

79+
#[test]
80+
fn should_feed_values_from_root() {
81+
new_test_ext().execute_with(|| {
82+
let account_id: AccountId = 1;
83+
84+
assert_ok!(ModuleOracle::feed_values(
85+
Origin::ROOT,
86+
vec![(50, 1000), (51, 900), (52, 800)],
87+
0,
88+
TestSignature(0, vec![])
89+
));
90+
91+
assert_eq!(
92+
ModuleOracle::raw_values(&account_id, &50),
93+
Some(TimestampedValue {
94+
value: 1000,
95+
timestamp: 12345,
96+
})
97+
);
98+
99+
assert_eq!(
100+
ModuleOracle::raw_values(&account_id, &51),
101+
Some(TimestampedValue {
102+
value: 900,
103+
timestamp: 12345,
104+
})
105+
);
106+
107+
assert_eq!(
108+
ModuleOracle::raw_values(&account_id, &52),
109+
Some(TimestampedValue {
110+
value: 800,
111+
timestamp: 12345,
112+
})
113+
);
114+
});
115+
}
116+
79117
#[test]
80118
fn should_update_is_updated() {
81119
new_test_ext().execute_with(|| {

0 commit comments

Comments
 (0)