Replies: 7 comments 7 replies
-
A question I haven’t figured out yet: What if a preconfer is “lazy” and fails to publish transaction groups (or in the origianl design, the 3-second blocks) on time, or not at all? Can AVS enforce timely publishing? |
Beta Was this translation helpful? Give feedback.
-
We have had a discussion on a similar approach last week. This seems to fit our current approach well. Quoting the original discussion text:
I think this can also be more generally applied to your idea, and we may have soft-blocks every 200ms. The main concern that we have with this approach is how would indexing services (say, graph protocol) interface with this, and will this soft-block/transaction-group approach fit the way wallets work with existing JSON RPC interface. |
Beta Was this translation helpful? Give feedback.
-
I believe we should avoid modifying the existing block structure as much as possible, as this would involve extensive discussions with wallets, explorers, analytics platforms, and might even require changes to open-source libraries. Additionally, I don’t think we should alter Taiko’s core protocol to support soft blocks, as doing so would require months of debugging and testing. Instead, we could introduce a new JSON-RPC method in Taiko Geth, perhaps called If a Taiko Geth instance does not authorize an AVS node to call |
Beta Was this translation helpful? Give feedback.
-
After reviewing the design documents from Nethermind and Gattaca, I realized there are two distinct types of preconfirmation for users:
I believe it’s feasible to combine both approaches into a unified solution: the preconfer could issue receipts directly to users while simultaneously including transactions from both users and the mempool. By utilizing the new |
Beta Was this translation helpful? Give feedback.
-
So the proposal is to make it work like FlashBlocks? Which is kind of the Nethermind approach on steroids. :) Seems like they have the implementation already figured out (e.g. I believe here for rbuilder: flashbots/rbuilder#214). |
Beta Was this translation helpful? Give feedback.
-
This direction sounds awesome to me. I like where this is going. Shall this be part of our next endeavor here? |
Beta Was this translation helpful? Give feedback.
-
We must also consider the negative impact of subsecond, especially around centralization. Like PBS compatibility without centralized gateway, "self-preconfing" capabilities (maybe not important but I think it's cool that our approach can support this), hardware requirements of the full nodes that follow the preconfs (especially considering the potential overhead of reorging and reexecuting these soft blocks), etc. |
Beta Was this translation helpful? Give feedback.
-
As I mentioned in the meeting, I appreciate Nethermind's preconfirmation design, particularly the absence of a gateway. However, I prefer that preconfirmation happens within 1 second, and the number of Taiko blocks with the same number of transactions (e.g., per day) should decrease rather than increase.
I want to share my thoughts on how we could achieve this based on Nethermind's current design and implementation.
Instead of building a Taiko block every 3 seconds across AVS nodes or propagating
proposeBlock(s)
transactions in L1’s mempool (as mentioned in this doc), the preconfer could propagate signed transaction groups every 200ms. A transaction group contains a list of transactions with a strictly incrementalgroupId
, allowing for faster and more granular preconfirmation.For example:
The Taiko Geth client would accept these transaction groups from AVS nodes, verify their integrity and the preconfer’s authorization using the signature and an on-chain lookahead mechanism. The transactions within the group would be applied sequentially to tentative blocks in the local Taiko Geth instance. As more transaction groups for the same block arrive, the tentative block would be updated accordingly. These tentative blocks would eventually be replaced by the actual blocks once they are proposed on-chain.
Preconfers can decide how frequently to broadcast transaction groups, with the most granular approach being a single transaction per group.
Even if a tentative block is discarded, all transaction group data will be stored locally for up to X days. This data allows AVS nodes to help users challenge and potentially slash preconfers who fail to honor their commitments, using the transaction groups as evidence against the actual block’s root hash. As long as transaction groups are signed, they serve as preconfirmation promises, eliminating the need for individual receipts per transaction.
Transaction groups for the next block will be discarded unless the last transaction in the last group of the current block is a small end-of-block transaction. We can use the marker
tx.msgSender = preconfer && tx.to == address(0) && tx.data = ""
as an indicator of the end of a block.If the marker transaction satisfies
tx.msgSender = preconfer && tx.to == address(0) && tx.data = "last_block"
, it marks the block as the last one from this preconfer. If the next block is proposed by the same preconfer, the transaction group data can be used to slash the preconfer.Preconfers should avoid signing transaction groups that build the same L2 block differently, as this would lead to slashing.
A preconfer can also include the same transaction in multiple groups for the same tentative block. In such cases, all earlier occurrences of the transaction are removed from previous groups, and the final occurrence determines the transaction’s position in the block, allowing the preconfer flexibility to revise decisions.
We can include the parent block hash in transaction groups, and the Taiko Geth client will only accept a group if its parent block hash matches the local chain’s parent block hash. In the event a preconfer is slashed due to the local tentative block differing from the on-chain proposed block, the subsequent preconfer will remain immune from slashing for that discrepancy.
The idea is not fully developed and may have serious bugs, but I hope to get your feedback.
Beta Was this translation helpful? Give feedback.
All reactions