async fn check_and_apply_block(
    blockchain: &Blockchain,
    parent_ref: Arc<Ref>,
    block: Block,
    watch_msg_box: &mut MessageBox<WatchMsg>
) -> Result<Option<Arc<Ref>>, Error>