mirror of
https://github.com/logos-blockchain/research.git
synced 2026-08-09 04:33:15 +00:00
I had planned to flip uncle_window_anchor's default to "parent" so new configs would measure the proposed design by default. Tried it, and it breaks a documented guarantee: key() appends the anchor only when it is not "uncle", so with "parent" as the default an --old run's key is no longer byte-identical to the pre-redesign key and --old stops bit-reproducing historical runs (sec 9). o.key() == o._base_key() fails outright. Reverted, and on reflection the default was wrong for a second reason anyway. The report's job is to describe the protocol as deployed and to RECOMMEND changes; the default should therefore be the deployed rule, with the proposal as an explicit arm. That is exactly the convention fixed_point already follows (default exact f = the analysis convention, explicit True = spec-faithful). Both reasons are recorded on the field. To make the distinction visible rather than implicit, the spec-as-is studies now pin uncle_window_anchor: uncle explicitly -- spec_point.py, spec_jitter.py and the three spec-point-*.yaml configs answer "what does the DEPLOYED chain do", so they must not drift onto a proposal if a default ever moves. Adds uncle_window_anchor as a sweep axis (SweepConfig field plus _SWEEP_AXES), and configs/absorption-window-anchor.yaml: the sec 3.4 absorption sweep re-run under both anchors at three delays. That study is the one that can move a recommendation -- the W >= 7/f floor was measured against the uncle gap, and the parent gap runs about one block-interval longer, so the floor should sit higher and the margin behind W = 10/f shrink. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
37 lines
2.7 KiB
YAML
37 lines
2.7 KiB
YAML
# Does the no-uncle loss deepen with N at the SPEC's operating point?
|
|
# Does the no-uncle loss deepen with N at the SPEC's operating point?
|
|
#
|
|
# The design-band study (fine-delay-paired.yaml) already settles the countable-vs-unrestricted
|
|
# question at delta_max = 4 with 40 replicates, but only at N = 1000. The spec section's claim
|
|
# that "without uncles the loss is 18.7 %" is the U = 0 column, and the report shows it is
|
|
# N-dependent (0.739 -> 0.635 over N = 1k -> 10k) at delta_max = 8. This measures it at the
|
|
# deployment's own delay instead, where nothing has been run at N > 1000.
|
|
#
|
|
# delta_max = 4 is the deployed operating point: the spec's blending_delay is a FIXED 2 s per-hop dwell, and the
|
|
# simulator's Uniform(0, delta_max) matches it in the mean at 4. D_vis ~ 8 s, rho ~ 0.27.
|
|
#
|
|
# Run TWICE — default (countable) and with --old — so the first-fork gap is measured at this size
|
|
# too. `--old` is NOT a candidate design: under the current spec a block carrying a deep-fork
|
|
# reference is REJECTED, so the unrestricted arm is an unreachable upper bound on what any
|
|
# counting rule could recover. It is kept as exactly that ceiling.
|
|
# Latency is in SLOTS (1 slot = 1 s).
|
|
n_nodes: [5000] # the size arm; N = 1000 is already committed
|
|
stake_dist: [pareto] # heavy-tailed (realistic) stake distribution
|
|
topology: [blend] # Blend mixnet — the deployment transport
|
|
degree: [6] # peering degree of the d-regular graph
|
|
link_latency_mean: [0.5] # natural geographic transport (sub-slot)
|
|
link_latency_dist: [geo] # real-world geographic band mixture
|
|
blend_hops: [3] # the spec's Blend cascade length
|
|
blend_delay_max: [4.0] # the spec's 2 s dwell, matched in the mean
|
|
max_uncles: [0, 1, 2, 4] # 0 = the C3 column; 4 = the spec's MAX_UNCLES
|
|
uncle_strategy: [oldest] # spec Uncle Selection
|
|
uncle_window_anchor: [uncle] # SPEC AS DEPLOYED, not the sec 6.12 proposal
|
|
init_dest: [common] # per-node initial D_est from agreement
|
|
replicates: 12 # N = 5000 at true k is heavy; 12 gives ~±0.2 pp
|
|
base: # per-run settings shared by every cell
|
|
k: 2160 # true security parameter
|
|
epochs: 20 # equilibrium within ~2 epochs; burn 50%
|
|
f: 0.03333333333333333 # slot activation coefficient (1/30)
|
|
genesis_d_factor: 0.5 # start near true stake (cheap epoch 0)
|
|
early_stop: true
|