def METHOD_NAME(args: argparse.Namespace) -> None:
    if args.start is None or args.end is None:
        raise ValueError("Set --end  --start")
    bounds: Optional[BlockBounds] = None
    if args.start is not None:
        bounds = BlockBounds(starting_block=args.start, ending_block=args.end)
    logger.info(f"Materializing NFT events to datastore: {args.datastore}")
    logger.info(f"Block bounds: {bounds}")
    blockchain_type = AvailableBlockchainType(args.blockchain)
    label_model = _get_label_model(blockchain_type)
    with yield_db_session_ctx() as db_session, contextlib.closing(
        sqlite3.connect(args.datastore)
    ) as moonstream_datastore:
        last_saved_block = get_last_saved_block(moonstream_datastore, args.blockchain)
        logger.info(f"Last saved block: {last_saved_block}")
        if last_saved_block and last_saved_block >= bounds.starting_block:
            logger.info(
                f"Skipping blocks {bounds.starting_block}-{last_saved_block}, starting from {last_saved_block + 1}"
            )
            bounds.starting_block = last_saved_block + 1
        crawl_erc721_labels(
            db_session,
            moonstream_datastore,
            label_model,
            start_block=bounds.starting_block,
            end_block=bounds.ending_block,
            batch_size=args.batch_size,
        )