kopia lustrzana https://github.com/bugout-dev/moonstream
				
				
				
			Add mints and transfers connections.
							rodzic
							
								
									306e4c5ac6
								
							
						
					
					
						commit
						531b98f74d
					
				| 
						 | 
				
			
			@ -19,6 +19,7 @@ from .derive import (
 | 
			
		|||
    qurtile_generating,
 | 
			
		||||
    mint_holding_times,
 | 
			
		||||
    transfer_holding_times,
 | 
			
		||||
    transfers_mints_connection_table,
 | 
			
		||||
)
 | 
			
		||||
from .materialize import create_dataset
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -33,6 +34,7 @@ derive_functions = {
 | 
			
		|||
    "current_values_distribution": current_values_distribution,
 | 
			
		||||
    "transfer_statistics_by_address": transfer_statistics_by_address,
 | 
			
		||||
    # "qurtile_generating": qurtile_generating,
 | 
			
		||||
    "transfers_mints_connection_table": transfers_mints_connection_table,
 | 
			
		||||
    "mint_holding_times": mint_holding_times,
 | 
			
		||||
    "transfer_holding_times": transfer_holding_times,
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -55,7 +57,7 @@ def handle_filter_data(args: argparse.Namespace) -> None:
 | 
			
		|||
 | 
			
		||||
    with contextlib.closing(sqlite3.connect(args.source)) as source_conn:
 | 
			
		||||
 | 
			
		||||
        if args.target == args.source:
 | 
			
		||||
        if args.target == args.source and args.source is not None:
 | 
			
		||||
            sqlite_path = f"{args.target}.dump"
 | 
			
		||||
        else:
 | 
			
		||||
            sqlite_path = args.target
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -286,6 +286,75 @@ def qurtile_generating(conn: sqlite3.Connection):
 | 
			
		|||
        logger.error(e)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def transfers_mints_connection_table(conn: sqlite3.Connection):
 | 
			
		||||
    """
 | 
			
		||||
    Create cinnection transfers and mints
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    drop_transfers_mints_connection = "DROP TABLE IF EXISTS transfers_mints;"
 | 
			
		||||
    transfers_mints_connection = """
 | 
			
		||||
    CREATE transfers_mints as 
 | 
			
		||||
    select
 | 
			
		||||
        transfers.event_id,
 | 
			
		||||
        mints.mint_id
 | 
			
		||||
    from
 | 
			
		||||
        transfers
 | 
			
		||||
        inner join (
 | 
			
		||||
            select
 | 
			
		||||
                Max(posable_mints.mints_time) as mint_time,
 | 
			
		||||
                posable_mints.transfer_id as transfer_id
 | 
			
		||||
            from
 | 
			
		||||
                (
 | 
			
		||||
                    select
 | 
			
		||||
                        mint_id,
 | 
			
		||||
                        mints.timestamp as mints_time,
 | 
			
		||||
                        transfers.token_id,
 | 
			
		||||
                        transfers.timestamp,
 | 
			
		||||
                        transfers.event_id as transfer_id
 | 
			
		||||
                    from
 | 
			
		||||
                        transfers
 | 
			
		||||
                        inner join (
 | 
			
		||||
                            select
 | 
			
		||||
                                mints.event_id as mint_id,
 | 
			
		||||
                                mints.nft_address,
 | 
			
		||||
                                mints.token_id,
 | 
			
		||||
                                mints.timestamp
 | 
			
		||||
                            from
 | 
			
		||||
                                mints
 | 
			
		||||
                            group by
 | 
			
		||||
                                mints.nft_address,
 | 
			
		||||
                                mints.token_id,
 | 
			
		||||
                                mints.timestamp
 | 
			
		||||
                        ) as mints on transfers.nft_address = mints.nft_address
 | 
			
		||||
                        and transfers.token_id = mints.token_id
 | 
			
		||||
                        and mints.timestamp <= transfers.timestamp
 | 
			
		||||
                ) as posable_mints
 | 
			
		||||
            group by
 | 
			
		||||
                posable_mints.transfer_id
 | 
			
		||||
        ) as mint_time on mint_time.transfer_id = transfers.event_id
 | 
			
		||||
        inner join (
 | 
			
		||||
            select
 | 
			
		||||
                mints.event_id as mint_id,
 | 
			
		||||
                mints.nft_address,
 | 
			
		||||
                mints.token_id,
 | 
			
		||||
                mints.timestamp
 | 
			
		||||
            from
 | 
			
		||||
                mints
 | 
			
		||||
        ) as mints on transfers.nft_address = mints.nft_address
 | 
			
		||||
        and transfers.token_id = mints.token_id
 | 
			
		||||
        and mints.timestamp = mint_time.mint_time;
 | 
			
		||||
    """
 | 
			
		||||
    cur = conn.cursor()
 | 
			
		||||
    try:
 | 
			
		||||
        cur.execute(drop_transfers_mints_connection)
 | 
			
		||||
        cur.execute(transfers_mints_connection)
 | 
			
		||||
        conn.commit()
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        conn.rollback()
 | 
			
		||||
        logger.error("Could not create derived dataset: current_values_distribution")
 | 
			
		||||
        logger.error(e)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def mint_holding_times(conn: sqlite3.Connection):
 | 
			
		||||
 | 
			
		||||
    drop_mints_holding_table = "DROP TABLE IF EXISTS mint_holding_times;"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue