Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,10 @@ jobs:

- name: Lint markdown
run: make lint-markdown

# vercel.json serves production and public/_redirects serves the
# Cloudflare preview; neither platform reads the other's file, so a rule
# added to one and not the other is a link that works where it was tested
# and 404s where it ships.
- name: Check redirect parity
run: make check-redirects
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,10 @@ dist
# vitepress build output
**/.vitepress/dist

# wrangler local state
.wrangler/
.dev.vars

# vitepress cache directory
**/.vitepress/cache

Expand Down
144 changes: 86 additions & 58 deletions .vitepress/config.mts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import { defineConfig } from 'vitepress'

const { BASE: base = "/" } = process.env;
const gateway = "https://getoptimum.github.io/optimum-gateway/versions/latest"
const withBase = (path: string) => `${base}${path.replace(/^\//, "")}`;

// https://vitepress.dev/reference/site-config
export default defineConfig({
lang: "en-US",
title: "Optimum Docs",
description: "The world's first high-performance memory infrastructure for any blockchain.",
description: "Run an Optimum gateway, connect your validators, and read Signal and Accelerate in Console.",
lastUpdated: true,
cleanUrls: true,
ignoreDeadLinks: true,
Expand Down Expand Up @@ -49,7 +50,7 @@ export default defineConfig({
"meta",
{
property: "description",
content: "The world's first high-performance memory infrastructure for any blockchain.",
content: "Run an Optimum gateway, connect your validators, and read Signal and Accelerate in Console.",
},
],
["meta", { httpEquiv: "Content-Language", content: "en" }],
Expand Down Expand Up @@ -111,7 +112,7 @@ export default defineConfig({
socialLinks: [
{ icon: "github", link: "https://github.com/getoptimum/docs" },
{ icon: "x", link: "https://x.com/get_optimum" },
{ icon: "discord", link: "https://discord.gg/7EwFpu79cZ" },
{ icon: "discord", link: "https://discord.gg/getoptimum" },
// { icon: "youtube", link: "" },
// { icon: { svg: telegramSVG }, link: "" },
],
Expand All @@ -120,82 +121,109 @@ export default defineConfig({

function nav() {
return [
{
text: "Optimum Gateway",
link: "https://getoptimum.github.io/optimum-gateway/versions/latest/",
},
{
text: "Menu",
items: [
{ text: "Learn", link: "/docs/learn/overview/intro" },
{
text: "Resources",
items: [
// {
// text: "Optimum Improvement Proposals (OIPs)",
// link: "https://docs.getoptimum.xyz/", // TODO: Update link once live.
// },
{
text: "Optimum ADRs",
link: "https://github.com/getoptimum/optimum/tree/main/docs/architecture#adr-table-of-contents",
},
// {
// text: "Flexnode API Docs",
// link: "https://docs.getoptimum.xyz/", // TODO: Update link once live.
// },
],
},
],
},
{ text: "Start", link: "/start/what-optimum-does" },
{ text: "Console", link: "https://console.getoptimum.io/" },
{ text: "Gateway", link: `${gateway}/` },
];
}

function sidebarHome() {
return [
{
text: "Overview of Optimum",
text: "Operator setup",
collapsed: false,
items: [
{
text: "Introduction",
link: "/docs/learn/overview/intro",
text: "Start here",
collapsed: false,
items: [
{ text: "Introduction", link: "/" },
{ text: "What Optimum does", link: "/start/what-optimum-does" },
{ text: "Choose a path", link: "/start/choose-a-path" },
{ text: "Before you begin", link: "/start/before-you-begin" },
],
},
{
text: "mump2p Protocol",
link: "/docs/learn/overview/p2p.md",
text: "Getting in",
collapsed: false,
items: [
{ text: "Create an account", link: "/getting-in/create-an-account" },
{ text: "Account type", link: "/getting-in/account-type" },
{ text: "Register", link: "/getting-in/register" },
],
},
],
},
{
text: "Optimum Gateway",
collapsed: false,
items: [
{
text: "Documentation",
link: "https://getoptimum.github.io/optimum-gateway/versions/latest/",
text: "Signal",
collapsed: false,
items: [
{ text: "What Signal does", link: "/signal/what-signal-does" },
{ text: "Network", link: "/signal/network" },
{ text: "Connect your gateway", link: "/signal/connect-your-gateway" },
{ text: "When the check fails", link: "/signal/when-the-check-fails" },
{ text: "Register keys", link: "/signal/register-keys" },
{ text: "Onboard in bulk", link: "/signal/onboard-in-bulk" },
{ text: "Your first report", link: "/signal/your-first-report" },
],
},
{
text: "Quick start (HOP)",
link: "https://getoptimum.github.io/optimum-hop/",
text: "Accelerate",
collapsed: false,
items: [
{ text: "What Accelerate does", link: "/accelerate/what-accelerate-does" },
{ text: "Readiness", link: "/accelerate/readiness" },
{ text: "Recommendation", link: "/accelerate/recommendation" },
{ text: "MEV sidecar configuration", link: "/accelerate/adjust-mev-boost" },
{ text: "Acceleration", link: "/accelerate/where-results-show" },
],
},
{
text: "Operate",
collapsed: true,
items: [
{ text: "Run the gateway", link: "/operate/run-the-gateway" },
{ text: "Kubernetes", link: "/operate/kubernetes" },
{ text: "Block stream", link: "/operate/block-stream" },
{ text: "Telemetry", link: "/operate/telemetry" },
],
},
{
text: "Help",
collapsed: true,
items: [
{ text: "Troubleshoot", link: "/help/troubleshoot" },
{ text: "Support", link: "/help/support" },
{ text: "FAQ", link: "/help/faq" },
],
},
],
},
{
text: "Research",
text: "Keysync",
collapsed: false,
items: [
{
text: "Gossip",
link: "/docs/research/gossip/gossip",
},
{
text: "Transport",
link: "/docs/research/gossip/transport",
},
{
text: "Decentralized Access",
link: "/docs/research/gossip/decentralized-access",
},
{ text: "Sync validator keys", link: "/keysync/" },
],
},
{
text: "General Optimum docs",
collapsed: true,
items: [
{ text: "mump2p protocol", link: "/docs/learn/overview/p2p" },
{ text: "Gossip", link: "/docs/research/gossip/gossip" },
{ text: "Transport", link: "/docs/research/gossip/transport" },
{ text: "Decentralized access", link: "/docs/research/gossip/decentralized-access" },
],
},
{
text: "Gateway manual",
collapsed: true,
items: [
{ text: "Overview", link: `${gateway}/` },
{ text: "Quick start", link: `${gateway}/quick-start` },
{ text: "Connecting your CL client", link: `${gateway}/cl-clients` },
{ text: "Configuration", link: `${gateway}/configuration` },
{ text: "Kubernetes (Helm)", link: `${gateway}/kubernetes` },
{ text: "Troubleshooting", link: `${gateway}/troubleshoot` },
],
},
]
Expand Down
19 changes: 19 additions & 0 deletions .vitepress/theme/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -165,3 +165,22 @@ html.dark .light-mode-only {
html.dark .dark-mode-only {
display: block !important;
}

/* The data-path diagram uses currentColor, so it follows the theme. */
.data-path {
overflow-x: auto;
margin: 1.5rem 0;
color: var(--vp-c-text-1);
}

.data-path svg {
width: 100%;
height: auto;
display: block;
}

/* Sign-in cards are a narrow panel. Full column width makes them dominate the page. */
.vp-doc img.console-card {
max-width: 32rem;
height: auto;
}
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,8 @@ lint-markdown:
@echo "🧹 Linting markdown..."
@$(YARN) lint:md

.PHONY: run-dev build preview lint lint-markdown
check-redirects:
@echo "🧭 Checking redirect parity..."
@node scripts/check-redirects.mjs

.PHONY: run-dev build preview lint lint-markdown check-redirects
41 changes: 41 additions & 0 deletions accelerate/adjust-mev-boost.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
title: MEV sidecar configuration
description: Set the cutoff on the Adjust step, download the config for MEV-Boost or Commit-Boost, and record what you deployed. Console does not push it.
---

# MEV sidecar configuration

The cutoff you deploy lives in the MEV sidecar beside your beacon node. Console writes a file for either implementation you run.

* **MEV-Boost.** The download is `mev-boost-config.yaml`, a complete config. The cutoff is `timeout_get_header_ms`.
* **Commit-Boost.** The download is `cb-config-pbs.toml`, the `[pbs]` timings and your relay URLs. Merge it into the `cb-config.toml` you already run. It carries no chain, port, or signer settings. Its header names anything from your upload it leaves out, such as a relay-mux block.

Optimum has no write access to either sidecar.

**Bid cutoff** is `timeout_get_header_ms`: the last moment a getHeader bid is accepted, in milliseconds into the slot. A later cutoff can take a higher bid. Set late enough, the proposal misses the slot.

**Late in slot** is `late_in_slot_time_ms`. A getHeader arriving after it skips all relays and builds the block locally. The cutoff must stay before it: the screen shows **Must stay after the bid cutoff. Gap now:** and the gap in milliseconds. Console keeps the cutoff at least 1 ms earlier, and moving late-in-slot down moves the cutoff with it.

## The Adjust step

From the recommendation, **I am ready to adjust** opens step 3, **Adjust**. **Review cutoff**, on the banner after a cutoff is recorded, opens the same editor.

The top card says **Configuration matches the file you uploaded** until you move a value, then **Unsaved changes to the cutoff**, with **Export the new config and deploy it — nothing here reaches your infrastructure.**

**Our recommendation** states the move in words, for example **Raise the bid cutoff by 40 ms, to 2,039 ms. Keep late-in-slot at 3,000 ms.** **Apply recommendation** sets both sliders to it. Any value in the green range is within the recommendation, and you can set your own.

![Accelerate, Adjust. Config for, Download YAML, and Our recommendation are marked.](/console/09-accelerate-adjust.png)

The **Bid cutoff** slider opens zoomed on the values around your current cutoff, so a 20 ms step is visible. **Show full range** shows the whole slot. **Zoom to the recommendation** returns. Marks on the track name **Current** and **Recommended**.

Under **Pick a value — or drag the slider**, each chip leads with the value to put in your config, then the move and its meaning, for example **2,039 ms**, **+40 · Recommended**. The legend reads **Recommended range**, **Safer, less MEV**, and **Current**. **Late in slot** has its own slider and chips.

Under the sliders, the lines to update in your config appear once a value differs from the file on record.

## Download and record

**Config for** picks the sidecar: **MEV-Boost**, **Commit-Boost**, or **Both**. The button names the file: **Download YAML**, **Download TOML**, or **Download both**, which saves the two files separately.

Deploy the file the way you already deploy sidecar config. Then **I have adjusted my cutoff** records the slider values as what you deployed. Recording it does not deploy it. **Back to results** leaves the editor.

What changed after you deployed is under **MEV outcome** on this screen. See [Acceleration](/accelerate/where-results-show).
42 changes: 42 additions & 0 deletions accelerate/readiness.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
title: Readiness
description: The 200-proposal floor Console uses before it will recommend a cutoff, and what the screen shows until then.
---

# Readiness

Before you accept anything, Console states what your history can support.

A cutoff recommendation needs 200 measured proposals, across all your validators, not per key. Until the cycle holds that many, the Adjust step says **Not enough proposals yet for a recommendation**. You can still start Accelerate and upload a configuration. Measurement runs from the moment that configuration takes effect. The recommendation appears once the cycle holds enough.

## Modelled annual gain

The top of step 1 is about the modelled gain: what a later bid cutoff could have captured on blocks you already proposed, held at that rate for a year. It is read from the simulation the terms describe, so before you accept them the screen says **Accept the terms to see your modelled gain**.

The other answers in that place:

| On the screen | What it means |
| --- | --- |
| **Reading your modelled gain** | The window is still being read. |
| **Still gathering evidence** | The model needs 30 days of ingested history and 30 MEV blocks. The line says how far along you are. |
| **No MEV blocks to model yet** | Nothing you proposed in the window took a relay bid, so there is no bid timing to model. |
| **Nothing was left on the table** | No better bid arrived after the one you took, at any measured offset. |
| **Could not model your proposals** | The read failed. Refresh. |

## Before you start

Under **Before you start**, the row **Validator keys registered** has three states. Indices are required to know which slots you propose. The button tells you what is missing rather than failing silently.

![Accelerate, Before you start. Validator keys registered is marked, and its state is Needed.](/console/08-accelerate-before-you-start.png)

| State | On the screen | What to do |
| --- | --- | --- |
| **Needed** | Needed to know which slots you propose. | [Register keys](/signal/register-keys). |
| **Activating** | Indices on record, none active on chain yet. | Wait for the activation queue. Pending validators are not assigned proposal slots, so nothing is measured until they activate. |
| **Done** | `N` of `M` registered indices active on chain. | Nothing. Proposals count as they happen. |

If Console could not read which indices are active, the row stays **Needed** and says **We could not read which of your indices are active on chain, so this is unverified.** Refresh. That is a failed read, not an empty set.

If indices are on record and the recommendation says **Not enough proposals yet for a recommendation**, check this row first. **Activating** means you are waiting on activation, not on proposal luck.

The report’s own charts measure per MEV block: accepted ETH on the bid that was taken, unrealised ETH on bids that arrived later. A per-proposal average is a different number and is labelled that way on the report.
38 changes: 38 additions & 0 deletions accelerate/recommendation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
title: Recommendation
description: What you accept before a cutoff is shown, and what the number means.
---

# Recommendation

**Start Accelerate** opens **Acknowledge the disclaimer**. You can close it. Staff cannot accept it for you.

The notice says the configuration information is a simulation from current network data, for information only. Optimum does not guarantee a performance outcome. Changes you make on your own infrastructure are your decision, and Optimum is not liable for the outcomes of using that information.

Read the text in the dialog. The copy on this page is a summary so you know what the step is. The dialog is the agreement.

After you accept, **Your MEV-Boost setup** asks you to upload the config you run, with **Upload config** or by dropping the file on the box. Your cutoff, your `late_in_slot_time_ms`, and your relay set are read from it, so the recommendation is against what you actually run. Console compares it with what your proposals show. It still does not change anything on your side.

The upload reads MEV-Boost YAML. If you run Commit-Boost, upload a MEV-Boost YAML with the same `timeout_get_header_ms`, `late_in_slot_time_ms`, and relay URLs. The Adjust step exports either format. See [MEV sidecar configuration](/accelerate/adjust-mev-boost).

A file Console cannot read is refused with **That was not accepted** and the reason, named at the line.

If the configuration is already on file and the terms are not yet acknowledged, the screen says **One thing before your recommendation**. **Read and acknowledge** opens the same dialog. The recommendation stays hidden until you accept.

Until a file is on record, the report has no cutoff to judge proposals by, and step 2 shows the upload.

The recommendation itself is withheld below 200 measured proposals. The callout is **Not enough proposals yet for a recommendation**. See [Readiness](/accelerate/readiness).

Once the window can support a number, the panel is **Recommended bid cutoff**, in milliseconds, with **I am ready to adjust**. The line under the number is the move from your current cutoff, and how much time that leaves before local block building. **Replace the config on file** uploads a different file.

![Accelerate, Recommendation. Recommended bid cutoff and I am ready to adjust are marked.](/console/11-accelerate-recommendation.png)

Beside it:

* **Slots that could have improved** — the share of MEV blocks that had a better bid within a stated offset past the bid you took, over the modelling window.
* **Slots modelled** — MEV blocks in that window.
* **Relays on file** — how many relays the uploaded config names. Upload your own file if you want this to be your set.

The figure is uplift that was available at that offset, on blocks already proposed. It does not price the risk of waiting. **No cutoff change indicated** means the window does not support moving it.

When a cycle completes, the top of the screen says **Your measurement cycle is complete** and how many proposals were measured since your last change. **Review the recommendation** opens this step. Dismissing hides the notice until the next cycle. **Accelerate** in the sidebar shows **1** until you answer.
Loading
Loading