Skip to content

dashboard: a Slipstream page - #84

Merged
rsantacroce merged 4 commits into
feat/slipstream-servicefrom
feat/slipstream-dashboard
Sep 28, 2026
Merged

rsantacroce merged 4 commits into
feat/slipstream-servicefrom
feat/slipstream-dashboard

Conversation

@rsantacroce

@rsantacroce rsantacroce commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

What

This is the dashboard half of slipstream, stacked on #83. Its base is feat/slipstream-service, so the diff here is only the dashboard. It retargets to main once #83 merges.

A public /slipstream page, shown in the nav only when SLIPSTREAM_API_URL is set. It has four parts:

  • Fees: the minimum submission rate, the current mineable rate, what is required now, and how recently that was read from the template.
  • Submit: a curl line pointing at PUBLIC_SLIPSTREAM_URL, and a link to the pool's info.json.
  • Recent transactions: each with its fee rate and status.
    • Statuses: in template, mined, confirmed, or dropped with the node's reason.
    • The block is shown with (ours) or (another pool). Accepted txs are broadcast, so another pool can mine one first, and the page says so.

Design notes

  • The page reads the slipstream service's API, not slipstream.db. The service stays the only owner of its schema.
  • If the service is down, the page says so. It costs the page one card, not the page, and the rest of the dashboard is unaffected.
  • There is no admin withdraw action. An earlier version of this PR had one, which removed the tx from an enforcer-side slipstream pool. slipstream: take txs from anyone, get them into the pool's blocks #83 now submits to the pool's bitcoind instead, and Core has no RPC to take a tx back out of its mempool. The admin router and the Tools page are unchanged from main.

Testing

  • dashboard/test/slipstream.test.js (4 tests):
    • The page renders both rates, the submit line, statuses and reasons.
    • It degrades when the service is down.
    • The nav link appears only when slipstream is enabled.
    • fetchSlipstream works against a stub service.
  • The full dashboard suite passes: 193 tests.
  • Live, against the regtest stack (an earlier revision, with the service's former backend): the page rendered a submitted tx through to confirmed at its block height. The page only reads the service's API, and the API's shape did not change with the backend.

Found, not fixed here

Without a shares.db (a proxy that has never run), / returns 500 from views/index.ejs:71. This is the same on the base branch, so it is not from this change.

With SLIPSTREAM_API_URL set, the public nav gains /slipstream: the
minimum submission rate and current mineable rate, how to submit, and
each recent tx with where it stands -- in template, mined (ours or not),
confirmed, dropped with its reason. The page reads the slipstream
service's API rather than slipstream.db, so the service stays the only
owner of its schema, and a service that is down costs the page one card.

Admin -> Tools lists the txs still open, each with a Withdraw button.
That calls removeslipstreamtx on the enforcer, which holds the txs; the
service records the tx as dropped (withdrawn) on its next poll.
Slipstream txs now go to the pool's bitcoind instead of an enforcer-side
pool, and Core has no RPC to take a tx back out of its mempool, so there
is nothing for the button to call. The admin router and Tools page are
back as they were; the public /slipstream page stays, with its intro
saying what is now true: an accepted tx is broadcast, and another pool
may mine it first.
@rsantacroce rsantacroce changed the title dashboard: a Slipstream page, and withdrawing a slipstream tx from admin dashboard: a Slipstream page Sep 28, 2026
@rsantacroce
rsantacroce marked this pull request as ready for review September 28, 2026 17:28
@rsantacroce
rsantacroce merged commit 274985e into feat/slipstream-service Sep 28, 2026
8 checks passed
rsantacroce added a commit that referenced this pull request Sep 29, 2026
dashboard: a Slipstream page (#84, onto main)
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