├── .flake8 ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── LICENSE ├── README.md ├── api_client.py ├── api_server.py ├── background_tasks.py ├── balance.py ├── classifier.py ├── compute_periods.py ├── docs ├── api.md ├── infra.md ├── migrations.md └── validator_api.md ├── event_listener.py ├── feature_selection.py ├── imgs ├── architecture.drawio ├── architecture.png ├── first_estimate.jpeg └── knn_slots_2048001_to_2164916.png ├── infra ├── Caddyfile ├── blockdreamer.service ├── blockdreamer.toml ├── blockgauge.service ├── blockprint-bg.service ├── blockprint.service ├── eleel.service └── lighthouse.toml ├── interactive.ipynb ├── load_all.fish ├── load_blocks.py ├── migrations └── 00_pr_grandine.sql ├── multi_classifier.py ├── naive ├── README.md ├── client_diversity.py └── naive_classifier.py ├── prepare_training_data.py ├── requirements-dev.txt ├── requirements.txt ├── scripts ├── start_background.sh └── start_server.sh ├── tests ├── __init__.py ├── data │ └── slot_1000000_to_1000256.json ├── data_proc │ ├── Lighthouse │ │ ├── 0x5316104db4a56be70b9ec5042b92caa38188747f40fd2a52a13d93c656fcaa4d.json │ │ ├── 0xa816b3ecd26d7f5b3cd5d9a25b07a7121a95e62a08f86e40f85d7a172c0ab2f5.json │ │ ├── 0xabd3e47e1782b354f501e1229064a4bb9b29f33b9453593c48d378c7c89dd474.json │ │ ├── 0xae7b22eaa79593d3cfcb1ed59e7ec82d7747f46eda593646dc81c4e2514c7e7d.json │ │ └── 0xc36d42882ab6885998c1a46fdc078eba073a0609e3896530b834734f58df805a.json │ ├── Nimbus │ │ └── 0xefe2a642cf42fdf9b23a22dfcaeddafd10caef43bb6687688271639d43ff14c5.json │ ├── Prysm │ │ ├── 0x876fb21e1cf5d22161283bde42f11bb085dea1db89d12567cd5546c4f6ce117e.json │ │ └── 0xf4f25e3367b8a5890365c2920ec75b862e0aa2021af914f7076e249dbdd17cf9.json │ └── Teku │ │ ├── 0x0c6a91c509fac920d987413814b72ef7ae40677cc00a27c3d9608e0b32d09433.json │ │ ├── 0x33f742aa8542903e10bc01271ab4e96220facca208440daec6d2838a6b6b1a8d.json │ │ ├── 0x444a4dd753ae694b8a60ae8b0f290a445eb59b16403733a4ad53471ea525365d.json │ │ ├── 0x5ea8d5e9813a4afa471b94140d3e70ad322c9c4f116dbf411c1e4750bb8ab330.json │ │ ├── 0x7d959839740bf50f0d2f0a8b7e484cb3fdd91518245c8e0037001b8bf52414f2.json │ │ ├── 0x9afee1bd3902c1eb370a6add9430bb5243e9cfc84b4fb06e34813fb36d06a265.json │ │ └── 0xcbe59bed5f497c27109916cf003124787ed53c39bc1b90c00cd1e3dd9ab7472b.json ├── test_classifier_persister.py ├── test_explode_gaps.py ├── test_prepare_training.py └── test_preprocessor.py └── train_all.fish /.flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | max-line-length = 99 3 | ignore = E731, W503, E203 -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/.github/workflows/ci.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/.gitignore -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/LICENSE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/README.md -------------------------------------------------------------------------------- /api_client.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/api_client.py -------------------------------------------------------------------------------- /api_server.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/api_server.py -------------------------------------------------------------------------------- /background_tasks.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/background_tasks.py -------------------------------------------------------------------------------- /balance.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/balance.py -------------------------------------------------------------------------------- /classifier.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/classifier.py -------------------------------------------------------------------------------- /compute_periods.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/compute_periods.py -------------------------------------------------------------------------------- /docs/api.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/docs/api.md -------------------------------------------------------------------------------- /docs/infra.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/docs/infra.md -------------------------------------------------------------------------------- /docs/migrations.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/docs/migrations.md -------------------------------------------------------------------------------- /docs/validator_api.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/docs/validator_api.md -------------------------------------------------------------------------------- /event_listener.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/event_listener.py -------------------------------------------------------------------------------- /feature_selection.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/feature_selection.py -------------------------------------------------------------------------------- /imgs/architecture.drawio: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/imgs/architecture.drawio -------------------------------------------------------------------------------- /imgs/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/imgs/architecture.png -------------------------------------------------------------------------------- /imgs/first_estimate.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/imgs/first_estimate.jpeg -------------------------------------------------------------------------------- /imgs/knn_slots_2048001_to_2164916.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/imgs/knn_slots_2048001_to_2164916.png -------------------------------------------------------------------------------- /infra/Caddyfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/infra/Caddyfile -------------------------------------------------------------------------------- /infra/blockdreamer.service: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/infra/blockdreamer.service -------------------------------------------------------------------------------- /infra/blockdreamer.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/infra/blockdreamer.toml -------------------------------------------------------------------------------- /infra/blockgauge.service: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/infra/blockgauge.service -------------------------------------------------------------------------------- /infra/blockprint-bg.service: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/infra/blockprint-bg.service -------------------------------------------------------------------------------- /infra/blockprint.service: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/infra/blockprint.service -------------------------------------------------------------------------------- /infra/eleel.service: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/infra/eleel.service -------------------------------------------------------------------------------- /infra/lighthouse.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/infra/lighthouse.toml -------------------------------------------------------------------------------- /interactive.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/interactive.ipynb -------------------------------------------------------------------------------- /load_all.fish: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/load_all.fish -------------------------------------------------------------------------------- /load_blocks.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/load_blocks.py -------------------------------------------------------------------------------- /migrations/00_pr_grandine.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/migrations/00_pr_grandine.sql -------------------------------------------------------------------------------- /multi_classifier.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/multi_classifier.py -------------------------------------------------------------------------------- /naive/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/naive/README.md -------------------------------------------------------------------------------- /naive/client_diversity.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/naive/client_diversity.py -------------------------------------------------------------------------------- /naive/naive_classifier.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/naive/naive_classifier.py -------------------------------------------------------------------------------- /prepare_training_data.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/prepare_training_data.py -------------------------------------------------------------------------------- /requirements-dev.txt: -------------------------------------------------------------------------------- 1 | black==23.9.1 2 | flake8==6.1.0 3 | pytest==7.4.2 4 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/requirements.txt -------------------------------------------------------------------------------- /scripts/start_background.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/scripts/start_background.sh -------------------------------------------------------------------------------- /scripts/start_server.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/scripts/start_server.sh -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/data/slot_1000000_to_1000256.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data/slot_1000000_to_1000256.json -------------------------------------------------------------------------------- /tests/data_proc/Lighthouse/0x5316104db4a56be70b9ec5042b92caa38188747f40fd2a52a13d93c656fcaa4d.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Lighthouse/0x5316104db4a56be70b9ec5042b92caa38188747f40fd2a52a13d93c656fcaa4d.json -------------------------------------------------------------------------------- /tests/data_proc/Lighthouse/0xa816b3ecd26d7f5b3cd5d9a25b07a7121a95e62a08f86e40f85d7a172c0ab2f5.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Lighthouse/0xa816b3ecd26d7f5b3cd5d9a25b07a7121a95e62a08f86e40f85d7a172c0ab2f5.json -------------------------------------------------------------------------------- /tests/data_proc/Lighthouse/0xabd3e47e1782b354f501e1229064a4bb9b29f33b9453593c48d378c7c89dd474.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Lighthouse/0xabd3e47e1782b354f501e1229064a4bb9b29f33b9453593c48d378c7c89dd474.json -------------------------------------------------------------------------------- /tests/data_proc/Lighthouse/0xae7b22eaa79593d3cfcb1ed59e7ec82d7747f46eda593646dc81c4e2514c7e7d.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Lighthouse/0xae7b22eaa79593d3cfcb1ed59e7ec82d7747f46eda593646dc81c4e2514c7e7d.json -------------------------------------------------------------------------------- /tests/data_proc/Lighthouse/0xc36d42882ab6885998c1a46fdc078eba073a0609e3896530b834734f58df805a.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Lighthouse/0xc36d42882ab6885998c1a46fdc078eba073a0609e3896530b834734f58df805a.json -------------------------------------------------------------------------------- /tests/data_proc/Nimbus/0xefe2a642cf42fdf9b23a22dfcaeddafd10caef43bb6687688271639d43ff14c5.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Nimbus/0xefe2a642cf42fdf9b23a22dfcaeddafd10caef43bb6687688271639d43ff14c5.json -------------------------------------------------------------------------------- /tests/data_proc/Prysm/0x876fb21e1cf5d22161283bde42f11bb085dea1db89d12567cd5546c4f6ce117e.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Prysm/0x876fb21e1cf5d22161283bde42f11bb085dea1db89d12567cd5546c4f6ce117e.json -------------------------------------------------------------------------------- /tests/data_proc/Prysm/0xf4f25e3367b8a5890365c2920ec75b862e0aa2021af914f7076e249dbdd17cf9.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Prysm/0xf4f25e3367b8a5890365c2920ec75b862e0aa2021af914f7076e249dbdd17cf9.json -------------------------------------------------------------------------------- /tests/data_proc/Teku/0x0c6a91c509fac920d987413814b72ef7ae40677cc00a27c3d9608e0b32d09433.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Teku/0x0c6a91c509fac920d987413814b72ef7ae40677cc00a27c3d9608e0b32d09433.json -------------------------------------------------------------------------------- /tests/data_proc/Teku/0x33f742aa8542903e10bc01271ab4e96220facca208440daec6d2838a6b6b1a8d.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Teku/0x33f742aa8542903e10bc01271ab4e96220facca208440daec6d2838a6b6b1a8d.json -------------------------------------------------------------------------------- /tests/data_proc/Teku/0x444a4dd753ae694b8a60ae8b0f290a445eb59b16403733a4ad53471ea525365d.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Teku/0x444a4dd753ae694b8a60ae8b0f290a445eb59b16403733a4ad53471ea525365d.json -------------------------------------------------------------------------------- /tests/data_proc/Teku/0x5ea8d5e9813a4afa471b94140d3e70ad322c9c4f116dbf411c1e4750bb8ab330.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Teku/0x5ea8d5e9813a4afa471b94140d3e70ad322c9c4f116dbf411c1e4750bb8ab330.json -------------------------------------------------------------------------------- /tests/data_proc/Teku/0x7d959839740bf50f0d2f0a8b7e484cb3fdd91518245c8e0037001b8bf52414f2.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Teku/0x7d959839740bf50f0d2f0a8b7e484cb3fdd91518245c8e0037001b8bf52414f2.json -------------------------------------------------------------------------------- /tests/data_proc/Teku/0x9afee1bd3902c1eb370a6add9430bb5243e9cfc84b4fb06e34813fb36d06a265.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Teku/0x9afee1bd3902c1eb370a6add9430bb5243e9cfc84b4fb06e34813fb36d06a265.json -------------------------------------------------------------------------------- /tests/data_proc/Teku/0xcbe59bed5f497c27109916cf003124787ed53c39bc1b90c00cd1e3dd9ab7472b.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/data_proc/Teku/0xcbe59bed5f497c27109916cf003124787ed53c39bc1b90c00cd1e3dd9ab7472b.json -------------------------------------------------------------------------------- /tests/test_classifier_persister.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/test_classifier_persister.py -------------------------------------------------------------------------------- /tests/test_explode_gaps.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/test_explode_gaps.py -------------------------------------------------------------------------------- /tests/test_prepare_training.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/test_prepare_training.py -------------------------------------------------------------------------------- /tests/test_preprocessor.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/tests/test_preprocessor.py -------------------------------------------------------------------------------- /train_all.fish: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sigp/blockprint/HEAD/train_all.fish --------------------------------------------------------------------------------