Skip to content

25,000 dollars does not move USDC, so the depth rung measured the fee curve again - #2781

Merged
Flotapponnier merged 2 commits into
mainfrom
feat/bridge-depth-second-rung
Oct 3, 2026
Merged

Flotapponnier merged 2 commits into
mainfrom
feat/bridge-depth-second-rung

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

First readings off the probe deployed an hour ago: every one of the eight bridges kept falling at $25,000.

bridge $5 $50 $300 $25k
debridge 63.073% 6.712% 1.492% 0.096%
mobula 3.728% 0.482% 0.186% 0.100%
near-intents 1.640% 0.175% 0.040% 0.020%
relay 4.074% 0.519% 0.201% 0.016%

That is not eight providers ignoring depth. It is USDC on Base, Arbitrum and Solana being deep enough that $25k does not touch it. The rung works; it was asking a question these corridors answer trivially.

$500,000 is where a stablecoin route starts to answer honestly, and a provider that declines the size has told us something too.

It costs the providers nothing

The ladder already runs 5,760 quotes per provider per day. A fifth rung would add 1,440 to each, which is the sort of thing that gets a free key revoked.

It does not need one. Below the depth point cost is a fixed fee plus a proportional one, cost% = F/amount + V, so two points determine the curve and a third on it measures nothing. Fitting F and V on $5 and $300 predicts the live $50 reading:

bridge $50 actual predicted error
across 0.065% 0.065% 0.0%
near-intents 0.198% 0.198% 0.1%
relay 0.380% 0.379% 0.3%
squid 0.200% 0.173% 13.7%

Median 0.3%. That rung was interpolation, so it is what the depth reading is paid for.

The ladder becomes $5 and $300 for the fee curve, $25,000 and $500,000 for depth: same number of quotes, two depth points instead of one, a turning point visible between them.

A test pins the budget at four rungs per route, so the next person who wants a reading has to decide what to spend rather than quietly adding load to eight third-party APIs.

Already visible on the first rung

Per route, the signal is there where the corridor is thinner:

bridge route $300 $25k
squid Base→Arbitrum 0.003% 0.033% ×9.8, prices the impact
near-intents Base→Arbitrum 0.015% 0.020% ×1.35
relay Solana→Base 0.221% 0.023% ×0.10

go build, go vet, go test clean. main.go untouched: the execution ladder still tops out at $30 of real money.

…again

First readings off the deployed probe: every one of the eight bridges kept
falling at $25,000. That is not eight providers ignoring depth, it is USDC on
Base, Arbitrum and Solana being deep enough that $25k does not touch it. The
rung works; it was asking a question these corridors answer trivially.

Half a million is where a stablecoin route starts to answer honestly, and a
provider that declines the size has told us something too.

It costs the providers nothing extra, because it replaces the $50 rung rather
than joining it. The ladder already runs 5,760 quotes per provider per day and
a fifth rung would add 1,440 to each, which is how a free key gets revoked.
It does not need one: below the depth point a bridge's cost is a fixed fee
plus a proportional one, cost% = F/amount + V, so two points determine the
curve and a third on it measures nothing. Fitting F and V on $5 and $300
predicts the live $50 reading to a median of 0.3% across all eight bridges,
worst case 13.7% on squid. That rung was interpolation.

The ladder is now $5 and $300 for the fee curve, $25,000 and $500,000 for
depth: same number of quotes, two depth points instead of one, and a turning
point visible between them.

A test pins the budget at four rungs per route, so the next person who wants a
reading has to decide what to spend rather than quietly adding load to eight
third-party APIs.
Deploying main put two benches into noindex within the hour. Their asOf read
1970, and /products/mobula, /relay, /lifi and /near-intents all started
failing the links-to-noindex check because they point at them.

The cause was not the deploy. bridge-execution-latency.yml and
bridge-realized-cost.yml both declare

    freshness_timestamp_metric: bridge_last_execution_timestamp_seconds

and nothing in main's harness has emitted that for weeks. Prometheus held 2,835
samples of it over the last day, scraped from the container, because production
was still running a binary built before release 1bff8c7, which took "main's
versions" of the harness while benches 261 and 263 were gated to dev. The
benches later came off the gate; the harness never caught up. Main and
production had diverged, and the only thing holding the freshness source up was
an image nobody had rebuilt.

Restored from 73265b0: last_execution.go, the gauge, and the three attachment
points. The file's own header describes the failure exactly, that a pulse gauge
cannot be a freshness source because it is gone between runs, and the execution
cycle is daily, so without the persisted copy any restart blanks it for up to
twenty-four hours.

The expose-at-start call matters more than it looks. Without it the store is
written and never read back: the file grows, the gauge stays empty, and the
mechanism appears present while doing nothing.

Two tests. One restarts the store in a temp dir and asserts the gauge comes
back carrying the persisted time. The other asserts an empty store publishes
no series at all, because a zero unix time reads as 1970 and that is precisely
how the site concluded both benches were infinitely stale.
@Flotapponnier
Flotapponnier merged commit 49f25c1 into main Oct 3, 2026
2 checks passed
@Flotapponnier
Flotapponnier deleted the feat/bridge-depth-second-rung branch October 3, 2026 22:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant