docs: V2 bond sizing and window analysis - #121
Conversation
Models three v2-specific deployment decisions that were previously reasoned about only qualitatively in V2_RESOLUTION.md: - Default-frequency model: derives the minimum reveal turnout required for a strict-majority correction as a function of the honesty share of revealers, and shows that a lone disputer (W = 2B) can never by itself cross the strict-majority threshold. - Whale-capture model: computes the minimum capital required for a single address or coalition to reach strict majority as a function of base_bond, max_position, and expected honest counter-stake. Shows that max_position = 2 × base_bond prevents single-address capture with no counter-stake. - Window-length tradeoff model: frames registration and reveal durations, anti-snipe extension, and hard cap as a joint optimization over participation latency, coordination time, and capture speed. Provides sanity-check inequalities (T_rev ≥ 2τ_coord, T_reg ≥ τ_react, etc.). - Recommended profiles: private beta / public testnet / higher-value mainnet candidate, following the same three-tier structure as BOND_SIZING.md, with a numeric profile table and narrative per tier. - Scenario checks and monitoring guidance following the BOND_SIZING.md style. Closes drydocs#75
- Replace all em/en dashes with plain punctuation throughout - Fix 'three/four/eight times' phrasing in Part 2 to match Part 4's capture_cost_multiplier ~= 2; whale needs just over 2B, not 3B - Reconcile threshold formula in Part 5: use side_weight > W - side_weight (the contract's actual check) and floor(W/2)+1 for integer W consistently, replacing the inconsistent W/2+1 vs W/2+0.5 in the worked example - Move SUMMARY.md entry under Protocol v2 Resolution Proposal
|
All three requested changes have been addressed in commits 0e76300 and 636d4df:
CI is fully green on 636d4df (test, sdk, demo, build all passing). Ready for |
collinsezedike
left a comment
There was a problem hiding this comment.
All three previous findings are genuinely fixed, not just cosmetically, the em/en dashes are gone, Part 2 and Part 4 now agree on the zero-counter-stake case, and the W/2 threshold section correctly explains the floor(W/2)+1 parity handling with a matching worked example. Two new things surfaced this round.
- Self-hedging section: remove false claim that the asserter bond is recovered when the honest side wins. settle() for StrictMajorityAgainst pays only positions with agrees_with_outcome == Some(false); the asserter's Fixed(true) position has Some(true) and is forfeited along with R_w. Real net exposure on loss is B + R_w, not R_w alone. Rewrite the section to reflect the correct settlement mechanic and state capture cost as B + R_w throughout. - N_voters rule of thumb: add a clarifying paragraph making explicit that N_voters >= 3 is a floor for a healthy electorate, not a sufficient condition for correction. The symmetric-split model shows against-side weight equals exactly W / 2 for any N_voters; correction requires an honest-side imbalance in revealed weight, not just a minimum headcount.
|
Both findings from this round are addressed in bae9ce2.
Ready for re-review. |
collinsezedike
left a comment
There was a problem hiding this comment.
Both findings from the last round are genuinely fixed, the self-hedging exposure and the N_voters clarification both check out against the actual settle() mechanic. One new thing this round.
| where half the third parties side with each party. | ||
| 3. Against-side weight: `base_bond x (1 + N_voters / 2)`. | ||
| 4. Required threshold: strictly more than `W / 2`. The contract uses the | ||
| comparison `side_weight > W - side_weight` (equivalently `2 x side_weight > W`), |
There was a problem hiding this comment.
This says the subtraction form avoids doubling overflow, but that's not why the code uses it. lib.rs:1376-1378's own comment says it's because integer division rounds down and would wrongly pass a boundary case on an odd W, not overflow, doubling side_weight can't overflow anyway since it's bounded well below i128::MAX. Please fix the stated rationale to match.
The subtraction form (side_weight > W - side_weight) is used because integer division rounds down and would wrongly pass a side sitting exactly at the boundary on an odd W, not to avoid overflow. Doubling side_weight cannot overflow since it is bounded well below i128::MAX. Fixes the rationale to match lib.rs:1376-1378's own comment.
|
Fixed in 9b96191. The rationale now matches lib.rs:1376-1378: the subtraction form |
Summary
Adds
docs/src/V2_BOND_SIZING.md, the economic simulation document requested in issue #75. This is a research/design document — no contract code is changed.The document models the three quantitative questions the issue scoped:
1. Default-frequency model
Derives the minimum reveal-turnout required for the against-side to reach a strict majority as a function of the honesty share among revealers. Shows the issue-body example (49% revealed against, 50% non-reveal → assertion stands) in formula form and generalises it to a table. Identifies that a lone disputer at
W = 2Bcan never cross the threshold and concludes thatN_voters ≥ 3realistically achievable third-party registrants is the practical floor for a correctable deployment.2. Whale-capture model
Derives the minimum capital required for a single address or coalition to reach strict majority as a function of
base_bond,max_position, and expected honest counter-stake. Provides a concentration-threshold table and shows thatmax_position = 2 × base_bondis the tightest single-parameter whale control. Discusses the self-hedging cost-illusion (a coalition's net exposure is its registration deposit, not the asserter bond it can recover).3. Window-length tradeoffs
Frames
registration_duration_secs,reveal_duration_secs,anti_snipe_extension_secs, andanti_snipe_hard_max_secsas a joint optimization over participation latency (τ_react), coordination time (τ_coord), and attacker capital-movement speed (τ_atk). Provides a sanity-check inequality set and a summary table.4. Recommended profiles
Three-tier table (private beta / public testnet / higher-value mainnet candidate) matching the style of
BOND_SIZING.md, with numeric ranges for all five window parameters plusmax_positionandmax_total_weight, followed by narrative guidance and scenario checks.Files changed
docs/src/V2_BOND_SIZING.md— new file (581 lines)docs/src/SUMMARY.md— adds the new doc to the book outline underDeployment & Operations: Protocol v2Testing
Research/documentation change only — no contract code, no WASM, no tests affected.
Closes #75