From 24da2fc8b3decd946454bcdb495eb2c4c4bbd4a8 Mon Sep 17 00:00:00 2001 From: Marcin Pawlowski Date: Thu, 30 Jul 2026 18:57:10 +0200 Subject: [PATCH] Importing tsi-sim v3 --- .../simulators/tsi/tsi-sim-pernode/.gitignore | 24 + tools/simulators/tsi/tsi-sim-pernode/Makefile | 52 ++ .../simulators/tsi/tsi-sim-pernode/README.md | 150 ++++++ .../configs/blend-hops-delay.yaml | 25 + .../tsi-sim-pernode/configs/block-rate.yaml | 26 + .../tsi/tsi-sim-pernode/configs/default.yaml | 28 + .../tsi/tsi-sim-pernode/configs/expdist.yaml | 20 + .../configs/fullscale-small.yaml | 20 + .../tsi-sim-pernode/configs/fullscale.yaml | 22 + .../tsi-sim-pernode/configs/nscaling-a.yaml | 23 + .../tsi-sim-pernode/configs/nscaling-b.yaml | 26 + .../tsi-sim-pernode/configs/nscaling32-a.yaml | 20 + .../tsi-sim-pernode/configs/nscaling32-b.yaml | 23 + .../tsi-sim-pernode/configs/pareto133.yaml | 21 + .../tsi-sim-pernode/configs/reorg-depth.yaml | 25 + .../tsi-sim-pernode/configs/rho-boundary.yaml | 27 + .../tsi/tsi-sim-pernode/configs/smoke.yaml | 21 + .../tsi-sim-pernode/configs/uncle-window.yaml | 26 + .../tsi-sim-pernode/configs/window-scale.yaml | 22 + .../configs/window-uncles.yaml | 23 + .../tsi/tsi-sim-pernode/pyproject.toml | 47 ++ .../tsi/tsi-sim-pernode/requirements-dev.txt | 1 + .../tsi/tsi-sim-pernode/requirements.txt | 1 + .../tsi-sim-pernode/scripts/adversary_figs.py | 91 ++++ .../tsi-sim-pernode/scripts/adversary_grid.py | 74 +++ .../tsi-sim-pernode/scripts/appendix_fluct.py | 173 +++++++ .../scripts/bootstrap_dynamics.py | 100 ++++ .../tsi/tsi-sim-pernode/scripts/build_html.py | 91 ++++ .../tsi/tsi-sim-pernode/scripts/capstone.py | 53 ++ .../tsi/tsi-sim-pernode/scripts/churn.py | 78 +++ .../tsi/tsi-sim-pernode/scripts/clock_skew.py | 89 ++++ .../scripts/dynamic_withhold.py | 293 +++++++++++ .../scripts/hops_delay_grid.py | 60 +++ .../tsi-sim-pernode/scripts/jitter_grid.py | 61 +++ .../tsi-sim-pernode/scripts/make_figures.py | 14 + .../scripts/nscaling_analysis.py | 161 ++++++ .../scripts/regenerate_extra_figs.py | 57 +++ .../tsi-sim-pernode/scripts/reorg_depth.py | 193 +++++++ .../tsi-sim-pernode/scripts/reward_mandate.py | 119 +++++ .../scripts/rho_boundary_analysis.py | 90 ++++ .../tsi-sim-pernode/scripts/run_all_reruns.sh | 43 ++ .../tsi/tsi-sim-pernode/scripts/run_sweep.py | 14 + .../tsi-sim-pernode/scripts/selfish_mining.py | 136 +++++ .../scripts/selfish_rewards.py | 144 ++++++ .../tsi-sim-pernode/scripts/split_report.py | 214 ++++++++ .../tsi-sim-pernode/scripts/stake_vs_delay.py | 101 ++++ .../tsi-sim-pernode/scripts/topology_probe.py | 95 ++++ .../tsi/tsi-sim-pernode/scripts/verify.py | 14 + .../scripts/window_scale_analysis.py | 73 +++ .../tsi-sim-pernode/src/tsi_sim/__init__.py | 3 + .../tsi-sim-pernode/src/tsi_sim/blocktree.py | 480 ++++++++++++++++++ .../src/tsi_sim/concurrency.py | 62 +++ .../tsi/tsi-sim-pernode/src/tsi_sim/config.py | 371 ++++++++++++++ .../tsi-sim-pernode/src/tsi_sim/constants.py | 63 +++ .../tsi/tsi-sim-pernode/src/tsi_sim/engine.py | 167 ++++++ .../tsi/tsi-sim-pernode/src/tsi_sim/epoch.py | 121 +++++ .../tsi/tsi-sim-pernode/src/tsi_sim/fork.py | 78 +++ .../tsi-sim-pernode/src/tsi_sim/latency.py | 54 ++ .../tsi-sim-pernode/src/tsi_sim/lottery.py | 114 +++++ .../tsi-sim-pernode/src/tsi_sim/measure.py | 201 ++++++++ .../tsi-sim-pernode/src/tsi_sim/memguard.py | 68 +++ .../tsi-sim-pernode/src/tsi_sim/metrics.py | 82 +++ .../src/tsi_sim/plotting/__init__.py | 1 + .../src/tsi_sim/plotting/figures_pernode.py | 360 +++++++++++++ .../src/tsi_sim/plotting/make_figures.py | 83 +++ .../src/tsi_sim/plotting/style.py | 92 ++++ .../tsi/tsi-sim-pernode/src/tsi_sim/reorg.py | 73 +++ .../tsi/tsi-sim-pernode/src/tsi_sim/rng.py | 32 ++ .../tsi-sim-pernode/src/tsi_sim/selfish.py | 223 ++++++++ .../src/tsi_sim/selfish_mdp.py | 153 ++++++ .../tsi/tsi-sim-pernode/src/tsi_sim/stake.py | 32 ++ .../tsi/tsi-sim-pernode/src/tsi_sim/sweep.py | 341 +++++++++++++ .../tsi/tsi-sim-pernode/src/tsi_sim/theory.py | 60 +++ .../tsi-sim-pernode/src/tsi_sim/topology.py | 189 +++++++ .../tsi/tsi-sim-pernode/src/tsi_sim/tsi.py | 137 +++++ .../tsi/tsi-sim-pernode/src/tsi_sim/uncles.py | 135 +++++ .../tsi/tsi-sim-pernode/src/tsi_sim/verify.py | 95 ++++ .../tsi-sim-pernode/tests/test_blocktree.py | 54 ++ .../tsi-sim-pernode/tests/test_churn_pref.py | 51 ++ .../tsi-sim-pernode/tests/test_concurrency.py | 40 ++ .../tsi/tsi-sim-pernode/tests/test_config.py | 146 ++++++ .../tsi-sim-pernode/tests/test_early_stop.py | 34 ++ .../tsi/tsi-sim-pernode/tests/test_fork.py | 56 ++ .../tests/test_jitter_poisson.py | 63 +++ .../tsi/tsi-sim-pernode/tests/test_latency.py | 36 ++ .../tsi/tsi-sim-pernode/tests/test_lottery.py | 77 +++ .../tsi/tsi-sim-pernode/tests/test_measure.py | 79 +++ .../tsi/tsi-sim-pernode/tests/test_pernode.py | 309 +++++++++++ .../tsi/tsi-sim-pernode/tests/test_reorg.py | 52 ++ .../tsi/tsi-sim-pernode/tests/test_rng.py | 34 ++ .../tsi/tsi-sim-pernode/tests/test_selfish.py | 141 +++++ .../tests/test_slot_counting.py | 86 ++++ .../tsi/tsi-sim-pernode/tests/test_stake.py | 40 ++ .../tsi/tsi-sim-pernode/tests/test_sweep.py | 182 +++++++ .../tsi/tsi-sim-pernode/tests/test_theory.py | 40 ++ .../tests/test_theory_convergence.py | 49 ++ .../tests/test_tsi_counting.py | 89 ++++ .../tsi/tsi-sim-pernode/tests/test_uncles.py | 110 ++++ 98 files changed, 8942 insertions(+) create mode 100644 tools/simulators/tsi/tsi-sim-pernode/.gitignore create mode 100644 tools/simulators/tsi/tsi-sim-pernode/Makefile create mode 100644 tools/simulators/tsi/tsi-sim-pernode/README.md create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/blend-hops-delay.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/block-rate.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/default.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/expdist.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/fullscale-small.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/fullscale.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/nscaling-a.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/nscaling-b.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/nscaling32-a.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/nscaling32-b.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/pareto133.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/reorg-depth.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/rho-boundary.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/smoke.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/uncle-window.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/window-scale.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/configs/window-uncles.yaml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/pyproject.toml create mode 100644 tools/simulators/tsi/tsi-sim-pernode/requirements-dev.txt create mode 100644 tools/simulators/tsi/tsi-sim-pernode/requirements.txt create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/adversary_figs.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/adversary_grid.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/appendix_fluct.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/bootstrap_dynamics.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/build_html.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/capstone.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/churn.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/clock_skew.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/dynamic_withhold.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/hops_delay_grid.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/jitter_grid.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/make_figures.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/nscaling_analysis.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/regenerate_extra_figs.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/reorg_depth.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/reward_mandate.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/rho_boundary_analysis.py create mode 100755 tools/simulators/tsi/tsi-sim-pernode/scripts/run_all_reruns.sh create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/run_sweep.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/selfish_mining.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/selfish_rewards.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/split_report.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/stake_vs_delay.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/topology_probe.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/verify.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/scripts/window_scale_analysis.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/__init__.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/blocktree.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/concurrency.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/config.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/constants.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/engine.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/epoch.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/fork.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/latency.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/lottery.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/measure.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/memguard.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/metrics.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/plotting/__init__.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/plotting/figures_pernode.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/plotting/make_figures.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/plotting/style.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/reorg.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/rng.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/selfish.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/selfish_mdp.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/stake.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/sweep.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/theory.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/topology.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/tsi.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/uncles.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/src/tsi_sim/verify.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_blocktree.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_churn_pref.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_concurrency.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_config.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_early_stop.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_fork.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_jitter_poisson.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_latency.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_lottery.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_measure.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_pernode.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_reorg.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_rng.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_selfish.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_slot_counting.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_stake.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_sweep.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_theory.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_theory_convergence.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_tsi_counting.py create mode 100644 tools/simulators/tsi/tsi-sim-pernode/tests/test_uncles.py diff --git a/tools/simulators/tsi/tsi-sim-pernode/.gitignore b/tools/simulators/tsi/tsi-sim-pernode/.gitignore new file mode 100644 index 0000000..c1d75e4 --- /dev/null +++ b/tools/simulators/tsi/tsi-sim-pernode/.gitignore @@ -0,0 +1,24 @@ +# Generated artifacts +runs/ +results/ +figures/ +report-figures/ +!results/.gitkeep +!figures/.gitkeep + +# Python +__pycache__/ +*.py[cod] +*.egg-info/ +.venv/ +venv/ +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ +*.parquet +*.csv + +# Rendered reports — the report of record (markdown + figures) lives in reports/tsi/; +# anything built or generated in the simulation folder is a local artifact, never committed. +*.pdf +*.html diff --git a/tools/simulators/tsi/tsi-sim-pernode/Makefile b/tools/simulators/tsi/tsi-sim-pernode/Makefile new file mode 100644 index 0000000..ef9ce46 --- /dev/null +++ b/tools/simulators/tsi/tsi-sim-pernode/Makefile @@ -0,0 +1,52 @@ +# Sweep targets are auto-discovered from configs/*.yaml (see the pattern rule below), so any +# new config becomes runnable as `make ` with no Makefile edit. +SWEEP_CONFIGS := $(patsubst configs/%.yaml,%,$(wildcard configs/*.yaml)) +.PHONY: install $(SWEEP_CONFIGS) figures verify test test-slow test-all lint clean + +VENV ?= .venv +PY := $(VENV)/bin/python +PIP := $(VENV)/bin/pip + +# Pin BLAS/OpenMP to a single thread so joblib's N worker processes don't oversubscribe +# the cores (numpy in each worker would otherwise each spawn a full BLAS thread pool). +export OMP_NUM_THREADS := 1 +export OPENBLAS_NUM_THREADS := 1 +export MKL_NUM_THREADS := 1 +export NUMEXPR_NUM_THREADS := 1 + +$(VENV): + python3 -m venv $(VENV) + $(PIP) install --upgrade pip + +install: $(VENV) + $(PIP) install -e ".[dev,accel]" # accel = numba (per-node measurement speedup) + +# Run any sweep config by its file stem, e.g. `make smoke`, `make default`, `make fullscale` +# (or any new configs/.yaml). Each writes results + figures into a fresh dated folder under +# runs/ (runs/_