|
39 | 39 | --accent-ink:#0b1322; |
40 | 40 | --verified: #52c79c; |
41 | 41 | --shadow: 0 24px 60px -28px rgba(0,0,0,0.65); |
42 | | - --maxw: 1140px; |
| 42 | + --maxw: 1280px; |
43 | 43 |
|
44 | 44 | --f-display: "Newsreader", Georgia, "Times New Roman", serif; |
45 | 45 | --f-body: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; |
|
224 | 224 | .section-head { max-width: 62ch; margin-bottom: 3rem; } |
225 | 225 | .section-head h2 { font-size: clamp(1.95rem, 3.6vw, 2.9rem); } |
226 | 226 | .section-head p { color: var(--ink-soft); font-size: 1.12rem; margin-top: 1.1rem; } |
| 227 | + .subhead { font-family: var(--f-display); font-weight: 500; letter-spacing: -0.012em; font-size: clamp(1.4rem, 2.4vw, 1.9rem); margin: 3.6rem 0 1.7rem; } |
| 228 | + .fine { color: var(--ink-faint); font-size: 0.92rem; margin-top: 1.15rem; max-width: 78ch; } |
| 229 | + .fine b { color: var(--accent); font-weight: 500; } |
227 | 230 |
|
228 | 231 | .lede { max-width: 60ch; } |
229 | 232 | .lede p + p { margin-top: 1.2rem; } |
@@ -755,6 +758,56 @@ <h3>What you gain</h3> |
755 | 758 | </div> |
756 | 759 | </section> |
757 | 760 |
|
| 761 | + <!-- BACK OF THE ENVELOPE --> |
| 762 | + <section id="numbers"> |
| 763 | + <div class="wrap"> |
| 764 | + <div class="section-head reveal"> |
| 765 | + <p class="eyebrow">Back of the envelope</p> |
| 766 | + <h2>Pick a storage budget. Everything else follows.</h2> |
| 767 | + <p>A node runs several clock chains at once — one fast, each of the rest a step slower — keeps a fixed number of ticks on every chain, and prunes the rest. Storage then stays flat forever: recent moments are pinned to the second, and older ones widen gently with age. Here is what a given budget buys, at a steady one tick per second.</p> |
| 768 | + </div> |
| 769 | + |
| 770 | + <div class="table-scroll reveal"> |
| 771 | + <table> |
| 772 | + <thead> |
| 773 | + <tr> |
| 774 | + <th scope="col">Device</th> |
| 775 | + <th scope="col">Storage budget</th> |
| 776 | + <th scope="col">Pinned to the second</th> |
| 777 | + <th scope="col">A 10-year-old event</th> |
| 778 | + <th scope="col">Reach</th> |
| 779 | + </tr> |
| 780 | + </thead> |
| 781 | + <tbody> |
| 782 | + <tr><th scope="row">Raspberry Pi Zero</th><td>64 MB</td><td>events up to ~2 hours old</td><td>bracketed to ~33 hours</td><td>~210 years</td></tr> |
| 783 | + <tr><th scope="row">Phone or laptop</th><td>1 GB</td><td>events up to ~1.5 days old</td><td>bracketed to ~52 minutes</td><td>~310 years</td></tr> |
| 784 | + <tr><th scope="row">Small server</th><td>32 GB</td><td>events up to ~46 days old</td><td>bracketed to ~81 seconds</td><td>~280 years</td></tr> |
| 785 | + </tbody> |
| 786 | + </table> |
| 787 | + </div> |
| 788 | + <p class="fine reveal">Reach is nearly free — it costs chains, not storage — so almost the whole budget goes to precision. Worst case, an aged event is bracketed to a fraction of its age: <b>~0.09%</b> on a Pi, <b>~0.004%</b> on a phone, <b>~0.00008%</b> on a server. Push the tick faster than one per second and even recent bounds drop below a second.</p> |
| 789 | + |
| 790 | + <h3 class="subhead reveal">What it takes to build the graph</h3> |
| 791 | + <div class="grid g-3 reveal"> |
| 792 | + <div class="card"> |
| 793 | + <div class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="6" rx="7" ry="2.8"/><path d="M5 6v12c0 1.6 3.1 2.8 7 2.8s7-1.2 7-2.8V6"/><path d="M5 12c0 1.6 3.1 2.8 7 2.8s7-1.2 7-2.8"/></svg></div> |
| 794 | + <h3>Storage</h3> |
| 795 | + <p>Your chosen budget, flat forever. The graph is a fixed pile of clock ticks — about a million on a phone, roughly 1 KB each — and pruning holds it there however long the node runs.</p> |
| 796 | + </div> |
| 797 | + <div class="card"> |
| 798 | + <div class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="6" cy="6" r="2.4"/><circle cx="18" cy="6" r="2.4"/><circle cx="12" cy="18" r="2.4"/><path d="M7.7 7.7L11 15M16.3 7.7L13 15M8 6h8"/></svg></div> |
| 799 | + <h3>Network</h3> |
| 800 | + <p>One small heartbeat a second, shared as a hash with your ~10 neighbors. A complete proof is roughly 40 hops — about 40 KB, a single UDP packet. Everything else on the wire is just chain tips, about 1.25× a single chain.</p> |
| 801 | + </div> |
| 802 | + <div class="card"> |
| 803 | + <div class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="7" y="7" width="10" height="10" rx="1.6"/><path d="M10 4v3M14 4v3M10 17v3M14 17v3M4 10h3M4 14h3M17 10h3M17 14h3"/></svg></div> |
| 804 | + <h3>CPU</h3> |
| 805 | + <p>A hash and a signature about once a second. Running eight clock chains at once adds only ~25% over running one. Light enough to stay always-on on a $15 Raspberry Pi Zero.</p> |
| 806 | + </div> |
| 807 | + </div> |
| 808 | + </div> |
| 809 | + </section> |
| 810 | + |
758 | 811 | <!-- QUICKSTART --> |
759 | 812 | <section id="quickstart" class="section-alt"> |
760 | 813 | <div class="wrap"> |
|
0 commit comments