@@ -163,7 +163,16 @@ pub mod module {
163
163
let feeder = ensure_signed ( origin. clone ( ) )
164
164
. map ( Some )
165
165
. or_else ( |_| ensure_root ( origin) . map ( |_| None ) ) ?;
166
- Self :: do_feed_values ( feeder, values) ?;
166
+
167
+ let who = Self :: ensure_account ( feeder) ?;
168
+
169
+ // ensure account hasn't dispatched an updated yet
170
+ ensure ! (
171
+ HasDispatched :: <T , I >:: mutate( |set| set. insert( who. clone( ) ) ) ,
172
+ Error :: <T , I >:: AlreadyFeeded
173
+ ) ;
174
+
175
+ Self :: do_feed_values ( who, values) ?;
167
176
Ok ( Pays :: No . into ( ) )
168
177
}
169
178
}
@@ -193,21 +202,17 @@ impl<T: Config<I>, I: 'static> Pallet<T, I> {
193
202
T :: CombineData :: combine_data ( key, values, Self :: values ( key) )
194
203
}
195
204
196
- fn do_feed_values ( who : Option < T :: AccountId > , values : Vec < ( T :: OracleKey , T :: OracleValue ) > ) -> DispatchResult {
205
+ fn ensure_account ( who : Option < T :: AccountId > ) -> Result < T :: AccountId , DispatchError > {
197
206
// ensure feeder is authorized
198
- let who = if let Some ( who) = who {
207
+ if let Some ( who) = who {
199
208
ensure ! ( T :: Members :: contains( & who) , Error :: <T , I >:: NoPermission ) ;
200
- who
209
+ Ok ( who)
201
210
} else {
202
- T :: RootOperatorAccountId :: get ( )
203
- } ;
204
-
205
- // ensure account hasn't dispatched an updated yet
206
- ensure ! (
207
- HasDispatched :: <T , I >:: mutate( |set| set. insert( who. clone( ) ) ) ,
208
- Error :: <T , I >:: AlreadyFeeded
209
- ) ;
211
+ Ok ( T :: RootOperatorAccountId :: get ( ) )
212
+ }
213
+ }
210
214
215
+ fn do_feed_values ( who : T :: AccountId , values : Vec < ( T :: OracleKey , T :: OracleValue ) > ) -> DispatchResult {
211
216
let now = T :: Time :: now ( ) ;
212
217
for ( key, value) in & values {
213
218
let timestamped = TimestampedValue {
@@ -258,7 +263,7 @@ impl<T: Config<I>, I: 'static> DataProviderExtended<T::OracleKey, TimestampedVal
258
263
}
259
264
260
265
impl < T : Config < I > , I : ' static > DataFeeder < T :: OracleKey , T :: OracleValue , T :: AccountId > for Pallet < T , I > {
261
- fn feed_value ( who : T :: AccountId , key : T :: OracleKey , value : T :: OracleValue ) -> DispatchResult {
262
- Self :: do_feed_values ( Some ( who) , vec ! [ ( key, value) ] )
266
+ fn feed_value ( who : Option < T :: AccountId > , key : T :: OracleKey , value : T :: OracleValue ) -> DispatchResult {
267
+ Self :: do_feed_values ( Self :: ensure_account ( who) ? , vec ! [ ( key, value) ] )
263
268
}
264
269
}
0 commit comments