Frequently Asked Questions
Find answers to common questions about Clementine’s trust-minimized bridge design and implementation.Bridge Design
Why do bridge funds stay in N-of-N instead of M-of-N?
Why do bridge funds stay in N-of-N instead of M-of-N?
It is important to distinguish this N-of-N arrangement from a traditional multisignature wallet; instead, it functions as a key deletion covenant. A covenant is a mechanism that restricts how an UTXO can be spent.One potential concern is that if any of the signers refuse to sign, new deposits could be blocked, as the required N-of-N signatures could not be collected. However, this isn’t a problem because:
- The Bridge Contract also maintains a separate M-of-N multisig, which has the authority to update the N-of-N set
- While this may appear similar to simply holding bridge funds in an M-of-N multisig, it is fundamentally different
- Funds already deposited and secured by the N-of-N covenant remain safe
- Updates to the N-of-N set can be subject to time restrictions (for example, allowing one month for updates)
- This gives participants the opportunity to exit the system if they do not trust the new set of signers
Why is the bridge denominator 10 BTC and not 1 BTC?
Why is the bridge denominator 10 BTC and not 1 BTC?
This is still an open research question. However, from current observations, 1 BTC doesn’t seem feasible.The reason is that every round transaction has a limited amount of kickoff connectors, which limits the withdrawal throughput. Using 10 BTC as the denomination provides better throughput characteristics while maintaining security properties.
This parameter may be refined as the protocol evolves and more research is conducted on optimal throughput configurations.
Why do we use Winternitz One-Time Signatures?
Why do we use Winternitz One-Time Signatures?
In Bitcoin script, with native opcodes, one can only verify Schnorr signatures that sign the transaction. In other words, one cannot verify a Schnorr signature that signs a random message.However, Winternitz and Lamport signatures can be verified just by taking hashes and checking for equality (Winternitz involves some additional mathematical operations where Bitcoin has those).
Use Case
This allows us to use Winternitz to propagate state across UTXOs. For example:- In BitVM, the prover signs intermediate steps
- Later, the same signatures can be used to disprove an incorrect proof
What are the different actor types in Clementine?
What are the different actor types in Clementine?
Clementine has three main actor types that work together to operate the bridge:
-
Verifier (sometimes called signer)
- Participates in the N-of-N multisig
- Signs transactions using MuSig2
- Validates deposits and withdrawals
-
Operator
- Monitors the Bitcoin blockchain
- Initiates deposit and withdrawal processes
- Typically runs alongside a verifier service
-
Aggregator
- Coordinates the MuSig2 signing process
- Collects nonces and signatures from verifiers
- Creates and broadcasts move transactions
How does the MuSig2 signing process work?
How does the MuSig2 signing process work?
The deposit finalization process uses MuSig2 and consists of three steps:
-
Nonce Aggregation
- Aggregator collects nonces from all verifiers
- Nonces are aggregated using MuSig2
- Aggregated nonce is sent back to verifiers
-
Signature Aggregation
- Partial signatures are requested from verifiers for the aggregated nonce
- Signatures are aggregated using MuSig2
- Final Schnorr signature is sent to verifiers
-
Move TX Creation
- Verifiers use aggregated signatures to finalize the deposit
- Verifiers return move tx partial signatures
- Aggregator aggregates these and creates the move transaction
What is RISC0_DEV_MODE and when should I use it?
What is RISC0_DEV_MODE and when should I use it?
RISC0_DEV_MODE is an environment variable that enables development mode for RISC Zero circuits.When to use it:- Running tests
- Local development
- Testing deployments
- Production deployments
- Mainnet operations
- When you need full cryptographic proofs
Can I use environment variables instead of config files?
Can I use environment variables instead of config files?
Yes! Clementine supports both configuration methods and you can even mix them.For main configuration:See the
- Set
READ_CONFIG_FROM_ENV=1to read from environment variables - Otherwise, use
--config /path/to/config.toml
- Set
READ_PARAMSET_FROM_ENV=1to read from environment variables - Otherwise, use
--protocol-params /path/to/params.toml
.env.example file in the repository for a complete reference.Security
How does Clementine ensure security?
How does Clementine ensure security?
Clementine uses multiple security layers:
- BitVM for trust minimization - Leverages BitVM2 for optimistic verification
- N-of-N key deletion covenant - Funds are protected as long as one signer remains honest
- Mutual TLS (mTLS) - All gRPC communications are encrypted and authenticated
- Client certificate verification - Only authorized entities can call RPC methods
- Watchtower mechanism - Monitors for incorrect proofs and challenges them
What should I know about TLS certificates in production?
What should I know about TLS certificates in production?
- Use certificates signed by a trusted Certificate Authority (CA)
- Keep private keys (*.key files) secure
- Never commit private keys to version control
- Rotate certificates regularly
- Consider using distinct client certificates for different services
- Store certificates in secure, encrypted storage
Resources
Where can I learn more about BitVM?
Where can I learn more about BitVM?
- Clementine Whitepaper - Explains Clementine’s specific implementation
- BitVM Bridge Paper - Original BitVM bridge design
- BitVM2 - Latest BitVM protocol version
Where can I find code documentation?
Where can I find code documentation?
Code documentation is available in two places:
- Online: chainwayxyz.github.io/clementine/clementine_core
- Local generation:
Documentation will be at
target/doc/clementine_core/index.html
Still have questions?
If you can’t find the answer you’re looking for:- Check the Troubleshooting guide
- Browse GitHub Issues
- Join the Citrea Discord
- For security issues, see Security Reporting