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
8 changes: 4 additions & 4 deletions instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ Threshold signing needs enough devices online at the same moment. Phones sleep a
3. **Restart the service.** Once a share is present, restarting starts the co-signer. It announces itself on the FROST relay, but stays in standby until you enable co-signing.
4. **Enable co-signing.** Use the kill switch in the Web Admin to turn co-signing on (it ships off, fail-closed). The setting persists across restarts.

After that, the Web Admin shows the bunker connection string (npub), the group, the threshold, and a live feed of signing activity.
After that, the Web Admin shows the bunker connection string (npub), the group, the threshold, and a live feed of signing activity. If you import shares for more than one group, the Shares section marks the active group and lets you switch which one the co-signer serves.

## Configuration

Use the **Configure** action to set:

- **Bunker Relays:** where Nostr clients reach this signer over NIP-46. Default `wss://nos.lol`.
- **FROST Relays:** where signing rounds are coordinated with your other devices. These must match the relays your other devices use. Default `wss://nos.lol`.
- **Group (npub):** optional. Leave blank to auto-detect the single imported share's group; set it only if the vault holds shares for more than one group.
- **Bunker Relays:** where Nostr clients reach this signer over NIP-46. Default `wss://bucket.coracle.social`.
- **FROST Relays:** where signing rounds are coordinated with your other devices. These must match the relays your other devices use. Default `wss://bucket.coracle.social`.
- **Group (npub):** optional override. Leave blank and the co-signer serves your share's group automatically. If the vault holds shares for more than one group it auto-selects one (no crash) and you can switch which group is served from the Web Admin's Shares section. Set this only to pin a specific group.

Saving the configuration restarts the service.

Expand Down
4 changes: 2 additions & 2 deletions startos/actions/configure.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const inputSpec = InputSpec.of({
),
default: [defaultBunkerRelay],
},
{ patterns: [relayPattern], placeholder: 'wss://nos.lol' },
{ patterns: [relayPattern], placeholder: 'wss://bucket.coracle.social' },
),
),
frostRelays: Value.list(
Expand All @@ -32,7 +32,7 @@ const inputSpec = InputSpec.of({
),
default: [defaultFrostRelay],
},
{ patterns: [relayPattern], placeholder: 'wss://nos.lol' },
{ patterns: [relayPattern], placeholder: 'wss://bucket.coracle.social' },
),
),
frostGroup: Value.text({
Expand Down
6 changes: 4 additions & 2 deletions startos/utils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const uiPort = 8080

export const defaultBunkerRelay = 'wss://nos.lol'
export const defaultFrostRelay = 'wss://nos.lol'
// coracle's relay reliably delivers the rapid ephemeral (kind 24242) FROST
// signing traffic; nos.lol drops it, stalling signing rounds.
export const defaultBunkerRelay = 'wss://bucket.coracle.social'
export const defaultFrostRelay = 'wss://bucket.coracle.social'
10 changes: 8 additions & 2 deletions startos/versions/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import { VersionGraph } from '@start9labs/start-sdk'
import { v0_4_0_0 } from './v0.4.0_0'
import { v0_4_1_0 } from './v0.4.1_0'
import { v0_4_2_0 } from './v0.4.2_0'
import { v0_4_3_0 } from './v0.4.3_0'
import { v0_4_5_0 } from './v0.4.5_0'
import { v0_4_6_0 } from './v0.4.6_0'
import { v0_4_7_0 } from './v0.4.7_0'

export const versionGraph = VersionGraph.of({
current: v0_4_0_0,
other: [],
current: v0_4_7_0,
other: [v0_4_0_0, v0_4_1_0, v0_4_2_0, v0_4_3_0, v0_4_5_0, v0_4_6_0],
})
13 changes: 13 additions & 0 deletions startos/versions/v0.4.1_0.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'

export const v0_4_1_0 = VersionInfo.of({
version: '0.4.1:0',
releaseNotes: {
en_US:
'Peer presence (online/offline) now appears in the Web Admin activity feed.',
},
migrations: {
up: async ({ effects }) => {},
down: IMPOSSIBLE,
},
})
13 changes: 13 additions & 0 deletions startos/versions/v0.4.2_0.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'

export const v0_4_2_0 = VersionInfo.of({
version: '0.4.2:0',
releaseNotes: {
en_US:
'Reliable repeated bunker signing: imported shares now aggregate correctly (no more "Unknown identifier"), and a spurious "No nonces stored" failure is gone. Credential files are written atomically and fail closed if corrupted, so the bunker URL stays stable across restarts.',
},
migrations: {
up: async ({ effects }) => {},
down: IMPOSSIBLE,
},
})
13 changes: 13 additions & 0 deletions startos/versions/v0.4.3_0.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'

export const v0_4_3_0 = VersionInfo.of({
version: '0.4.3:0',
releaseNotes: {
en_US:
'Web Admin UX: live co-signer presence with a readiness indicator (Ready to sign / Waiting for co-signers), a prominent approval bar with browser-tab and opt-in desktop alerts, a decluttered activity feed (repeated events collapse into one line), relative timestamps, and a signing log grouped by session with expandable detail.',
},
migrations: {
up: async ({ effects }) => {},
down: IMPOSSIBLE,
},
})
13 changes: 13 additions & 0 deletions startos/versions/v0.4.5_0.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'

export const v0_4_5_0 = VersionInfo.of({
version: '0.4.5:0',
releaseNotes: {
en_US:
'Co-signer reliability: peers now report accurate online/offline presence, and signing rounds gracefully fall back to interactive mode when a pre-exchanged nonce is stale, preventing stuck or failed co-sign requests.',
},
migrations: {
up: async ({ effects }) => {},
down: IMPOSSIBLE,
},
})
13 changes: 13 additions & 0 deletions startos/versions/v0.4.6_0.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'

export const v0_4_6_0 = VersionInfo.of({
version: '0.4.6:0',
releaseNotes: {
en_US:
'Multiple key groups: the co-signer no longer crashes when the vault holds more than one FROST group. It serves one group at a time (auto-selected by default) and you can switch which group is served from the Web Admin. Default relay is now wss://bucket.coracle.social, which reliably delivers FROST coordination traffic.',
},
migrations: {
up: async ({ effects }) => {},
down: IMPOSSIBLE,
},
})
13 changes: 13 additions & 0 deletions startos/versions/v0.4.7_0.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'

export const v0_4_7_0 = VersionInfo.of({
version: '0.4.7:0',
releaseNotes: {
en_US:
'Bounded multi-event pre-approval cache (cap 100, TTL 5 min) and single-party FROST sign/ECDH refinements, so wallet descriptor coordination and multi-event signing flows no longer stall after a single pre-approval. Includes the automated fund sweep on descriptor migration.',
},
migrations: {
up: async ({ effects }) => {},
down: IMPOSSIBLE,
},
})