v0.0.9.3
Build Service / BuildPackage (push) Has been cancelled

This commit is contained in:
2026-05-26 02:27:14 -04:00
parent 70b8aab0f3
commit 931becd274
6 changed files with 45 additions and 15 deletions
+10 -9
View File
@@ -155,7 +155,7 @@ preserved.
| Subspaces Prover | 8888 | HTTP | LAN / `.local` / Tor / clearnet (via StartOS) | `subs-prover` RISC Zero prover server (no GPU). Its own StartOS interface. Only useful while Subspaces is enabled. | | Subspaces Prover | 8888 | HTTP | LAN / `.local` / Tor / clearnet (via StartOS) | `subs-prover` RISC Zero prover server (no GPU). Its own StartOS interface. Only useful while Subspaces is enabled. |
| Subspaces Registry | 8081 | HTTP | LAN / `.local` / Tor / clearnet (via StartOS) | `registry-server` for publishing/resolving handles (remapped from its upstream default 8080 to avoid colliding with the gotty terminal on 8080). Its own StartOS interface. Only useful while Subspaces is enabled. | | Subspaces Registry | 8081 | HTTP | LAN / `.local` / Tor / clearnet (via StartOS) | `registry-server` for publishing/resolving handles (remapped from its upstream default 8080 to avoid colliding with the gotty terminal on 8080). Its own StartOS interface. Only useful while Subspaces is enabled. |
| Certrelay | 7778 | HTTP | LAN / `.local` / Tor / clearnet (via StartOS) | `certrelay` server (always on). Serves cryptographic proofs binding handles to owner keys. **Setup:** run **Configure Certrelay** and set `CERTRELAY_SELF_URL` to the publicly visible URL StartOS exposes for this interface. | | Certrelay | 7778 | HTTP | LAN / `.local` / Tor / clearnet (via StartOS) | `certrelay` server (always on). Serves cryptographic proofs binding handles to owner keys. **Setup:** run **Configure Certrelay** and set `CERTRELAY_SELF_URL` to the publicly visible URL StartOS exposes for this interface. |
| Spaced RPC | 7225 | HTTP JSON-RPC | **Loopback only** | Internal use, static-cred-authenticated via `SPACED_RPC_USER` / `SPACED_RPC_PASSWORD` from `store.json.spacedAuth` | | Spaces API (spaced RPC) | 7225 | HTTP JSON-RPC | LAN / `.local` / Tor / clearnet (via StartOS) | spaced JSON-RPC, now bound to `0.0.0.0` and exposed as the **Spaces API** interface. Static-cred-authenticated via `SPACED_RPC_USER` / `SPACED_RPC_PASSWORD` from `store.json.spacedAuth`. Internal clients still connect over loopback. |
| PostgreSQL | 5432 | Postgres wire protocol | **Loopback only** (`listen_addresses=127.0.0.1`) | Username/password from `store.json.dbAuth`; full `DB_URL` exported into the web terminal | | PostgreSQL | 5432 | Postgres wire protocol | **Loopback only** (`listen_addresses=127.0.0.1`) | Username/password from `store.json.dbAuth`; full `DB_URL` exported into the web terminal |
## Actions ## Actions
@@ -194,7 +194,7 @@ the same idempotent init logic runs and reuses the existing credentials in
| ID | Display | Grace period | Behaviour | | ID | Display | Grace period | Behaviour |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| `postgres` (daemon `ready`) | Database | 60 s | TCP listen on `127.0.0.1:5432` | | `postgres` (daemon `ready`) | Database | 60 s | TCP listen on `127.0.0.1:5432` |
| `spaced` (daemon `ready`) | Spaced RPC | 120 s | TCP listen on `127.0.0.1:7225` | | `spaced` (daemon `ready`) | Spaced RPC | 120 s | TCP listen on `0.0.0.0:7225` (exposed as the Spaces API interface) |
| `subs-prover` (daemon `ready`) | Subspaces Prover | 60 s | TCP listen on `0.0.0.0:8888`. Only present when Subspaces **and** the `set-subs-prover` toggle are enabled (toggle defaults off). Polled every 30 s; nothing depends on it. | | `subs-prover` (daemon `ready`) | Subspaces Prover | 60 s | TCP listen on `0.0.0.0:8888`. Only present when Subspaces **and** the `set-subs-prover` toggle are enabled (toggle defaults off). Polled every 30 s; nothing depends on it. |
| `subs-registry` (daemon `ready`) | Subspaces Registry | 60 s | TCP listen on `0.0.0.0:8081`. Only present when Subspaces is enabled. | | `subs-registry` (daemon `ready`) | Subspaces Registry | 60 s | TCP listen on `0.0.0.0:8081`. Only present when Subspaces is enabled. |
| `subs` (daemon `ready`) | Subspaces Web UI | 60 s | TCP listen on `0.0.0.0:7777`. Only present when Subspaces is enabled. | | `subs` (daemon `ready`) | Subspaces Web UI | 60 s | TCP listen on `0.0.0.0:7777`. Only present when Subspaces is enabled. |
@@ -211,12 +211,13 @@ the same idempotent init logic runs and reuses the existing credentials in
3. **Space-CLI Web UI is a terminal, not a graphical app.** All Spaces operations happen 3. **Space-CLI Web UI is a terminal, not a graphical app.** All Spaces operations happen
via `space-cli` (aliased as `spaces` inside the shell). via `space-cli` (aliased as `spaces` inside the shell).
4. **Externally exposed ports** (each a StartOS interface): 8080 (gotty 4. **Externally exposed ports** (each a StartOS interface): 8080 (gotty
Space-CLI Web UI, always on), 7778 (Certrelay, always on), and — only while Space-CLI Web UI, always on), 7225 (Spaces API / spaced RPC, always on),
their feature is enabled — 3000 (Explorer Web UI, currently stubbed), 7777 7778 (Certrelay, always on), and — only while their feature is enabled —
(Subspaces Web UI), 8888 (Subspaces Prover), 8081 (Subspaces Registry). 3000 (Explorer Web UI, currently stubbed), 7777 (Subspaces Web UI), 8888
**Loopback-only:** spaced RPC (7225) and PostgreSQL (5432). The Subspaces (Subspaces Prover), 8081 (Subspaces Registry). **Loopback-only:** PostgreSQL
registry is remapped from its upstream default 8080 to 8081 to avoid (5432). The spaced RPC is authenticated (static creds) even though it's now
colliding with the gotty terminal. externally exposed. The Subspaces registry is remapped from its upstream
default 8080 to 8081 to avoid colliding with the gotty terminal.
5. **Bitcoin Core 31.x is the only supported dependency.** Earlier majors are 5. **Bitcoin Core 31.x is the only supported dependency.** Earlier majors are
not allowed by the manifest version range. not allowed by the manifest version range.
6. **The web terminal is independent of spaced.** Gotty stays reachable even 6. **The web terminal is independent of spaced.** Gotty stays reachable even
@@ -308,7 +309,7 @@ ports:
subspaces_prover: 8888 # external (its own interface), subspaces only subspaces_prover: 8888 # external (its own interface), subspaces only
subspaces_registry: 8081 # external (its own interface), subspaces only; remapped from upstream 8080 subspaces_registry: 8081 # external (its own interface), subspaces only; remapped from upstream 8080
certrelay: 7778 # external (its own interface), always on certrelay: 7778 # external (its own interface), always on
spaced_rpc: 7225 # loopback only spaced_rpc: 7225 # external (Spaces API interface); spaced binds 0.0.0.0, auth-gated
postgres: 5432 # loopback only postgres: 5432 # loopback only
dependencies: dependencies:
- bitcoind - bitcoind
+3
View File
@@ -141,6 +141,9 @@ const dict = {
'Subs API': 141, 'Subs API': 141,
'REST API of the subs daemon (subsd) for Subspaces operations. Distinct from the Subspaces Prover and Subspaces Registry. Only useful while Subspaces is enabled.': 'REST API of the subs daemon (subsd) for Subspaces operations. Distinct from the Subspaces Prover and Subspaces Registry. Only useful while Subspaces is enabled.':
142, 142,
'Spaces API': 143,
'JSON-RPC API served by the spaced daemon. Authenticated with the spaced RPC credentials (SPACED_RPC_USER / SPACED_RPC_PASSWORD from store.spacedAuth). spaced binds 0.0.0.0 so external processes can reach this endpoint.':
144,
// interfaces.ts // interfaces.ts
'Space-CLI Web UI': 12, 'Space-CLI Web UI': 12,
+22
View File
@@ -3,6 +3,7 @@ import { sdk } from './sdk'
import { import {
CERTRELAY_PORT, CERTRELAY_PORT,
EXPLORER_PORT, EXPLORER_PORT,
spacedRpcPort,
SUBSPACES_PROVER_PORT, SUBSPACES_PROVER_PORT,
SUBSPACES_REGISTRY_PORT, SUBSPACES_REGISTRY_PORT,
SUBSPACES_UI_PORT, SUBSPACES_UI_PORT,
@@ -151,6 +152,26 @@ export const setInterfaces = sdk.setupInterfaces(async ({ effects }) => {
const certrelayReceipt = await certrelayMultiOrigin.export([certrelay]) const certrelayReceipt = await certrelayMultiOrigin.export([certrelay])
const spacedMulti = sdk.MultiHost.of(effects, 'spaced-api-multi')
const spacedMultiOrigin = await spacedMulti.bindPort(spacedRpcPort, {
protocol: 'http',
})
const spacedApi = sdk.createInterface(effects, {
name: i18n('Spaces API'),
id: 'spaces-api',
description: i18n(
'JSON-RPC API served by the spaced daemon. Authenticated with the spaced RPC credentials (SPACED_RPC_USER / SPACED_RPC_PASSWORD from store.spacedAuth). spaced binds 0.0.0.0 so external processes can reach this endpoint.',
),
type: 'api',
masked: false,
schemeOverride: null,
username: null,
path: '',
query: {},
})
const spacedApiReceipt = await spacedMultiOrigin.export([spacedApi])
return [ return [
uiReceipt, uiReceipt,
explorerReceipt, explorerReceipt,
@@ -158,5 +179,6 @@ export const setInterfaces = sdk.setupInterfaces(async ({ effects }) => {
proverReceipt, proverReceipt,
registryReceipt, registryReceipt,
certrelayReceipt, certrelayReceipt,
spacedApiReceipt,
] ]
}) })
+4 -1
View File
@@ -62,7 +62,10 @@ export const main = sdk.setupMain(async ({ effects }) => {
const spacedEnv = { const spacedEnv = {
SPACED_CHAIN, SPACED_CHAIN,
SPACED_DATA_DIR: dataDir, SPACED_DATA_DIR: dataDir,
SPACED_RPC_BIND: '127.0.0.1', // Listen on all interfaces so the spaced RPC can be exposed externally via
// the "Spaces API" StartOS interface. Internal clients (subs, certrelay,
// indexer, space-cli, health checks) still connect over loopback below.
SPACED_RPC_BIND: '0.0.0.0',
SPACED_RPC_PORT: String(spacedRpcPort), SPACED_RPC_PORT: String(spacedRpcPort),
SPACED_RPC_URL: `http://127.0.0.1:${spacedRpcPort}`, SPACED_RPC_URL: `http://127.0.0.1:${spacedRpcPort}`,
SPACED_BLOCK_INDEX: 'true', SPACED_BLOCK_INDEX: 'true',
+2 -2
View File
@@ -1,7 +1,7 @@
import { VersionGraph } from '@start9labs/start-sdk' import { VersionGraph } from '@start9labs/start-sdk'
import { v_0_0_9_2 } from './v0.0.9.2' import { v_0_0_9_3 } from './v0.0.9.3'
export const versionGraph = VersionGraph.of({ export const versionGraph = VersionGraph.of({
current: v_0_0_9_2, current: v_0_0_9_3,
other: [], other: [],
}) })
@@ -1,9 +1,10 @@
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'
export const v_0_0_9_2 = VersionInfo.of({ export const v_0_0_9_3 = VersionInfo.of({
version: '0.0.9:2', version: '0.0.9:3',
releaseNotes: { releaseNotes: {
en_US: `- Added a dedicated "Subs API" interface (type api) on the subs daemon's port (7777), distinct from the Subspaces Prover (8888) and Subspaces Registry (8081) interfaces. The subs daemon is "subsd — an HTTP REST API server"; this surfaces that REST API as its own dashboard entry. en_US: `- Exposed the spaced JSON-RPC API as a new "Spaces API" StartOS interface (port 7225) and changed SPACED_RPC_BIND from 127.0.0.1 to 0.0.0.0 so external processes can reach it. It remains authenticated with the spaced RPC credentials (store.spacedAuth); internal clients still connect over loopback.
- Added a dedicated "Subs API" interface (type api) on the subs daemon's port (7777), distinct from the Subspaces Prover (8888) and Subspaces Registry (8081) interfaces. The subs daemon is "subsd — an HTTP REST API server"; this surfaces that REST API as its own dashboard entry.
- New "Enable / Disable Subspaces Prover" action independently gates just the subs-prover daemon (store.enableSubsProver), **disabled by default**. When off, subs-prover does not start (it runs lengthy boot-time timing tests), but its interface on 8888 stays registered. It is added last and nothing depends on it, so its slow startup never blocks subs, the registry, or certrelay. - New "Enable / Disable Subspaces Prover" action independently gates just the subs-prover daemon (store.enableSubsProver), **disabled by default**. When off, subs-prover does not start (it runs lengthy boot-time timing tests), but its interface on 8888 stays registered. It is added last and nothing depends on it, so its slow startup never blocks subs, the registry, or certrelay.
- Embedded Certrelay (prebuilt \`horologger/certrelay:v0.2.3\` image, static musl binaries). Always on — runs the \`certrelay\` server on port 7778 from service start, as its own StartOS interface. It serves cryptographic proofs binding Bitcoin-anchored handles to owner keys, talking to the local spaced over loopback using the store.spacedAuth credentials. The bundled \`fabric\` CLI is copied to /data/bin/fabric so it's runnable from the Space-CLI Web UI. New "Configure Certrelay" action sets CERTRELAY_SELF_URL, CERTRELAY_BOOTSTRAP, and CERTRELAY_HEALTHCHECK_HANDLE (stored in store.json; saving restarts the service). Set CERTRELAY_SELF_URL to the publicly visible URL StartOS exposes for the Certrelay interface. - Embedded Certrelay (prebuilt \`horologger/certrelay:v0.2.3\` image, static musl binaries). Always on — runs the \`certrelay\` server on port 7778 from service start, as its own StartOS interface. It serves cryptographic proofs binding Bitcoin-anchored handles to owner keys, talking to the local spaced over loopback using the store.spacedAuth credentials. The bundled \`fabric\` CLI is copied to /data/bin/fabric so it's runnable from the Space-CLI Web UI. New "Configure Certrelay" action sets CERTRELAY_SELF_URL, CERTRELAY_BOOTSTRAP, and CERTRELAY_HEALTHCHECK_HANDLE (stored in store.json; saving restarts the service). Set CERTRELAY_SELF_URL to the publicly visible URL StartOS exposes for the Certrelay interface.
- Removed the build-from-source chains for the Go indexer and the SvelteKit explorer, and dropped their builder images (\`golang:1.23-alpine\`, \`node:20-alpine\`). This shrinks the .s9pk and removes the multi-minute first-enable compile. The indexer + explorer-UI daemons are now stubbed with TODOs in startos/main.ts pending prebuilt images (indexer image not yet produced; explorer image to be provided). Enabling the embedded explorer currently starts PostgreSQL only. All explorer-indexer actions (show-db-credentials, reset-db-state, reset-indexer-state, reset-explorer-state) are retained. - Removed the build-from-source chains for the Go indexer and the SvelteKit explorer, and dropped their builder images (\`golang:1.23-alpine\`, \`node:20-alpine\`). This shrinks the .s9pk and removes the multi-minute first-enable compile. The indexer + explorer-UI daemons are now stubbed with TODOs in startos/main.ts pending prebuilt images (indexer image not yet produced; explorer image to be provided). Enabling the embedded explorer currently starts PostgreSQL only. All explorer-indexer actions (show-db-credentials, reset-db-state, reset-indexer-state, reset-explorer-state) are retained.