Bitcoin users should only need BTC on Bitcoin to force a withdrawal of their BTC from BOB back to Bitcoin. We are working on a hybrid solution: defaulting to Ethereum as DA while allowing users to force include transactions on BOB via a special transaction on Bitcoin. We are excited to share our work in progress in this blog post.
tl;dr
One of the core properties of L2s is that their state needs to progress even when the sequencer is offline. L2s achieve this by reading and writing their state from a Data Availability (DA) layer that can be updated independently of the L2 being online. This way, users can force the inclusion of their transactions even when the sequencer is offline, or the sequencer does not accept their transactions directly.
For BOB’s BitVM bridge, this poses an interesting problem. BOB currently uses Ethereum EIP-4844 blobs as its DA layer. Users on Ethereum can easily trigger withdrawals back to Bitcoin via the BitVM bridge. However, it requires users to have ETH on Ethereum.
This is not good enough for us: Bitcoin users should only need BTC on Bitcoin to force a withdrawal of their BTC from BOB back to Bitcoin. We are working on a hybrid solution: defaulting to Ethereum as DA while allowing users to force include transactions on BOB via a special transaction on Bitcoin. We are excited to share our work in progress in this blog post.
The process of derivation is quite important for L2s: the entire L2 state of BOB needs to be constructed from the L1 and the DA layer. It allows L2s to enjoy the same censorship resistance as the DA layer, in our case, Ethereum.
Simplified, in rollups (specifically OP Stack chains), we have two types of data on the L1:
If we want Bitcoin as a DA layer, why not fully switch to using Bitcoin completely as a DA layer? The answer is mostly cost. Bitcoin has very little storage available (about 4MB roughly every 10 minutes), and thus, storage cost is high.
However, in our case, BOB can still use Ethereum as its “main” DA layer where it posts its entire transaction data, but add Bitcoin as a highly censorship-resistant fallback layer if Ethereum DA is unavailable. Essentially, Ethereum becomes the optimistic DA layer while Bitcoin becomes the expensive but fault-tolerant last resort.
The basic solution is to add Bitcoin to BOB as a part of the derivation pipeline, such that BOB (and specifically the “op-node”) processes inputs in this order:
Let’s jump into a possible solution to encode the Bitcoin-forced withdrawal transactions into the BOB derivation pipeline. Note that this is still being researched, so changes are possible.
We will need three parts to create a forced withdrawal transaction:
An OP stack deposit transaction has the following structure:
A forced withdrawal transaction requires including the encoded withdrawal transaction in the data field of the deposit transaction. This is done by creating the transaction on BOB that triggers the withdrawal from BOB to Bitcoin and would work exactly the same as if the transaction was sent from Ethereum.
We can then store a (compressed) version of the forced withdrawal transaction on Bitcoin that includes all the above data.
As the data for the forced withdrawal transaction is larger than what typically should be stored in an OP_RETURN output, we will likely use a Taproot output to store the data.
While it’s easy to identify a deposit transaction (that may include a withdrawal) on Ethereum due to it being sent to BOB’s OptimismPortal contract, it’s not as easy to identify a forced withdrawal transaction on Bitcoin.
Data Serialization: The forced withdrawal transaction is serialized using Taproot scripts within an “envelope” structure. These are noops on the Bitcoin network and are used, e.g., for Ordinals as well. We adjust the structure to fit our needs.
Unset
OP_FALSE OP_IF
OP_PUSH “bob”
OP_1
OP_PUSH “transaction”
OP_0
OP_PUSH $WITHDRAWAL_TRANSACTION_DATA
OP_ENDIF
Two-Phase Commit/Reveal Scheme:
As with Ordinals, users will have to submit two transactions to Bitcoin:
This is the most open problem yet, with two options currently under consideration:
We are also experimenting with more ideas, so stay tuned for more updates!
Anyone can determine the state of BOB by only having to check the data on Bitcoin and Ethereum:
Data Consistency: While ensuring data consistency between Ethereum and Bitcoin chains is important, the mere presence of transaction data on both chains does not guarantee validity. Transactions must represent valid state transitions according to the rollup’s state transition function to be considered legitimate. The solution requires implementing validation logic inside op-node (or other consensus layer implementations) that first verifies if a transaction results in a valid state change before accepting it.
Fraud Proofs and Validity: The fraud proof system for both BitVM and Ethereum need to be enhanced to handle data from both chains, which could make dispute resolution more complex. To address this, we need to accurately account the possible transactions from Bitcoin and Ethereum as part of the BitVM bridge and BOB’s settlement on Ethereum.
Storage Increase: Additionally, BOB nodes in the network face increased storage and bandwidth requirements since they need to process and store data from Bitcoin and Ethereum. However, we could mitigate this by requiring that BOB transactions made on Bitcoin need to be included in Ethereum blobs with a reference to the latest Bitcoin blocks. That way, nodes need only synchronize recent Bitcoin blocks.
We are excited to push the frontier of hybrid rollups combining Bitcoin’s security with Ethereum’s innovation. In this concrete problem, we are interested in having Bitcoin’s censorship resistance of transactions combined with BOB’s rollup stack. We will update this blog post with more information as we make progress.
Bitcoin users should only need BTC on Bitcoin to force a withdrawal of their BTC from BOB back to Bitcoin. We are working on a hybrid solution: defaulting to Ethereum as DA while allowing users to force include transactions on BOB via a special transaction on Bitcoin. We are excited to share our work in progress in this blog post.
tl;dr
One of the core properties of L2s is that their state needs to progress even when the sequencer is offline. L2s achieve this by reading and writing their state from a Data Availability (DA) layer that can be updated independently of the L2 being online. This way, users can force the inclusion of their transactions even when the sequencer is offline, or the sequencer does not accept their transactions directly.
For BOB’s BitVM bridge, this poses an interesting problem. BOB currently uses Ethereum EIP-4844 blobs as its DA layer. Users on Ethereum can easily trigger withdrawals back to Bitcoin via the BitVM bridge. However, it requires users to have ETH on Ethereum.
This is not good enough for us: Bitcoin users should only need BTC on Bitcoin to force a withdrawal of their BTC from BOB back to Bitcoin. We are working on a hybrid solution: defaulting to Ethereum as DA while allowing users to force include transactions on BOB via a special transaction on Bitcoin. We are excited to share our work in progress in this blog post.
The process of derivation is quite important for L2s: the entire L2 state of BOB needs to be constructed from the L1 and the DA layer. It allows L2s to enjoy the same censorship resistance as the DA layer, in our case, Ethereum.
Simplified, in rollups (specifically OP Stack chains), we have two types of data on the L1:
If we want Bitcoin as a DA layer, why not fully switch to using Bitcoin completely as a DA layer? The answer is mostly cost. Bitcoin has very little storage available (about 4MB roughly every 10 minutes), and thus, storage cost is high.
However, in our case, BOB can still use Ethereum as its “main” DA layer where it posts its entire transaction data, but add Bitcoin as a highly censorship-resistant fallback layer if Ethereum DA is unavailable. Essentially, Ethereum becomes the optimistic DA layer while Bitcoin becomes the expensive but fault-tolerant last resort.
The basic solution is to add Bitcoin to BOB as a part of the derivation pipeline, such that BOB (and specifically the “op-node”) processes inputs in this order:
Let’s jump into a possible solution to encode the Bitcoin-forced withdrawal transactions into the BOB derivation pipeline. Note that this is still being researched, so changes are possible.
We will need three parts to create a forced withdrawal transaction:
An OP stack deposit transaction has the following structure:
A forced withdrawal transaction requires including the encoded withdrawal transaction in the data field of the deposit transaction. This is done by creating the transaction on BOB that triggers the withdrawal from BOB to Bitcoin and would work exactly the same as if the transaction was sent from Ethereum.
We can then store a (compressed) version of the forced withdrawal transaction on Bitcoin that includes all the above data.
As the data for the forced withdrawal transaction is larger than what typically should be stored in an OP_RETURN output, we will likely use a Taproot output to store the data.
While it’s easy to identify a deposit transaction (that may include a withdrawal) on Ethereum due to it being sent to BOB’s OptimismPortal contract, it’s not as easy to identify a forced withdrawal transaction on Bitcoin.
Data Serialization: The forced withdrawal transaction is serialized using Taproot scripts within an “envelope” structure. These are noops on the Bitcoin network and are used, e.g., for Ordinals as well. We adjust the structure to fit our needs.
Unset
OP_FALSE OP_IF
OP_PUSH “bob”
OP_1
OP_PUSH “transaction”
OP_0
OP_PUSH $WITHDRAWAL_TRANSACTION_DATA
OP_ENDIF
Two-Phase Commit/Reveal Scheme:
As with Ordinals, users will have to submit two transactions to Bitcoin:
This is the most open problem yet, with two options currently under consideration:
We are also experimenting with more ideas, so stay tuned for more updates!
Anyone can determine the state of BOB by only having to check the data on Bitcoin and Ethereum:
Data Consistency: While ensuring data consistency between Ethereum and Bitcoin chains is important, the mere presence of transaction data on both chains does not guarantee validity. Transactions must represent valid state transitions according to the rollup’s state transition function to be considered legitimate. The solution requires implementing validation logic inside op-node (or other consensus layer implementations) that first verifies if a transaction results in a valid state change before accepting it.
Fraud Proofs and Validity: The fraud proof system for both BitVM and Ethereum need to be enhanced to handle data from both chains, which could make dispute resolution more complex. To address this, we need to accurately account the possible transactions from Bitcoin and Ethereum as part of the BitVM bridge and BOB’s settlement on Ethereum.
Storage Increase: Additionally, BOB nodes in the network face increased storage and bandwidth requirements since they need to process and store data from Bitcoin and Ethereum. However, we could mitigate this by requiring that BOB transactions made on Bitcoin need to be included in Ethereum blobs with a reference to the latest Bitcoin blocks. That way, nodes need only synchronize recent Bitcoin blocks.
We are excited to push the frontier of hybrid rollups combining Bitcoin’s security with Ethereum’s innovation. In this concrete problem, we are interested in having Bitcoin’s censorship resistance of transactions combined with BOB’s rollup stack. We will update this blog post with more information as we make progress.