This repository includes tools to:
- Compute and bin temporal Forman–Ricci curvature for blockchain transaction networks.
The curvature values are calculated per edge over time and then partitioned into multiple bins to analyze how different curvature ranges contribute to network dynamics. - Generate daily network snapshots and extract topological features*. These snapshots capture evolving structural patterns that can be mapped into feature sequences for machine learning.
- Label and prepare datasets for three predictive tasks that capture the structural evolution of dynamic graphs.
Each dataset is converted into time-windowed graph sequences and labeled for one of the following tasks:
Determines whether the number of edges in the network will increase in the following time window.
This task reflects the short-term expansion or contraction of the transaction network.
Estimates whether the count of top-1% high-volume (most active) nodes will increase in the next time window.
It focuses on identifying shifts in activity concentration and the emergence of influential participants.
Predicts whether the number of connected components in the graph will increase, indicating network fragmentation or reduced connectivity.
-
Input
Precomputed curvature-based CSV files are stored under: RicciResults/ricci_values//The dataset name should follow the pattern for example:
BEPRO_TFR_a3.00_b1.00.csv,BEPRO_TFR_a3.00_b1.00_bin1.csv, etc. -
Sequence Generation
The scriptnetwork_parser.pyprocesses each dataset and creates time-windowed network sequences in two formats:
- TDA-based sequences — topological descriptors extracted using KeplerMapper.
- Raw sequences — basic structural statistics such as node count, edge count, and average degree per window.
- Labeling
Each generated sequence is labeled automatically according to the three predictive task definitions:
- Task 1: Network Growth
- Task 2: Influential Node Count
- Task 3: Connected Components
- Output
- Feature sequences (
seq_tda.txtandseq_raw.txt) are saved under:Each task folder contains subdirectories for all processed datasets.GraphPulseResults/ ├── Sequence_task1/ ├── Sequence_task2/ └── Sequence_task3/ - Runtime and status logs are saved to:
GraphPulseResults/<DATASET>_run_times.csv