- Home
- Bitcoin wallet
Use your Bitcoin wallet
Connect a wallet you already use on BTC, BCH, or BSV. Sign once. You get a Sigma identity derived from the key you already hold, and nothing new to write down.
Two layers, and they are worth keeping apart. Your identity attestation hashes are written to BSV. That is the anchor chain, and it does not move. Generating the identity is the other layer, and for that any Bitcoin family key you already hold will do.
One key, whichever fork you followed
The forks split the ledger. They did not split the cryptography.
BTC, BCH, and BSV all inherited secp256k1 and the Bitcoin Signed Message convention from the same codebase. One private key produces the same public key, and the same public key hash, on all three.
Your existing Bitcoin key already works
People ask which fork Sigma wants. The honest answer is that the question does not apply at the layer where the key is used.
secp256k1 everywhere
Every Bitcoin fork kept the elliptic curve from the original release. A private key is a number on that same curve in each of them, so the public key it produces is identical whichever client you generated it in.
Bitcoin Signed Message, unchanged
The signed message convention predates the forks and all three kept it. A signature produced by a BCH wallet recovers the same public key that a BTC or BSV wallet would have produced from that key.
Encoding and wallet conventions
BTC and BSV print a P2PKH address as the same base58 string. BCH re-encodes that same key hash as CashAddr. Wallets also differ on which derivation paths they use by default. None of that reaches the key.
Sigma derives from the key
Identity comes from the key itself, not from the address format your wallet prefers or the chain its balance sits on. So your existing Bitcoin key already works, whichever fork you followed.
Wallets that can sign
Every wallet listed here supports Bitcoin signed messages. Grouped by the fork it was built for.
Coinomi signs on mobile only. 1Sat signs through the @1sat/actions package rather than a menu in a wallet. Hardware devices sign through the Electrum family rather than through their own desktop app, and Trezor Suite signs directly.
The Bitcoin path in three calls
Client side. Nothing here sends a private key anywhere.
On the server, the route this posts to is provided by @sigma-auth/better-auth-plugin, so a project already running Better Auth wires this path up as a plugin rather than as a separate SDK.
// 1. Build the connection challenge for the address being connected
const message = 'sigma-auth-connect:1:' + address;
// 2. Sign it as a Bitcoin Signed Message. This is the only signature required,
// and any wallet that implements the convention can produce it.
const signature = await wallet.signMessage(message);
// 3. Hand the signature to Sigma. The private key never leaves the wallet.
await fetch('/api/wallet/connect', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ address, message, signature }),
});What Sigma does with the signature
The public key is recovered from the signature and the identity is derived from it. Sigma never sees the private key, because it never needs to.
// Recover the public key from the Bitcoin Signed Message signature
const pubkey = recoverPublicKey(message, signature);
// The identity is derived from that key, not from the address format
// your wallet happens to prefer. Which fork the wallet followed
// changes how the address is printed, and nothing else.Leaving without asking us
The claim is only worth something if you can walk away from it. This is the whole procedure.
# Your Bitcoin private key controls the identity directly.
# 1. Export it from whichever wallet holds it today
# 2. Import that same key into any other Bitcoin family wallet
# 3. The wallet derives the same public key hash. Nothing was
# delegated, so there is no permission to ask anyone for.What your wallet needs to do
Produce a Bitcoin Signed Message
That is the whole requirement. Any wallet implementing the convention can sign the connection challenge, whichever fork it was built for.
Export or import a private key
Needed only if you want to move the identity to a different wallet later. If your wallet can import a key, it can take this identity with it.
Connect a wallet and look at the result
The full derivation and recovery procedure is in the wallet recovery documentation. If your key lives on an EVM chain instead, that path is documented separately.