Replies: 5 comments 4 replies
-
I think |
Beta Was this translation helpful? Give feedback.
-
I don't think anyone has explicitly said that an RB only contains a single EB, but from the beginning our model has been that an RB only contains one endorsement and an endorsement only references one EB. The rust sim hasn't had to figure out ordering of IBs or EBs, because it's not currently modeling conflicts. |
Beta Was this translation helpful? Give feedback.
-
I don't think this question has been discussed much, but I think including more than one EB might not be so great because of the size of the certificate that needs to go into the RB. It also doesn't offer much benefit, since if you have multiple EBs in one pipeline the EBs that didn't make it can be included in future RBs via EB references. That means slower settlement for unlucky transactions but I'm not sure if this would actually be a problem.
It seems that frontrunning is possible no matter what. If an EB producer can order things arbitrarily they can use any IB under their control of the same pipeline to frontrun. If we impose an order (slot order seems to be the most obvious one) then they have fewer opportunities because they need to wait with publishing some IBs as you describe. This is a more risky strategy for them (if they wait too long the IB might not make it into the pipeline). Also, note that frontrunning (in the UTxO set) always relies on conflicts (any transaction that doesn't conflict commutes, and so it can also be included in a later block) so all the collateral/sharding discussions apply.
I don't think the order of EBs should matter, sorting by slot makes more sense to me. But I don't have any good arguments here right now.
I think all we need to do is to make sure nobody gets an advantage in the case of conflicts, so the VRF should be fine. This also has some effect on rewards since conflicting transactions may pay different fees, so you could try to optimize for that. But that gives you more frontrunning opportunities again. |
Beta Was this translation helpful? Give feedback.
-
I don't see the problem, I probably missed something? Your question seems to imply that we would record a slot in IBs, which I have not read anywhere so far and (gut feeling) am not sure if that would be a good idea? So I went ahead in sketching an answer to challenge my understanding:
Validating an EB in order to vote or not, we need to (re-)validate all referenced IBs / txs in the endorsed sequence against either (a) the current slot (b) a slot recorded in the EB or (c) the last RB + 1 (as you said is used in the praos mempool). To make the vote as independent as possible of timing (b) or (c) would probably work better? Especially for "late IBs" this could mean that some txs are not valid anymore (e.g. validity range exceeded). This should be avoidable by the EB producer by not endorsing the now invalid tx in the first place? Depending on protocol variant this can either be done by not referencing the IB/tx or blacklisting ("tombstoning") the tx. I don't see why we would want to complicate this process by allowing an EB to reference past EBs and not just "pick up" the IBs of a past, certified, but not included EB instead? This would imply those IBs transactions will need to be valid in whatever sequence the current EB endorses them and everything from above would apply equally. Validating an IB is only done to not forward invalid data through the network 1 so using the current slot should suffice. The ultimate sequence and thus slot is decided by the EB. Validating an RB means validating the EB if one is contained. In case (a) or (c) from above, where no slot would be recorded in an EB, the certified sequence of txs (or some of the txs) might become invalid against the slot of the RB. We could employ a similar technique where a (ranking) block producer would only include an EB referencing a valid tx sequence. If some txs are not valid anymore the blacklisting technique could also be used here? In summary, I think I would propose to have RBs determine the "passing of time" on the chain and ideally all txs validate against them. This would be the same "ledger experience" as you would get if the system runs in "Praos mode" where your transaction is ultimately included in one or the other block; whose exact slot you would not be able to predict nor given access to as a transaction creator. Footnotes
|
Beta Was this translation helpful? Give feedback.
-
I don't know why everyone thinks so much validation work is necessary. Especially in the case of EBs (but also in the case of RBs that don't contain transactions themselves) there isn't any decision to be made based on the contents of blocks. If you get an EB that references valid IBs and has all the right properties you vote for it. The contents of the IBs don't matter because they're already valid (whatever that means) - there's nothing else to learn from it that would make you reject anything. Yes, you can learn about conflicts, but you're not going to reject a block because it has too many conflicts or something. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
I'm unclear on the structure & semantics of EBs and RBs, in particular how exactly one should be applied to a ledger state.
I'm going to ask several questions here. If any are individually meaty, perhaps they should be promoted to a dedicated GitHub Discussion.
Questions:
Beta Was this translation helpful? Give feedback.
All reactions