let logic_call_executed_events = web3
    .check_for_events(
        end_search.clone(),
        Some(current_block.clone()),
        vec![gravity_contract_address],
        vec![LOGIC_CALL_EVENT_SIG],
    )
    .await;
for event in logic_call_executed_events {
    match LogicCallExecutedEvent::from_log(&event) {
        Ok(call) => {
            trace!(
                "{} LogicCall event nonce {} last event nonce",
                call.event_nonce,
                last_event_nonce
            );
            if upcast(call.event_nonce) == last_event_nonce && event.block_number.is_some()
            {
                return event.block_number.unwrap();
            }
        }
        Err(e) => error!("Got ERC20Deployed event that we can't parse {}", e),
    }
}
impl LogicCallExecutedEvent {
    pub fn from_log(_input: &Log) -> Result<LogicCallExecutedEvent, GravityError> {
        unimplemented!()
    }
    // snip...
}
let logic_calls = LogicCallExecutedEvent::from_logs(&logic_calls)?;
