29 lines
888 B
Rust
29 lines
888 B
Rust
use substreams::store::{StoreSet, StoreSetInt64};
|
|
|
|
use crate::pb::uniswap::v4::{
|
|
events::{pool_event, PoolEvent},
|
|
Events,
|
|
};
|
|
|
|
use substreams::store::StoreNew;
|
|
|
|
#[substreams::handlers::store]
|
|
pub fn store_pool_current_tick(events: Events, store: StoreSetInt64) {
|
|
events
|
|
.pool_events
|
|
.into_iter()
|
|
.filter_map(event_to_current_tick)
|
|
.for_each(|(pool, ordinal, new_tick_index)| {
|
|
store.set(ordinal, format!("pool:{0}", pool), &new_tick_index.into())
|
|
});
|
|
}
|
|
fn event_to_current_tick(event: PoolEvent) -> Option<(String, u64, i32)> {
|
|
match event.r#type.as_ref().unwrap() {
|
|
pool_event::Type::Initialize(initialize) => {
|
|
Some((event.pool_id, event.log_ordinal, initialize.tick))
|
|
}
|
|
pool_event::Type::Swap(swap) => Some((event.pool_id, event.log_ordinal, swap.tick)),
|
|
_ => None,
|
|
}
|
|
}
|