cobo-tss-node
// Manage a Cobo TSS Node for MPC threshold signing. Use when: setting up a new TSS Node, starting/stopping the node service, checking node status or health, signing for key share checkups, exporting shares for disaster recovery, backing up or updating the node, installing as a systemd or launchd servi
Cobo TSS Node
Manage a Cobo TSS Node — the client-side MPC signing component for Cobo's co-managed custody.
When to Use
✅ USE this skill when:
- Installing the Cobo TSS Node binary
- Initializing a new TSS Node (generating keys + Node ID)
- Starting/stopping/restarting the node service
- Installing as a system service (Linux systemd / macOS launchd)
- Checking node health, viewing groups, or reading logs
- Periodic key share checkup signing
- Exporting shares for disaster recovery
- Backing up or updating the node
❌ DON'T use this skill when:
- Interacting with Cobo WaaS REST API → use Cobo SDK
- Building on-chain transactions directly
- Managing Cobo Portal (web UI operations)
Quick Start
./scripts/install.sh # Download binary
./scripts/setup-keyfile.sh # Create password file
./scripts/init-node.sh # Initialize (outputs Node ID)
./scripts/install-service.sh linux # Install systemd service
./scripts/node-ctl.sh start # Start
Scripts
| Script | Purpose |
|---|---|
scripts/install.sh | Download binary from GitHub releases |
scripts/setup-keyfile.sh | Create .password key file (mode 600) |
scripts/init-node.sh | Initialize node keys and database |
scripts/node-info.sh | View Node ID and group info |
scripts/start-node.sh | Start node in foreground |
scripts/install-service.sh | Install as systemd (Linux) or launchd (macOS) service |
scripts/node-ctl.sh | Unified daily operations CLI |
Daily Operations
All post-install operations go through node-ctl.sh:
./scripts/node-ctl.sh <command> [--dir ~/.cobo-tss-node]
Service Management
| Command | Description |
|---|---|
status | Show service status (systemctl/launchctl) |
start | Start the TSS Node service |
stop | Stop the service |
restart | Restart the service |
logs | View recent logs (last 50 lines) |
logs -f | Tail logs in real time |
logs --lines=200 | View more log lines |
Linux uses journalctl, macOS reads from ~/.cobo-tss-node/logs/launchd-stdout.log.
Health Check
./scripts/node-ctl.sh health
Checks in one command:
- ✅/❌ Service running status
- 📌 Binary version
- ✅/❌ Database exists + file size
- ✅/❌ Config file present
- ✅/⚠️ Key file permissions (must be 600)
- 💾 Available disk space
- 📋 Node ID and metadata
MPC Group Management
./scripts/node-ctl.sh groups # List all MPC groups
./scripts/node-ctl.sh group <group-id> # Inspect a specific group
Shows group details: participants, threshold, public key, protocol type.
Key Share Checkup (Periodic Signing)
./scripts/node-ctl.sh sign <group-id> [message]
- Signs a message using the local key share — proves share integrity without full MPC ceremony
- If no message given, auto-generates:
checkup-YYYY-MM-DD - Recommended: run weekly or after any infrastructure changes
- This is a local-only operation (no network/WebSocket needed)
Disaster Recovery Export
./scripts/node-ctl.sh export <group-id1,group-id2,...>
- Exports encrypted key share files to a timestamped directory:
~/.cobo-tss-node/recovery/YYYYMMDD-HHMMSS/ - Exported files are encrypted — need the database password to restore
- Recommended: export after every keygen or key reshare, store offsite
Backup
./scripts/node-ctl.sh backup
Creates a timestamped backup at ~/.cobo-tss-node/backups/YYYYMMDD-HHMMSS/ containing:
secrets.db— encrypted database (key shares, session data)cobo-tss-node-config.yaml— configuration.password— key fileSHA256SUMS— integrity checksums
⚠️ Store backups securely — contains everything needed to restore the node.
Update Binary
./scripts/node-ctl.sh update # Update to latest
./scripts/node-ctl.sh update --version=v0.13.0 # Update to specific version
What it does:
- Stops the service
- Backs up current binary as
cobo-tss-node.bak - Downloads and installs new version
- Runs database migration (if needed)
- Restarts the service
- Shows new version
Database Migration
./scripts/node-ctl.sh migrate # Run migration
./scripts/node-ctl.sh migrate --dry-run # Preview only
Run after binary updates. The update command does this automatically.
Change Password
./scripts/node-ctl.sh change-password
Changes the database encryption password. Also updates the key file.
Uninstall Service
./scripts/node-ctl.sh uninstall
Removes the systemd/launchd service but keeps all data in ~/.cobo-tss-node/. To fully remove: rm -rf ~/.cobo-tss-node.
Recommended Maintenance Schedule
| Task | Frequency | Command |
|---|---|---|
| Health check | Daily | node-ctl.sh health |
| Key share checkup | Weekly | node-ctl.sh sign <group-id> |
| Backup | Weekly | node-ctl.sh backup |
| Log review | Weekly | node-ctl.sh logs --lines=500 |
| Export shares | After keygen/reshare | node-ctl.sh export <group-ids> |
| Update binary | On new release | node-ctl.sh update |
| Password rotation | Quarterly | node-ctl.sh change-password |
Configuration Reference
Config file: ~/.cobo-tss-node/configs/cobo-tss-node-config.yaml
Key sections:
env:development/productiondb.path: database file pathcallback.cb_server: risk control callback URL + public key (v1)callback.cb_server_v2: risk control callback URL + public key (v2)event.server: event publish endpoints (keygen/keysign/reshare notifications)embedded_risk_control_rules: local allow/reject rules for keygen, keysign, resharelog: stdout + file logging configmetrics: InfluxDB monitoring endpoint
Directory Layout
~/.cobo-tss-node/
├── cobo-tss-node # binary
├── cobo-tss-node.bak # previous binary (after update)
├── .password # key file (chmod 600)
├── configs/
│ ├── cobo-tss-node-config.yaml # active config
│ └── cobo-tss-node-config.yaml.template # template reference
├── db/
│ └── secrets.db # AES-GCM encrypted database
├── logs/ # log files
├── recovery/ # exported key shares
│ └── YYYYMMDD-HHMMSS/
└── backups/ # full backups
└── YYYYMMDD-HHMMSS/
├── secrets.db
├── cobo-tss-node-config.yaml
├── .password
└── SHA256SUMS
Key Design Decisions
--key-fileused on all commands for non-interactive operation (required for service mode)- Database is AES-GCM encrypted;
.passwordfile must be mode600 - Linux service runs with
NoNewPrivileges,ProtectSystem=strict,ReadWritePathslimited to db/logs/recovery - macOS agent uses
KeepAlive+ThrottleIntervalfor auto-restart on failure - Backups include SHA256 checksums for integrity verification
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Service won't start | Missing config file | cp configs/*.template configs/cobo-tss-node-config.yaml |
| "password" prompt on start | Missing --key-file | Reinstall service: install-service.sh linux |
Permission denied on .password | Wrong file mode | chmod 600 ~/.cobo-tss-node/.password |
| Init fails | DB already exists | Check with node-info.sh; delete db/secrets.db only if intentional |
| WebSocket connection failed | Wrong environment flag | Match --dev/--sandbox/--prod to your Cobo Portal environment |
| Service exits immediately | Port or resource conflict | Check node-ctl.sh logs for error details |
| Migration fails | Version incompatibility | Try migrate --dry-run first; contact Cobo support if persistent |