All Core Devs - Consensus #92

All Core Devs - Consensus · 28 Jul 2022 · 1:19:10

Consensus client teams cover the merge, with updates on two shadow forks, execution layer behavior around terminal blocks, exchanging configuration before the terminal total difficulty is set for mainnet, an optimistic sync clarification, and MEV-Boost during the merge transition.

Speakers

Topics

From All Core Devs - Consensus, hosted by Ethereum Foundation.

Transcript

[Music] [Music] so

[Music] [Music] [Music]

[Music] [Music] so

[Music] [Music] [Music]

[Music] [Music] [Music] [Music]

[Music] [Music] [Music] [Music]

[Music] [Music] so

so [Music] [Music]

Tim Beiko: we are live

Danny Ryan: great welcome to consensual air call number 92 this is issue 574 and the pm repo if someone can share that link on youtube i don't have the chat handy thank you so we'll go over uh anything merge related then we'll have a segway into mev boost um some current points discussion any other client updates and general discussion from there give me one second and then we'll kick it off all right cool

uh before we get into any of the particular discussion points um perry is there anything to share with respect to any of the shadow forks any of the um testing going on on the side

Parithosh Jayanthi: yeah uh so we had two shadow foxes alaska we had a goalie shuttle flock that happened last week and one of the things so we didn't really find any big issues i think there was one that i don't recall right now but it should be fixed by now uh oh yeah though one another my team i think wrote a big post about in ether andy um yeah but besides that we've been testing mev boost on golly shadow fork five it looks good so far we started with about

eight percent of the network and i think now we're about 30 of the network um i looked at the orgs i looked at late blocks stuff like that everything looks normal from my side but in case someone notices something or has an idea on what else we need to look at then please do let us know uh we had mainland shadowfork yesterday that marched on tuesday and there weren't any outright clan compatibility issues so that's great i think it's the first time we didn't have any problems um but now that it's been a few days i think a few of the aircon nodes have lost peers slash are failing to find blocks but that's part of the aegon doesn't really like the shadowfox

um and i had to re-sync a couple of the bezel nodes because they were run on older version um and i think they're still not up to head yet but in general the network's looking good we have healthy proposals otherwise and we're good to go we would be having a curly shadow for six next week and the idea for that one is to have mev boost enabled before the transition so we can also test how the transition would look

like enabled harry for the uh for the macbook's testing or um which class are you testing me right now

Parithosh Jayanthi: uh i'm just going by the flashbots um

chart so it should be prism as well as load star and deku i think okay thank you so those are the three that are listed as yeah those are the three that are listed is finished the i think lighthouse as well as nimbles are both still pr's

Danny Ryan: can you share that chart in the chat

uh yeah of course cool

Danny Ryan: any other questions for perry or general comments around shadow forks or testing awesome uh great work on the last one

okay the next agenda item is the execution layer behavior around terminal blocks uh this has been a bit of a conversation over the past week on um what happens what to do around multiple valid terminal blocks and if the consensus layer picks something that is unexpected from the execution layer and how to handle reorgs and mikhail can you give us a tl dr and if there's any questions or any like words of advice uh make sure to pass that along

Mikhail Kalinin: yeah sure um yeah that's related to godish shadow fork basically the the case occurred uh there uh with the another mind in particular um yeah just let me give you a quick um

description of what has happened so there was like a terminal block a that mind received by gossip uh it's been imported um and uh yeah this will occurred terminal total difficulty and after that uh the other terminal block let's call it terminal block b has arrived via gossip but it another mind has this optimization it does not process blocks that are not becoming the head of the chain like similar to aragon behavior so the another mind put this uh terminal block b into their block tree but didn't process it so there is no state for uh there is no like post state for this block then um

uh the um the first the transition block built on top of terminal block b that hasn't been processed by by node has arrived via a new payload method call and what happened next is like that the mind returns thinking um because it does not have this uh does not have a state to uh validate this transition payload and then consensus layer has these safe slots to import optimistically um thing which protects us from poketrace poisoning and here we get the compound

effect of the two basically the node get got stuck because it can't import uh it can't switch to this work for 128 blocks uh the default uh value for save slots to import them into basically and that's it so the um the outcome from this uh case uh is as follows uh the expected tl behavior uh around the transition block is that whatever happens with like uh multiple terminal block received uh once uh el has received a transition block and one and when it has all the data required to recreate the current state and validate

this uh transition block it must do so so the fix is uh like uh i i i think in my opinion uh and we have been in touch with merrick uh from that mind discussing this uh the optimal fix would be if you receive like a transition block uh that is built on top of a terminal block b like in this situation then you have to execute terminal block b first and then execute a transition block and respond with the correspondent status like valid or invalid to allow cl to proceed with this with this branch that's actually it and this is what is

expected basically and i'm curious if i don't know [Music] i guess that uh go ethereum behavior around this is that they are processing all blocks uh that are received from gossip maris can you confirm that

Danny Ryan: all blocks up until a valid terminal block and then not necessarily the children

Mikhail Kalinin: yeah

but on any branch yes and we process all the sibling blocks of the termite block

Mikhail Kalinin: so they are instantly processed upon

receiver receiving them from gossip right

Marius van der Wijden: i'm pretty sure

okay yeah that

Mikhail Kalinin: yeah and i believe that aragon has a fix for this as well um i don't know andrew do you do you have any um any information about that

Andrew Ashikhmin: fix uh sorry regarding what like multiple terminal blocks

or what

Mikhail Kalinin: yeah like like uh aragon um yeah there was like a pr in

in the discord shared in the discord that actually do the execution memory or whatever uh on the

site work

Andrew Ashikhmin: uh yeah that's right that's still somewhat experimental and uh i also have to double check our logic um so specifically for multiple terminal pow blocks i i'll look into it

Mikhail Kalinin: cool and thank you um and i'm curious what is the dazzle behavior in this case

Gary Schulte: i don't know off the top of my head to

be honest i'd have to get back to you on that exactly how we we deal with uh conflicting blocks coming over gossip for ttd i think uh our expected behavior though is that we're going to not reorg unless we receive from the ceo an expectation like for choice update uh that will reorder to that different ttd block

Danny Ryan: right when you just improve work mode or improve stake mode when you have short range forks say two ancestors different um do you execute those or do you just accept them and then only execute on the four choice

overtaking like do you execute short range forks or not

Gary Schulte: i think that we're uh in proof of work mode we're going to just rely on the uh heaviest chain and then from then we're not going to reorg at all until specifically we get direction from the cl so a different a different block coming from uh gossip would probably probably reorganize ttd block but we would you know immediately switch back when the client consensus supply directs us to

yeah and

Mikhail Kalinin: it's important uh when user when you're switching back and you have like

this block not yet processed it's important to to have it protest this is like one of the ways to uh to to resolve this particular thing yeah why i'm asking is oh yeah merrick nice here

Marek Moraczyński: uh hello yes so uh i think uh gary you you can have the same issue like we had so we didn't process the block and we returned syncing so uh it will be good to verify it in the best zoo uh feel free to ask me if you want

to more details yes definitely

Danny Ryan: if you if you do execute these short

range forks then i think you're generally protected um but there's probably needs to be a no added to the spec that kind of all of these all valid ttd blocks up until uh probably finalization should just be executed immediately even if it is expensive and i think that would resolve the issue here and we also need to surface a couple of tests here the interesting thing here was that ttd terminal block b was of less difficulty than terminal block a and so it wasn't like by default or executed and i think we can easily get that to a test as well

yeah

Marek Moraczyński: i think one of the other considerations

is as soon as we hit ttd invasive we immediately disable uh our block propagation manager so we probably have to be a very we have to have to be a tight race to to get an alternative ttd block we're gonna we rely on a backwards sync in that case to reorg back to a different ttd block

gary

Justin Florentine: i think we wait until the second finalized block before we disable that propagation

yeah you disable probably propagation of well i would hope disabled appropriation of children of and and descendants of a valid tt block but um i think the spec says not to turn off the gossip until something's been finalized

till it's finalized

Mikhail Kalinin: yeah yeah this is like important uh part of of the transition to have the um the ability to uh to switch between terminal blocks and yeah we will have a uh yeah mario can confirm we'll have a test that reproduces the same um scenario in hive

yeah sorry go on yeah

Mario Vega: that's correct we are working on i uh this is a specific test case um to reproduce the the gossip issue one thing i would like to mention is it would be favorable to have the specific

behavior expected in the spec for example how many blocks do we expect to gossip after the ttd and so on and so forth i'm not i'm not sure it's already included but it would be nice to have

Danny Ryan: yeah michael and i to make sure that this edge case is very clear

Marek Moraczyński: two additional things from my side that we should be careful uh is that in new block message we can send we are receiving uh terminal uh not terminal total difficulty

but we can't rely on that so please be careful when you are doing checks uh and what is more uh we need to reject everything after terminal blocks from proof of workchain otherwise we we could have problems

right

Danny Ryan: so all chains should be process incorporated and accepted via gossip up to valid terminal blocks and then no children no descendants of such valid blocks and then after the chain has been

finalized you can stop gossip on that layer okay but yeah we'll we'll make sure that this is abundantly clear in specs and make sure that a test gets out soon anything else on this okay next up um exchange configuration before ttd is actually set for mainnet um there's a desire to do this to allow people to get their setups going um and probably some details to decide if we're gonna do that paul can you give us what's going on here

Paul Hauner: yeah sure thing so previously we've talked about enabling this endpoint before the ttd is set so the purpose that we want to do this is so that people can set up their um bigger node and so their execution layer and consensus layer in a one-to-one relationship like they would before the merge so i think all things turned it on which is awesome however it seems that from the eel side it's unspecified how they should like what the values they should put in the exchange transition configuration struct when the tecd is not announced um the consensus layer has um a standard around this we have these two the two to the two five six minus two to the ten values that i believe all the consensus clients would use um so

one option is for the execution clients to just use those values um and then another one is to kind of modify what we have now to send nils or nuns around um i have a slight preference for the first one um it means i don't need to change anything as a disclaimer um but it's also kind of um an existing specification that exists that could be expanded um and then everyone would work with it but once again don't feel super strongly about how it goes

Danny Ryan: right so that value was um put in to our main net configurations for the ability to do testing and to do so without with the value that was sane i mean a

value that was not going to accidentally uh trigger this on main net if things work their way into mainnet um so i do think it's a reasonable value to show up in there if people want to be able to do the configuration

now yeah

Paul Hauner: so i think it would probably mean for all the execution um clients to just have this kind of one really big number that's a constant and then instead of returning um like nil you just return that constant and check against that constant

Gary Schulte: what was that constant again is 2 to the 256 uh could you repeat that again

2

Paul Hauner: to the 256 minus two to the ten um in that merge interrupt channel i've linked it a few times also on the issue for this one yeah danny's got it too it's a weird number

Danny Ryan: yeah the history on that number is because we do use it for test vector generation we didn't want to go over to the 256 by accident by creating some blocks on top of stuff [Music] so almost the biggest number okay

any other comments on this any desire not to do this okay i'm not exactly sure if or where this number should land other than in code bases i mean it's in the consensus layer specs as a placeholder until the final releases but i don't know if there's an equivalent place that should go on the execution

there

Marius van der Wijden: so the problem is if we start adding it to gaf then we will have like a big like messages all around the place that the merge is configured at this point and then there's like this really big number

yeah

Danny Ryan: if not configured use this value for exchange configuration rather than nil i think that would probably be the extent of it yeah

yeah that

Paul Hauner: yeah that'd be cool we don't need it to actually actually be in effect just lie to us

Danny Ryan: okay if someone from the execution layer thinks this should land in a spec or an issue or something to help coordinate then by all means do so um but i don't know where that place would be

Mikhail Kalinin: uh yeah my preference not to include it

into the stack yeah basically because it's just a like one-time functionality i guess it's just easier to have it in code basis and that was like one time and done for

Danny Ryan: okay i'm fine with that okay mikhail you have an issue open on the consensus layer specs um i don't know if it's i wrote clarification i think it's an extension can you let us know what's going on here

Mikhail Kalinin: yeah there is a pr um that extends the optimistic the definition of what is an optimistic node and there's small context behind this

um yeah suppose like yeah we have like currently we have an optimistic node definition um as follows another is optimistic when it's head is an optimistic block when his head is optimistic um and the case uh um the case that these pr addresses uh may happen due to optimistic sync but it's not like uh related to optimistic hat directly uh so the case is as follows just imagine you have like a you have a optimistic branch branch of optimistic

blocks that justifies some checkpoint so it has just it has enough of the stations to justify um the new checkpoint and it goes beyond the ipob boundary so the checkpoint is actually becomes justified and this justification comes into the block store so the justified checkpoint is updated is increased um in the block store but but it happens uh like while all these blocks are optimistic while the el catches up with the state of these payloads of corresponding

payloads in parallel and after the justifiation point in the store has bumped uh it appears that uh a portion of blocks that actually do this justification appears to be invalid so cl have to remove these uh invalid blocks from from a from the block 3 and after that we can get into a situation when uh there is no um branch that realizes that that there is no viable branch viable in terms of ffg meaning that there is no tip

in the block tree that has a justified checkpoint equal to what we have in the store so and the question is what to do in this case so what what how the node should behave uh first of all uh yeah like uh there could be a different solutions like for example we can roll back the justified checkpoint uh at the first glance it seems okay but it can may lead to the surrounding so it's it's potentially dangerous and probably the right thing to do here is to keep the node optimistic uh and uh and keep note like in sinking mode

and wait for more blocks to come from like a valid viable chain uh coming from the network and then uh notes uh stick to the um these viable chain syncs up to the head and then get that gets back to normal operation so this pr is just about like if this kind of situation happens and the due to optimistic sync and uh invalidation of optimistic blocks uh a big note uh stuck in this like position where there is no uh viable branches in the block tree it should just keep being optimistic that

that's what it is uh the the alternative uh opinion on that alternative approach uh exposed by kodus is that we should address this situation not only in optimistic case but in all general case uh like it doesn't matter how we get to this um but we should be uh like uh beginners should like behave um correctly around the situation i know photos want to give uh his opinion on that

Potuz: no i i kind of agree with you it's just uh what i would like to see is some some

sort of standard of how we uh we have to act so i think currently perhaps adrian if he's here can correct me but i think uh taco would revert back to the justified checkpoint and accept it as head so that they can continue importing blocks i think paul was about to set up uh to stay with the invalid head and being able to continue accepting blocks this way prison hasn't solved this issue yet we don't really know what is the best way and uh what i kind of see on both texas and lighthouse approaches is that uh if they reboot the node they might be gossiping blocks that they knew they were invalid

prism removes invalid blocks from the database so so that once we know what block is invalid we're not going to go sip it back yeah i have no feelings i just don't know of a good solution to this problem yet

yeah great [Music]

Dankrad Feist: um yeah like uh sorry i missed this castle right now before because i uh my connection dropped but um can you say like you mentioned something about uh having to revert to justified nodes like do we consider uh justified blocks from optimistic sync actually as

justified like before we have actually verified that the chain is correct

Danny Ryan: nodes generally do so to not disrupt the internal machinery too much um this is a critical failure this is the node that was in optimistic sync and but there was either an attack or a chain split um i mean the general the general uh notion since the beginning of this is just that is a failure and likely requires manual intervention um so the the answer the question is what do you do until somebody

manually intervenes i believe

Dankrad Feist: right i mean i i guess my question is is it possible that a node votes

um votes with the source being an invalid

Danny Ryan: no a validator should not be voting on

right something that's optimistic so okay so so so that what is [Music]

Dankrad Feist: why would you slash a database prevention oh like okay as in you will be locked out

but yeah being locked out is different than flashing

Dankrad Feist: yes uh well yeah okay [Music]

well i mean in practice in any situation where you're locked out you're probably going to be part of the inactivity

Danny Ryan: sure well not you can have an accidental sign message that isn't correlated with a lot of other people

Dankrad Feist: yeah but if the block is justified then that's probably not the case

Mikhail Kalinin: i would like not uh rely only on the session protection here i mean the note that got into this state it just must not must not uh test at all

Danny Ryan: yeah um that's that's defined in specification

Mikhail Kalinin: um yes but uh but when you're invalidating optimistic blocks you're like yeah you just have no head no viable hat that could be the case

Adrian Sutton: yeah i think it's just important to clarify that in this case the justified checkpoint block is valid like it's fully validated but we've had a sequence of optimistic blocks that caused us to update justified checkpoint and that sequence turned out to be invalid so we shouldn't have updated a jackfruit checkpoint but we're kind of stuck

um because we we aren't able to revert that in clients currently

Danny Ryan: right

Paul Hauner: so does the justified checkpoint need to be fully valid it can be optimistic right

Danny Ryan: well it needs to be fully valid if you're going to actually act on it but

Adrian Sutton: yeah so so it might be optimistic in in the normal case it would be and then this all kind of resolves itself and we're still optimistic regardless it's the case when the justified checkpoint is valid but we had to fall back to it because of an update to justified from a sequence of blocks that turned out to be invalid that we wind up in this case but we might be attesting based on

changes from optimistic blocks that we've since provided even though our head isn't optimistic

Danny Ryan: so i would argue that it's important that you're not attesting to optimistic things and that this is an acknowledging this is a failure case and then the failure case i don't know needs to be standardized because the failure cases i either stuck and i have to have user intervention i have more sophisticated machinery and i can try to work myself out of these optimistic blocks which by default i think a lot of people don't want to do but is not necessarily a bad

thing to do if i'm if i'm able to actually go and revert this machinery knowing that if i wasn't a testing i'm not actually doing anything bad i'm just trying to get out of that reality um but i i don't know if one or the other needs to be the exact thing that we do

Mikhail Kalinin: the problem currently is if and not currently follows the stack it will have it will have the justified route as the head so it will just revert the head back to its justified route which was like pushed by invalid blocks but it's not a problem it's like a valid justified route with

enough attestations to justify it uh the problem is that uh there could be um some um some honest blocks on top of this route as well um and yeah if if like majority starts to vote on the justified route right um and i don't know builds a block on top of this so some some of the honest block a version of honest block and the real yeah but definitely it's like a very much case scenario i know probably i should like put more um contacts to this uh pr i mean like the example of what can

happen and what the situation that i'm trying like to just right now i just

Potuz: say it's not so much edge case if uh given the fact that suppose an attacker can actually get some nodes into optimistic mode so this is along those frames of attacks that get worse once they manage to get you optimistic because they only need two blocks if they get the last block of an epoch and return a syncing and then the next block of the epoch and turns out to be invalid uh then they can just pull they can just trigger justification of uh of a new of a new block so only only two blocks is enough to trigger this

Paul Hauner: i don't want to get into details of how we can do this here um but it's a little bit more difficult than that with some some changes

Mikhail Kalinin: yeah let's probably take the discussion into discord and uh this

vr

Potuz: so i think prison is going to do what uh what lighthouse uh is thinking on doing on keeping an invalid head uh within four choice and just ignoring the fact that in this situation we're importing blocks that uh where were four choices in an incoherent state

Paul Hauner: yeah i think all the approaches are pretty reasonable um that are on the table as well um techies one i don't see any problems with it i think all of them if all the nodes did it all at once we'd be in a lot of trouble but um yeah i don't see any problems with either way at the moment

yeah

Adrian Sutton: i'm not a huge fan of trying to have an invalid head it's just it's very hard to reason about what the knock-on effects of that will be um but uh i need to take a bit of time and look at whether we can be sure to stay in optimistic mode i think that's quite reasonable in this case

um [Music] it's probably doable

because i think

Paul Hauner: my latest thinking with regards to optimistic is that um the node doesn't care it doesn't distinguish between optimistic and invalid um the only scenario it cares about is trying to avoid the valid ones when it's choosing ahead which you can't always do um but yeah i've been trying to take that approach now where invalid and optimistic are the same thing because you can't trust them and all we do is try and fork around the invalid ones if we can

Potuz: that wouldn't work for us because we we do differentiate between them we actually remove everything that is invalid so uh

we're gonna have a a a root for head that is not no longer in portuguese so we can treat those that situation that's a very special situation where our head is no longer in fortress as optimistic but but it would be something new

Paul Hauner: yeah leaving the invalid ones around and just keeping isn't optimistic is i don't know if it's it's generally easier but maybe it's harder if you haven't gone down that path

Potuz: it's it's easier on broader array but we have another four choice implementation where it's really trivial to remove everything invalid you just remove one node in a tree and automatically removes

the whole subtree but now we're getting technical

Danny Ryan: okay um let's circle back and discord this issue and refine it thanks for the details and discussion

with phil

Danny Ryan: okay any other merge related discussion points for today [Applause] okay

great moving on to me boost there is an open issue around mvv boost during the transition i think there's been some general agreement on the past call or two but alex is there anything else to do before we merge this

Alex Stokes: i don't think so let me grab a link here uh basically on the last call we agreed that we would more or less have an embargo of using mev boost through the merge transition and when we would stop this quote embargo would be once we have finality so this pr reflects that and i just wanted to call it out before

it gets merged in uh i think a number of you have approved it on the pr so i guess this is your final chance otherwise that's what we'll move forward with

Danny Ryan: okay great and uh immediate liveness discussion alex looks like you have a doc and maybe some um quick discussion points you can get give us here and then we can um do some review outside of the call

Alex Stokes: sure let me also grab the link here so let's see

what i'll drop in the chat is a very high-level sketch of a proposal so the proposal wants to address a problem and the problem is the following there's essentially a very extreme failure case where nodes are using immediate boost post merge and what happens is there's this actor called a relay who should release the block after it's been committed to after proposer has signed that this is the block they want to propose and this relay could fail to release the data they need to and suddenly there's a liveness failure on chain because the block just can't be assembled

so uh you know to be clear we don't expect this to happen but in the event that it does we should maybe have some mitigation what this would look like on chain is suddenly a bunch of slots are missed and so this proposal says why don't we just use this as a circuit breaker condition so if there's say like five blocks in a row that are missing there's luckily stop using that boost uh this might be you know this could lead to a lot of false positives because there's a lot of reasons there could not be blocks suddenly but it's sort of like a safety thing where it's like we should at least do this and maybe do some other things as to figure out why there's certainly no box uh but yeah so i wanted to bring this point up there's this document here

the document if you review it it's like again i think pretty simple and straightforward and part of that reasoning is because uh ideally this is something implemented in beacon nodes before the merge even happens so pretty soon um there's a bigger conversation around how sophisticated these first sticks should be around when we you know stop using that boost or when we re-enable it and things like that and yeah maybe uh you're welcome to leave comments on the doc or maybe actually taking them to the discord at this point would be a good place to continue

Danny Ryan: right so it's easy to say you produce a block um and you

commit to produce to some bid and then you don't get the full block it's easy to know locally okay well i shouldn't use that relay anymore but i also might be one validator and might not get another validator for and i get another proposal for quite a while and so that information isn't actually useful to everyone else if it's something systemic that's happening and then there's not really a way to demonstrate that easily to your neighbors maybe there is with some sort of gossip and timing analysis and things like that but uh but we're not there so instead circuit breaker that makes sense

miguel i think you raised your hand

Mikhail Kalinin: yeah um i'm wondering if we can increase the uh maxilla missing slots to something like i don't know 16 probably um and what what like the you know what how to say what we get if we have this value too big i mean what downsides we can get into yes for the current value it's it's like pretty easy to be exploited by uh adversary like i don't know that earns like 10 percent of the stake uh they will just have a chance to to to just withhold these five blocks in

a row uh then publish them after some time when everyone has switched from map boost to local els if there is there is any gain from there is any uh payout from from this game from this behavior

yeah they're probably because they can have mg boost on hard-coded i am not oh i heard someone talking very quietly in the background

Dankrad Feist: um would it really be like i mean how would that work if you release those blocks i mean

it feels like

Danny Ryan: you don't even have

to release the blocks you can just miss them and everyone else turns off mvv boost

up your yeah

Dankrad Feist: but then you but then like you missed five blocks i mean that's that

sounds yeah

Danny Ryan: you might have multiple you might have many epochs in which you're the only one successfully getting

an ev

Dankrad Feist: wait how long are we turning mev boost

[Music] how

Dankrad Feist: about making it an exponentially increasing

um recovery period like first time you do like 16 blocks then 32 blocks and 64 or something

Danny Ryan: yeah i think that's reasonable i think we're also probably we're going to be balancing simplicity um just if we want to ship something like this it would also the other one is to say model your adversary and then find the number you know what what size adversary are we talking about and what number of blocks is it uh diminishingly small chance that they're gonna get in a row

yeah

Mikhail Kalinin: and just i i think that it not necessarily you miss those slots you may just withhold these blocks and

release them later so you will not miss the opportunity to propose and all this stuff not sure how this is able to do but

i mean one down side of this is like even with five blocks this means mav boost can uh can only deliver every fifth block and still everyone will continue using it like that's also something we consider here and that might just be an argument again

Sean Anderson: um so we've actually implemented this in lighthouse or at least something similar um and generally what we were thinking

is to allow whatever the conditions for not using maybe boost r to be configurable about the user um and then like i think generally maybe it'd be better not to strictly specify the exact value so that they aren't gameable or at least like harder to game and then we could even maybe have like uh diverse like defaults across clients about like oh is it five slots in one client and like 10 in another something like that

Terence Tsao: yeah i think i agree with that i think much of it should be client implementation detail just because i some policy might be easier to implement on one client versus the other client

but uh but i do think like every client should like implement something just to prevent it

Adrian Sutton: i think the concern i have here is that we're adding a bunch more complexity to try and avoid a real corner case um and when we've done that in in various ways in the past you know like doppelganger support we've been seeing bugs where it kicked in when it shouldn't have um which then cause kind of more problems so i particularly be keen to keep this simple um as simple as possible um it's not so bad because you are

falling back your local el but i can kind of see a bunch of problems coming out just because we're trying to track a whole bunch of new stuff or have all these conditions

martin yeah

Martin Holst Swende: um i disagree with adrian what you said about adding complexity because what we're talking about here is basically a switch that disables the integration for mmv boost and in the way i see it everything should continue working perfectly if maybe both boost goes offline if all this you know central

things or if all the components that are not layer zero goes down uh the platform should still continue working uh so i don't i don't think if we if we think that maybe boost going down will cause us lots of problems then we're in a bad place so and based on that reasoning um i don't mind adding uh complexity that may cause there that maybe boosts to start fading uh if we you know yeah so i think it's a good thing if we add this circuit breaker to disable it and i agree that we could

do different choices in different clients and we could even do some like randomization in individual nodes so they have different levels

for what the circuit breaker is at that's it

Danny Ryan: i generally agree i mean right now there's probably going to be one relay maybe two and that they can take down the whole network um if there's not a circuit breaker here i do think that the circuit breaker can be simple and i do think if we model their adversary and we pick it even 32 slots it can be simple and it can be you know very unlikely to be hit by by

an attacker

yeah

Adrian Sutton: i think that's one of those implications i'd quite like to see is at the moment there's a suggestion that we've got to count blocks even if they're not on the same chain in working out if we missed the slot or not um which is definitely required for a small number of slots but if we can make that big and um and be able to just look at the state and go hey i've not had a block you know you look at the block routes in the state and go yeah yeah we've missed 30 slots then i'll stop using their boost that would simplify implementations quite a lot because you're not having to track anything new at all

Alex Stokes: is it okay to not have an epoch or

boxer i

Danny Ryan: i mean

and to automatically recover probably once and then we figure out what the hell went wrong and try to make it not happen ever again

Adrian Sutton: mean that's also assuming that everyone sets up meb boost and isn't paying attention to it so um you know like big providers probably see one block proposal go missing and start worrying a lot because they didn't get an unblinded block they have that insight across their nodes um if you're running a lot of validators and then there'll be a variety of home stakers that probably don't use mev boost because it's just too much for them to set up

yeah it's very simple

Dankrad Feist: this is my main concern with having a fixed number especially a large number of blocks that like they i can see lots of conditions where we have quite a bad failure case but people will continue using mvv boost like say mev boost only delivers every third block as a possible failure case and in this case nobody would stop using any maybe boost so

let's stop

Danny Ryan: using it automatically but we would also work on figuring out

Dankrad Feist: right but we would be in a pretty terrible state in that case already like

Danny Ryan: right that's also like an even more particular i mean there's there's failures that can happen and there's a certain amount of like automatic detection that we can do or is worth the complexity of doing

Dankrad Feist: right but maybe maybe the threshold i mean you can also say like less than x blocks over a period of y and that's a much more robust conditions than zero blocks over a period of y

yeah fair

Micah Zoltu: are blocked builders in this version of meb boost um bonded in any way

Danny Ryan: no nor relays

relays are kind of this you assume the relay has the block and can make sure the block gets out um when you're entering into negotiation with them and this is this failure case when it's right in the middle of the negotiation or kind of right at the end where you've committed but they don't then release it

Alex Stokes: the messages are signed so we'll know who did it but there's no like actual like crypto economic bond at risk

Danny Ryan: is there anything you can certainly do reputation around this these messages can be demonstrated and a certain amount of them could mean i don't use that relay anymore but that's also a lot more complex than this

circuit breaker

Micah Zoltu: yeah but i mean i'm kind of agreeing with um what i think the point that martin was getting at earlier is that the someone should not be able to take the chain down for however long you know minutes hours whatever um by getting control of the relay i think that's a that's a pretty bad failure mode like even if you can't automatically recover

avengers

Dankrad Feist: this is the trade-off we're making with mvv boost

like that right but

Danny Ryan: the discussion is can we ensure that the trade-off isn't so bad

in the extreme yeah

Dankrad Feist: yeah sure yeah

adjusting your

Danny Ryan: your assessment of

complexity on like a percentage of blocks you know x out of n rather than a series of missing um is that is that of similar complexity

Adrian Sutton: yeah i mean i think the ideal for me is anything we can get from the current state rather than having to look across walks that saves me a whole lot of complexity from what i can kind of think initially right maybe i'm wrong in that but that's kind of my first take

Micah Zoltu: the actor who has the ability to or the participant in a system that has the ability to withhold the um blinded blocks that's the relay right and in at the merge the expectation is there will be very few relays is that

correct

Danny Ryan: yes there's also a problem with um such a relay you know if you if you always if you didn't know to switch to relay b because no one's demonstrated to you that relay a is bad then you also you know the multiple relay doesn't necessarily help um if that

relays may be lying to you or something

Micah Zoltu: is it visible to all participants the network when a blinded block is committed to and then never revealed

Danny Ryan: i do not believe that those only but they could be

so

Micah Zoltu: so at the moment at least only the proposer knows that the relay was held

there never gave them the block is that correct

Danny Ryan: correct without additional gossip

so

Micah Zoltu: i know we're very close to the merge and so i'm hesitant to ask this but how hard would it be to fix that that feels pretty bad like it should be that if the relay is not uh revealing blinded blocks that they promised to reveal like that should be known to the whole network as soon as possible and so you can see hey it really hasn't given up their blinded block in the last four blocks i'm gonna stop using the relay and fall back until a human intervenes that way we can limit the failure to you know a few blocks in a row until humans get involved

rather than having to continue on for you know 100 blocks or whatever

Alex Stokes: i think it's tricky to make it really tight meaning like only a few blocks versus say like an epoch just because of the reasons we've been discussing but yeah like chris put in the chat uh there's this idea of like a relay monitor that uh i think at least flash boston tends to have before the merch which would handle these like high level you know like the big failure cases that are easy to to figure out

Micah Zoltu: yeah but i feel like we're not really solving the problem if we just say hey if if that centralized player turns malicious because they got hacked or whatever let's just trust this other

centralized player to tell us about it especially when they're both controlled by the same actor in the ecosystem like if you're gonna if someone does manage to compromise the keys of the people the running mvp boosts they're probably gonna get both sets

Alex Stokes: so the alternative then is like to have an ev boost like gossip some sort of fraud proof around this which could be done but it's more of well you're just

Danny Ryan: though because you can't tell if maybe the proposer was just really late in giving it giving giving it back um okay but we're not some of them enough of

them signals that it's probably fraud

Dankrad Feist: well we can't we can there is one solution where you gossip your choice like basically we create a channel for proposers um because of the assigned block header um and uh you can watch that channel and if you see several of these and you don't see a corresponding block then you know that the relay is bad the problem is like creating that i think that's not realistic for the merch i think that's too much like because you'd also have to consider all the dos possibilities and stuff

Paul Hauner: yeah i would generally say that if you're thinking of a solution it involves adding a new topic to the peer-to-peer network then it's too hard to emerge and i'm pretty sure all of them involve that so it doesn't seem feasible at this point

Dankrad Feist: what does seem feasible is like just creating a service that monitors this like like how hard is it to create a like uh a simple monitoring demon that anyone can connect with using their validator um so like uh one of us could run it it's independent from

flashback that doesn't seem that hard like it feels like a few hundred lines

python script can do it

Micah Zoltu: we still need a mechanism for proposers to be able to

get there i don't know if it

Alex Stokes: needs to be automated like it can be manual to like you know facilitate shipping the merch and then an obvious enhancement is to make it automated

well

Micah Zoltu: if it's manual then it means that the potential outage if the relay is compromised is you know hours two days because people are not

Alex Stokes: it wouldn't be days but we also just said we're okay with like an epoch of missing blocks so

Micah Zoltu: yeah i mean i definitely appreciate the the bind we're in we've got the merge coming up very soon and we have a centralized point of failure and we have to decide you know how long are we okay with the network being down if that centralized point of failure fails um until and we have to live with that risk until such time as we have a real solution such as bonding or at least gossiping

intent okay

Alex Stokes: so there's some appetite for a

circuit breaker of some type uh i'll figure out a place to make that more formal and we can keep pushing that separately there's like other different strategies and tactics we've been discussing around hardening memphis so that's good as well

Danny Ryan: okay cool alex are you going to make you're going to revine refine the that dock and then share it is there a place where we're going to discuss this

Alex Stokes: i suppose the block construction channel on the r d discord but i'm open to anywhere

Danny Ryan: yeah that's good okay okay cool let me find my agenda oh your next step oh no live discussion perfect um anything else related to med boost

Chris Hager: um maybe just a quick call for lighthouse and nimbles to maybe wrap up the builder specs implementation so they can be tested in the next golden shutter fork along with the other clients that that would be ideal

uh yeah

Sean Anderson: so

our pr is actually under view right now so getting close

Zahary Karadjov: the same is true for nimbus we are close to merging this vr and we are planning a release shortly after

Danny Ryan: cool thank you okay anything else on mbb boost great any notable client updates are happening xero would like to share okay other research spec or other items

to discuss today and anything at all that people would like to say announce discuss or otherwise

Tim Beiko: uh we have uh oh i'm just gonna say quickly we have a 4844 call tomorrow at 14 utc um if people want to follow up on progress on that the link is in the pm repo

Micah Zoltu: where is the appropriate place to cry about this mvp boost situation offline

Danny Ryan: maybe on the um builder specs repo um you could write an issue about proposed bonding or other things like that and also in the block production channel on the discord

okay

Dankrad Feist: there's going to be no bonding before

bbs

Danny Ryan: meaning any sort of bonding that you would do would without l1 support would need to be it would be opt-in and some sort of extra protocol mechanism that relays decide to do

well

Dankrad Feist: i mean maybe with chain link or something but

it would suck

Danny Ryan: oh yeah yeah you would need you need like like alex said a

committee

Dankrad Feist: like you need an you need an availability oracle for the signed header and um and the main block and that just yeah yeah i think it's very unrealistic it's not it's not gonna happen i'm not i'm not just saying before the merge i'm just i'm saying it doesn't make sense to do this before pbs like mev boost is literally our stop cap solution for that that's how it was conceived and

i am yeah

Danny Ryan: yeah i think we can get better on

reputation and more transparency around messages and a circuit breaker but i also agree that

you know

Dankrad Feist: yeah i think these are great i mean and i think that's totally possible and i think like it's just like this doesn't have to be a like a monitoring service doesn't have to be decentralized we we can we can find solutions for that that work very well like i don't know like i mean if there's something that like at the moment you build a piece of software that any of us can run and that all the proposals

can submit their blocks to and that can like sound around with like relay has missed several blocks then like um why is that not good enough i think that's a pretty that goes pretty

fast

Micah Zoltu: yeah i would i would be significantly happier like that than her situation i'm saying that i do think we should be built focusing on building something and that something is going to involve clients like the client are the ones that need to send to that

no

Dankrad Feist: right right right okay but the client or the client

[Music] has to do should be fairly minimal sure

Micah Zoltu: yeah i'm just saying like i think

this should be a focus like we should be figuring out what that solution looks like even if it is centralized you know make it centralized dish right so anyone can run one of your services and you can point your proposer at n of them and so you can broadcast out to seven different ones run by seven different people around the globe and if any of them report back um you have evidence and they can give

you proofs

Danny Ryan: i think very fortunately that a lot of this actually can be encapsulated inside of the med boost sidecar um and so it's much easier for me boost sidecar to add some sort of like experimental gossip channel to be tracking relays and reputation and that kind of stuff or even be communicating with an external um monitoring service um and it's been

designed that way for a reason right so i you know i can i don't have to go into the internals of uh the beacon node for everything as long as like the beacon node knows to communicate with the sidecar as you know to get extra uh valuable blocks and if the sidecar is not giving anything it can go local um and so i think you know the complexity is very nicely carved out there to iterate and continue to build up and be used okay shall we close the meeting anything else

Parithosh Jayanthi: uh just one more thing the body blog

post is out so please update your notes i think all the client teams have releases and the curly fork should be in the next two weeks

Danny Ryan: very exciting okay thank you everyone very productive conversation talk to

you all soon see you on thank you thank you [Music] [Music]

[Music] [Music] [Music]

[Applause] [Music] [Music] so

Speaker names adapted from ethereum/pm, CC BY-SA 3.0.