The key share generated here lives on your machine, encrypted in
db/secrets.db with your password. The database file and the password
together are the key share: back both up, and treat a wallet co-signed by a
laptop as a development wallet, not a production one.Prerequisites
- Docker installed and running (Docker Desktop on macOS is fine)
- A Cobo API key with MPC wallet permissions
- Cobo CLI >= 0.1.10 (
pip install cobo-cli) for the one-command path below
Path A: Cobo CLI (recommended)
init prints the node ID you will need next. The relay refuses a node that
is not yet in any key share holder group (โnot bound to any appโ) โ status
explains this as the expected pre-bind state, not an error. The relay
environment follows your CLI environment: --env prod connects to the
production relay, --env dev to development.
Behind a corporate proxy that intercepts TLS, add
--ca-bundle /path/to/proxy-ca.pem to start.
Path B: the official package directly
Follow Deploy a server co-signer with two adjustments for a development machine:- Use
--key-filefor a non-interactive password (see the non-interactive section on that page) โ piped stdin does not work. - Create the production config before starting:
printf 'env: production\n' > configs/cobo-tss-node-config.yaml
Bind the node and generate keys โ all over the API
- Create a vault with Create vault:
- Create a key share holder group carrying your node ID with Create key share holder group. Cobo is added automatically as the first holder:
- Run the key generation ceremony with
Create TSS request
and poll it until
statusisSuccess(about 20 seconds with both parties online):
TSS Node registration accepted
and cobo node status reports โconnected to the relayโ.
Enum values are exact: the holder type is API (an acronym, all caps, like
MPC and UTXO elsewhere in the API), the group type MainGroup.
After key generation
- A default wallet is created automatically under the vault, with mainnet
addresses (ETH, BTC, SOL) generated. For testnets, create the address
explicitly โ for example
{"chain_id": "SETH", "count": 1}on the walletโs address-creation operation. - Test-token airdrops apply only to the first vault of an organization; later vaults receive none โ fund them from your first wallet.
- Signing requires the node to be running; receiving does not (addresses derive from the vaultโs root public key server-side).
