mirror of
https://github.com/logos-blockchain/research.git
synced 2026-08-07 03:33:33 +00:00
Review finding: the timing study and the neighbourhood-confidence numbers were produced by ad-hoc analysis, not by the simulator. timing_linkability, neighbourhood_confidence and mean_upstream_hops had no callers outside their own modules; min_blend_delay and release_mode were declared on SweepConfig, validated and keyed, but never read by sweep.py, so a YAML setting them was silently ignored; and propagation.py called mix_wait without the minimum, leaving the knob inert on the delay tables of 3.1-3.2. Section 6 promised every number was reproducible and data/README claimed to hold the evidence behind every number -- both were false for 3.11. Now wired end to end: release_designs() is a real sweep axis, the engine measures the timing attack per design and records it in traffic.parquet, and the deanon table carries the full attribution bracket (local confidence, attributable fractions, upstream hops, neighbourhood confidence). Added configs/timing.yaml and a make target. The committed sweep reproduces 3.11: MAP success 0.993/0.905/0.683 for clock and 0.989/0.832/0.550 for jitter across the swept rates, and the minimum interval changes nothing (0.993 vs 0.993). Evidence checked in under data/timing. Three regression tests pin the wiring so a measure cannot go back to living only in analysis. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
58 lines
1.8 KiB
Makefile
58 lines
1.8 KiB
Makefile
VENV ?= .venv
|
|
PY := $(VENV)/bin/python
|
|
STAMP := $(VENV)/.installed
|
|
|
|
# Keep numpy/scipy BLAS single-threaded so joblib process parallelism doesn't oversubscribe.
|
|
export OMP_NUM_THREADS := 1
|
|
export OPENBLAS_NUM_THREADS := 1
|
|
export MKL_NUM_THREADS := 1
|
|
export NUMEXPR_NUM_THREADS := 1
|
|
|
|
.PHONY: install smoke sweep sweep-fullscale redundancy percolation correlated-churn timing figures verify test lint clean
|
|
|
|
# The stamp is the real install; targets below depend on it so `make sweep` (etc.) auto-installs
|
|
# on a fresh checkout and re-installs whenever pyproject.toml changes.
|
|
$(STAMP): pyproject.toml
|
|
python3 -m venv $(VENV)
|
|
$(PY) -m pip install -U pip
|
|
$(PY) -m pip install -e ".[dev]"
|
|
@touch $(STAMP)
|
|
|
|
install: $(STAMP)
|
|
|
|
smoke: $(STAMP) ## fast end-to-end (seconds): tiny N, few rounds/seeds
|
|
$(PY) -m blend.sweep --config configs/smoke.yaml
|
|
|
|
sweep: $(STAMP)
|
|
$(PY) -m blend.sweep --config configs/default.yaml
|
|
|
|
sweep-fullscale: $(STAMP)
|
|
$(PY) -m blend.sweep --config configs/fullscale.yaml
|
|
|
|
redundancy: $(STAMP) ## messaging redundancy R=1..4 (delivery vs deanonymization, time-to-link)
|
|
$(PY) -m blend.sweep --config configs/redundancy.yaml
|
|
|
|
percolation: $(STAMP) ## churn threshold: coverage collapse at u_c = 1 - 1/(degree-1)
|
|
$(PY) -m blend.sweep --config configs/percolation.yaml
|
|
|
|
timing: $(STAMP) ## release designs under a timing attack (jitter vs clock tick)
|
|
$(PY) -m blend.sweep --config configs/timing.yaml
|
|
|
|
correlated-churn: $(STAMP) ## correlated AS/region outages vs uniform churn, matched fractions
|
|
$(PY) -m blend.sweep --config configs/correlated-churn.yaml
|
|
|
|
figures: $(STAMP) ## make figures RUN=runs/<dir>
|
|
$(PY) -m blend.plotting.make_figures --run $(RUN)
|
|
|
|
verify: $(STAMP)
|
|
$(PY) -m blend.verify
|
|
|
|
test: $(STAMP)
|
|
$(PY) -m pytest
|
|
|
|
lint: $(STAMP)
|
|
$(VENV)/bin/ruff check src scripts tests
|
|
|
|
clean:
|
|
rm -rf runs/* figures/* .pytest_cache .ruff_cache .mypy_cache
|