diff --git a/contracts/price-aggregator/src/events.rs b/contracts/price-aggregator/src/events.rs index 1b25ec4b..387471ed 100644 --- a/contracts/price-aggregator/src/events.rs +++ b/contracts/price-aggregator/src/events.rs @@ -43,4 +43,20 @@ pub trait EventsModule { #[indexed] epoch: u64, new_round_event: &NewRoundEvent, ); + + #[event("discard_round")] + fn discard_round_event( + &self, + #[indexed] from: &ManagedBuffer, + #[indexed] to: &ManagedBuffer, + #[indexed] round: usize, + ); + + #[event("add_submission")] + fn add_submission_event( + &self, + #[indexed] caller: &ManagedAddress, + #[indexed] price: &BigUint, + #[indexed] round: usize, + ); } diff --git a/contracts/price-aggregator/src/lib.rs b/contracts/price-aggregator/src/lib.rs index 31a1b149..cf3d6333 100644 --- a/contracts/price-aggregator/src/lib.rs +++ b/contracts/price-aggregator/src/lib.rs @@ -183,10 +183,15 @@ pub trait PriceAggregator: let accepted = !submissions.contains_key(&caller) && (is_first_submission || submission_timestamp >= first_submission_timestamp); if accepted { - submissions.insert(caller, price); + submissions.insert(caller.clone(), price.clone()); last_sub_time_mapper.set(current_timestamp); - - self.create_new_round(token_pair, submissions, decimals); + self.create_new_round(token_pair.clone(), submissions, decimals); + let wrapped_rounds = self.rounds().get(&token_pair); + let mut round_id = 0; + if wrapped_rounds.is_some() { + round_id = wrapped_rounds.unwrap().len(); + } + self.add_submission_event(&caller, &price, round_id); } self.oracle_status() @@ -282,6 +287,13 @@ pub trait PriceAggregator: .get() .push(&price_feed); self.emit_new_round_event(&token_pair, &price_feed); + } else { + let wrapped_rounds = self.rounds().get(&token_pair); + let mut round_id = 0; + if wrapped_rounds.is_some() { + round_id = wrapped_rounds.unwrap().len(); + } + self.discard_round_event(&token_pair.from.clone(), &token_pair.to.clone(), round_id); } }