This document provides a technical assessment of specific Bitcoin consensus changes in the spirit of RFC 7282. The primary aim is to identify any technical objections to proposed changes. As part of an iterative process, this document may be updated as new information becomes available.
The scope is limited to consensus rule changes that qualify as softforks. However, all softforks, regardless of their specific changes, carry inherent risks:
- Chain splits can occur if full node implementations don't enforce exactly identical rules. This requires unambiguous specifications and bug-free implementations.
- Softforks typically result in a complexity increase of the consensus rules. All full node implementations must permanently consider, maintain and test these new rules.
- If less than 100% but more than 50% of hashrate enforces the softfork, users who haven't updated may experience blockchain reorganizations. These can be long and frequent, depending on the enforcing hashrate. Note that hashrate may signal support without actually enforcing the rules.
- If the majority hashrate doesn't enforce the softfork, a chain split occurs between updated and non-updated users.
Thus, a proposed softfork must outweigh these risks by
- Significantly and demonstrably improving security, scalability, privacy or self-custody.
For example, if the softfork is supposed to enable new applications or improve upon existing ones, there should be compelling evidence of:
- Technical feasibility of building the application
- Significant user benefits
- Likely adoption
- Necessity of consensus changes (i.e., the application cannot be implemented using existing rules)
In addition, we consider the following evaluation criteria:
- Technical soundness of the specification
- Impact on Bitcoin's incentive structure and potential centralization risks
- Compatibility with Bitcoin's core social contract (e.g., resistance to censorship)
- Analysis of alternatives
- Simpler proposals with equivalent benefits
- Similarly complex proposals with additional benefits
- More complex proposals offering substantially greater benefits
I have not reviewed the specification in detail. The specification suggests that the implementation is not particularly difficult, but also not entirely straightforward due to the mandatory caching mechanism. For example, a data race bug was discovered during peer review of the Bitcoin Core PR, but only after the CTV activation client was published.
The BIP proposes several use cases as motivation: vaults, non-interactive payment channel creation, congestion controlled batching, efficient construction of discreet log contracts, and payment pools.
Vaults based on CTV behave quite differently from traditional vaults. In a CTV-based vault, funds can be unvaulted only to a predefined hot wallet. If the user detects unauthorized unvaulting, they can sweep the funds being unvaulted to the cold wallet. From the hot wallet, funds can then be sent to their final destination. This design provides no protection against the hot wallet itself being compromised. Traditional vaults, in contrast, allow direct unvaulting to the intended final destination.
The primary advantage of this design is that users can replenish their hot wallet from a vault managed by an online computer, eliminating the need to access a cold wallet. Implementations must ensure that an adversary who compromises both the vault and hot wallet cannot delete state in a way that prevents creation of committed unvaulting and sweep transactions. However, there are several aspects of this vault design that impact usability:
- The amounts that can be unvaulted per transaction are fixed at the time the vault receives new funds.
- It requires monitoring infrastructure that remains uncompromised when the vault is compromised.
- It requires an additional transaction compared to sending directly from the cold wallet to the hot wallet.
- A further transaction may be needed to CPFP the unvaulting transaction.
Given the requirement for infrastructure to verify the legitimacy of unvault transactions, similar security properties might be achievable through a standard multisig setup with the user's wallet.
While it's possible to build a vault that resembles the OP_CTV vault using presigned transactions, this approach has significant drawbacks: whenever a user receives funds, they need to access their cold wallet, create the presigned transaction, store the presigned transaction such that its not deletable by the adversary, and delete the key. The cold wallet cannot batch-generate the presigned transactions because typically the user does not know which amounts they are going to receive in the future. No wonder no one has built a vault based on presigned transactions!
The congestion control protocol offers potential benefits in smoothing blockspace demand, but it comes with increased overall blockspace requirements. Unlike a single transaction that batches multiple payments, OP_CTV-based congestion control creates a transaction tree that consumes more blockspace. Additionally, transactions intended for broadcast during low-demand periods would likely need fee-bumping capabilities, requiring an anchor output and an additional CPFP transaction, further increasing blockspace usage.
The potential adoption of OP_CTV-based congestion control remains very uncertain, primarily due to its requirement for off-chain coordination between senders and receivers. The protocol must ensure that the receivers are guaranteed to receive a payment in the future. As a fallback mechanism, receivers need the ability to submit their portion of the transaction tree to the blockchain independently. This necessitates that receivers obtain and verify their relevant transaction tree segments before accepting payments.
While a similar congestion control system could theoretically be built using presigning, the required interactivity makes this approach impractical except in specific, limited scenarios.
OP_CTV offers significant performance improvements for DLCs. The magnitude of this improvement can genuinely be described as dramatic. However, DLCs have not achieved meaningful adoption on Bitcoin, and their limited use doesn't appear to stem from performance limitations.
OP_CTV-based payment pools allow multiple parties to share a single UTXO, potentially offering significant scalability benefits. However, these benefits depend heavily on achieving a workable user experience, which remains uncertain given the complex design space of payment pools and similar constructions.
OP_CTV alone appears to provide limited benefits. As noted in the blog post introducing OP_CTV-based payment pools, these systems can be implemented using presigning instead: "Do Payment Pools Need CTV? Not necessarily. [...] we already need everyone online for an update."
OP_CTV could enhance the Peerswap protocol by allowing to determine the swap amount after opening transaction is confirmed. Compared to building this feature using presigned transactions, OP_CTV significantly reduces the protocol's interactivity and complexity.
Federated sidechains can benefit from an Emergency Withdrawal Procedure (as implemented in the Liquid sidechain, for example). This simply means that federation-controlled coins can be spent in two ways:
- by providing
t
signatures from the federation members - by providing
t'
signatures from some set of emergency keys but only afterdelta
time has passed since the output was created
The problem with this implementation of the procedure is that federations must regularly spend outputs just to prevent the emergency spending path from activating, which consumes unnecessary block space.
With OP_CTV, it would be possible to replace the emergency spending path with <txhash> OP_CTV
, where <txhash>
is the hash of a "kickoff" transaction.
The kickoff transaction would create an output containing the emergency spending path.
This approach eliminates the need to regularly spend federation outputs since they wouldn't contain an emergency path. In case of an emergency, the emergency response unit could broadcast a kickoff transaction and then spend its emergency path once the timelock expires.
While it's possible to implement a kickoff transaction with presigning instead of OP_CTV, this would be more complex and less powerful because it can only be used for the federation's change outputs and not for peg-ins.
BIP 119 CHECKTEMPLATEVERIFY is an interesting point in the covenant design space, offering specific improvements without enabling general/recursive covenants and doing that very efficiently. However, at this point I cannot support a softfork consisting of OP_CTV alone because the benefits do not outweigh the softfork coordination cost. There is a significant chance that CTV would see limited adoption after activation. As detailed above, OP_CTV-based vaults and congestion control mechanisms have low adoption potential. While OP_CTV offers optimizations for existing protocols (such as DLCs and peerswap), these protocols currently have low usage on Bitcoin.
Correct. This was obviously a lot of effort put into something that is not in fact on the table for activation at this point in time.
And it's obviously thoughtful, really hard to disagree with many observations as well.