DAPPCON 2025: I wanna to be your minority: Geth as a minority Client - Guillaume Ballet
DappCon 2025 · June 2025 · 20:27
Guillaume Ballet discusses Ethereum client diversity at DappCon 2025, addressing efforts to shrink Geth's share of the network down to a minority client. He examines why concentrated reliance on a single execution client creates risk for Ethereum, and what it would take for Geth's dominance to give way to a healthier, more diverse client landscape.
Speakers
Topics
From DappCon 2025, hosted by Dappcon Berlin.
Transcript
Does that work? Okay. Um, yeah. So, a couple years back I was experimenting with bringing uh GU uh on the on the Gnosis chain and this is uh a summary of uh of this experience uh and also I wanted to share some uh some learning uh from from that. Um yeah so differences between diagnosis chain and and mainet um there's a 5-second block time which is inherited. So uh the Nosis chain used to be a chain called XDI which has a token that is a stable coin and um and yeah the the block uh the block time was 5 seconds and the the
idea behind this whole thing I I think that was before my that was yeah that was even before I I was part of Ethereum I think um was to get uh to get some traffic to offload some traffic into some kind of side chain uh do the the transactions without going to um you know like without competing for for the main pool on mainet uh that was the time of cryptokitty and um yeah the they they went for a shorter block time and this was this has been inherited since and so we find uh we find ourselves with uh with this block time uh it's quite interesting for me because as Tony was saying just before we want
to uh reduce the slot time so 5 seconds 6 seconds. It's not too different. So that's that's quite an interesting experiment as far as I'm concerned. Um when you look and I will go into this later. Um but when you look at the at the size of the state, you uh find it to be a lot smaller, which makes sense. It's a side chain that is meant to offload some of the traffic. So it's not going to have the exact same size. What's a consequence of the of the block time however is that uh the history is like in terms of block is about twice as large as what it is on mainet. Um it was using this consensus called aura. I'm not going to get too much in too deep
into this. Uh but it came from par and it's uh effectively a proof of authority u consensus algorithm. Uh but they try to make it uh a bit more decentralized by using some kind of voting DAO thing. Um so yeah it that's the that's the status. Uh eventually they got rid of it. Um one of the interesting part or or maybe infur infuriating depending on how you look at it. It relies a lot on system contracts. So the consensus will call a contract an onchain contract. So you can tweak the the way the consensus is working this way. Um in terms of history, uh the forks were a bit
different. Some people just decided not to use some EIPs during the forks. So uh they were activated later because they wanted to look more like mainet, but the original designers seem to have decided there were some some EIPs that didn't want on their chain. So it's a bit of a patchwork of history. Um and the work has been done by uh by diagnosis people to to try to bring uh to bring the the chain closer to what mainet is. But yeah, historically it's not it's not quite true. Um you've got the concept of service transaction which are transactions for example for the I think it's the bridge uh that brings some u some tokens from from mainet into uh into the into the Nosis chain. So you
need to be able to mint and you don't pay for this. Uh so that's another interesting difference. Um yeah and then the the other difference is that for example like the other major difference is that uh the E uses a stable coin which is XDI and the CL uses the GNO token. Um and then yeah I I added a rant about incompatibility of of the block format but that's a detail. So if you dump the the two the two states like the nosis state and the mainet state uh you see some interesting information um like for example if you look at the code there's about 10% as much code on uh the nosis chain as the mainet but um
if you look at the accounts there's uh about 40 times more accounts on mainet as there is on nosis that makes sense right once again it was meant to offload some uh some traffic from the mainet will not move everything. Uh but the interesting part is that the storage nodes however are about half of mainet. That means uh there's a lot more content per account on uh on the Gnosis chain as there is on on mainet. And honestly that's um I mean I I don't have a definitive answer of why that is. Uh it could be that you know it's mostly designed to to do uh ERC trading or u or other things. So that would explain why
there's a lot more contract. But it seems that there are actually relatively fewer um simple XDI accounts on the on the chain. Um and then you have the account and storage snapshot which is pretty much the same information. Uh the other interesting part is that the bodies um the number like this the total size of bodies is about one-third of what it is on mainet but there are way more blocks and that makes sense uh because the block time is much smaller so you have less time to execute like the if I'm not mistaken the the gas limit like the the target gas limit currently on Nosis chain is 17 million so about half of what we want uh on
mainet and Uh and yeah so you can see there are more headers but the blocks themselves are smaller and uh yeah that makes sense. The last interesting thing is the receipt. The size of the receipt on nosis chain and mainet is about the same and I'm actually quite uh curious as to find out why that is. I I don't know for sure. There's definitely an explanation that I was talking about system contracts before. Uh those system contracts emit logs. I assume it's related, but uh it would be a further uh a further investigation. It would be interesting to to figure out why. Um yeah, I don't have a lot of time, so I'm going to skip this one, but okay, I'm just going to summarize it very quickly.
Uh let's say when recovered that chain from I think they were called POA networks, um it was pretty much um you know, there was a lot of legacy going on. they still had par uh nethermind was uh just started but they didn't have snapsync they were not serving snapsync uh they were using a protocol that was about to get discontinued in g um and um like I said the dosis team has uh has tried to bring the chain like to modernize the chain to bring it closer so they deprecated par uh they removed aura by doing a merge and um and yeah like never mind implemented snapsync so things started to look a lot more uh a
lot more a lot more like mainet. Yeah. So um the first attempt was to try to create something uh the first attempt at bringing guest on this chain was trying to get something like history expiry and the idea is that you would have nethermind following the chain and nethermind had implemented aura. I didn't want to. Um, and so the idea is I would get some kind of bootstrap version of G that would just take import the a dumped state from from Nethermine and try to pretend that this was a proper sync. Um and so the merge would be skipped. The the whole aura history would be skipped
and then this instance would uh only exist um like would be unique and we uh would spin up spin up other guest nodes that would snap sync from it. Uh for many reasons that didn't really work out. Uh one of them is um yeah I I had to do a lot of guess guess work. uh it wasn't really clear what um that some forks were activated and when they were at least it wasn't clear to me um and um and yeah there are still I I came also to the realization that u a lot of the aura stuff still remains behind. So um I think at this point it made sense to to
just uh reimplement aura and um had done it in the meantime. they were brave enough to read the to read the ROS code from from par. So good on them. Um and I took it and I adapted it to G. So as it turns out that was the other discovery like the code of arrogant has uh has drifted especially in this part has drifted significantly from G. So there was some adapt adaptation work to do but it was uh it was manageable in the end. Um, and yeah, like this implementation of Aura didn't have to be uh good enough to run a future Aura network if anybody wants that. Uh, it was just meant to be good enough that uh, GU could full sync
up to the merge block and and move on and and ignore a for the rest uh, for the for the end of times. So full sync when I when I had to uh when I did that full sync um it took about a month I ran into all the peculiarities. So this is when I went from guesswork into actually figuring out what what the problem like block per block. Um so yeah like for example the most famous example is that the there's a code limit that was activated at a given fork like 24 kilobytes. People want to change that to I think 48 is the last number. Um but uh for uh Fnosis chain it was not activated at the same time as as mainet so they
activated it in Shanghai. So this is one of those examples. Uh but now we have guest on main uh on Gnosis mainet chugging along and so far so far it's working fine. Um I'd say the biggest lesson of this whole story for me is that system contracts are a bad idea. They're all the rage right now. Um, and I think it's a mistake. So that's uh that's some controversial take uh right here. Um the I I I mean I could list all the reasons but the biggest one is that most clients I except guess at this point um do not trace system contracts. And so if you are trying to develop a client for a
chain that uses that whose consensus relies heavily on that um it's really hard to figure out what's what's going wrong. Um and it's also harder to debug like the system contracts are are harder to debug because you can't put a breakpoint in the system contract. You have to put a break point at the client level and somehow you have like a lot of overhead to figure out what the the contract is doing. Um the behavior is pretty opaque and you probably heard of uh the Pectra the Pectra testnet fork debacle. uh I put so this is actually the fixed the fixed uh version of this of the code that caused the the debacle to to begin with but um they were
expecting like the the code was expecting a a I'm looking for the word a message to come from the from the contract and uh because sepoleia is a peculiar chain they deploy their own like when I say they I mean ETH panda ops they deploy their they deploy their own contract contract. They didn't really tell um anyone how it was working. So, no one was expecting this. Um this is not a dunk on ETH Panda Ops at all. I'm just saying this is bound to happen because uh two people doing DevOps. It looks um it looks like it's just delegated to the to the to the execution um yeah to the execution layer
like the the consensus part is delegated to the execution and as long as execution work you should expect it to work. Uh yeah but then the message didn't travel and therefore um you know like client devs had no idea this that this was coming. some uh if I remember it's arrogant who did it right but most other clients uh were just expecting this pattern they were not expecting a different pattern and this is how simple um yeah got in trouble during during the fork um so I think it's pretty clear to me u my my opinion that we should have uh we should have uh we should not have system contracts everything should be
deployed as actual native client code um yeah that's that's my conclusion from from this at least um now I'm going to go over the list a list of changes that could be interested to for fornosis chain um there's the protocol level and there's what gas could could do at the protocol level I think the the biggest gain fornosis chain would be EIP44s uh namely history expiry there's a lot of blocks and all those blocks are um almost empty but together they take a lot of space um they take a lot of space especially for the sync because the full sync you have to go over every every one of them and guess recomp computes the
state route at every block. So that's why it takes it takes a long time. Um you could do something like for example argan and rest they do something where they just execute the transactions and they compute the root at the end. Um we could do something a bit similar in in guess maybe compute the route every 10 blocks every 128 blocks. uh that would be interesting to to check to do. Um so that that could be my my next experiment on on noises chain because once again that's where the that's where the the benefit is going to be the the greatest.
Um okay Tony talked about delayed execution. I also forgot to mention about uh EPVS. Uh so sorry PUS but um the idea is because the block time is so short um it might be interesting for um offering off offering some uh some extra capacity to the chain to to implement that on Nosis chain as well. So that would be my my two favorite topics to to implement uh if um yeah you know if I was uh the one deciding what goes into into chain. Uh I mentioned the bloat net. So this is an effort that uh I I work on for uh for the EF. Um the goal is to really create like make a fork of any network and try to really increase
the increase the the the size of the state. I think uh that would be also interesting to probe uh two things. The first one is for Ethereum mainet because we are close to a 5-second of a six-second slot with a 5-second slot. We could try to use the Nosis chain or at least a fork shadow fork of it to figure out how uh the the like main net would react uh in the in case the block size uh sorry the blocks the slot time is reduced. Uh but it's also interesting once again to study what capacity is really available to a fi to a network with a 5-second block time. Um otherwise yeah I think guest it's pretty clear that guest needs to be able to uh enable
like um to have a better granularity uh in its capacity to enable or like to turn on and off uh EIP. So that that would be something great uh if guest could do this. Um yeah so not really uh not really a lot to to say except GC guest could also bring some things back into G. Um, honestly, uh, yeah, I guess I'll just skip this one. It's not very interesting to to most of you. Um, yeah, last uh, last slide. So, what is GC guess today? You can find it at this address. Uh, it's more or less synced with guest master. I need to release it on uh, rebase it on the last release,
but it's not going to be a big problem. It's just one release behind and it will be fixed this week. Um it's uh the interesting part and what I named this uh this presentation after is that G on this network on Nosis is actually a minority client and it's quite interesting to to look at its behavior because for example uh when you start gnosis chain G it takes forever to find a peer uh for some reason like nethermind and arrogant nodes are extremely reluctant in uh accepting um agnosis uh sorry a GC guess uh connection. So it it happens over time but it takes it takes some time. So I'm not sure why that is but uh
this is definitely the next thing that needs to be investigated because it looks like GU you know being on the main chain and being uh the top uh like the top client in this u in terms of usage uh never had this uh this problem in the sense that it can very easily find a guest node. um not so on the Nosis chain. So something to dig. Uh yeah, and very few people have uh have installed it from what I can tell. Um so yeah, if you're running agnosis uh validator, please uh run GC guess and tell me tell me if there are problems. Um and the last thing, you know, um the Gnosis chain they I'd say the marketing was
they want to be a canary chain to support Ethereum and and test some things. And I think recently they delivered this because um Holiski failed like the Piktra 4 for Holiski failed. The Pictra 4 for Cypia failed but the uh the Pictra fork for shadow which is the the test net fornosis chain uh went without a hitch. So um yeah and that includes guest. I mean guess was almost ready then. Uh it managed to go through the fork afterwards. Um, so I was a lot more confident about the pectra fork on mainet and nosis chain as well. Um, and it turns out I shouldn't have been.
There was a consensus bug that showed up in guest right after the fork. Uh, but it was thanks to never mind and and arrogant. Um, we we fixed it and it was just a configuration issue. Um, yeah, that's pretty much it. [Applause] Yeah, I think we have time for questions. Okay, one here. Hi G. Thanks. Um I was just wondering if you have a rough idea of how many nodes are running GU on Nosis currently and perhaps more importantly how many validators it's because of the like a lot of validators are running nethermind I think right um I don't know how many exactly I know of one guy who's running
it so he's the one reporting uh no that's not me that's not me I mean I'm also running it but uh another another guy um who writes me when there there's an issue So that's you. Oh, Luca. Yeah. Awesome. I'll give you a hug afterwards. Uh, so as far as I know, that's you. Um, and thanks for that. Uh, yeah, I um I I was going to I talked to the DAP node guys. I'm going to try to have it released as an option inside DAP node.
So since the dep node has a huge user base innosis chain I hope more people will be as brave as you. Uh but yeah so far as far as I know it's you someone else and sorry for doxing you by the way. Oh yeah.