Cover photo

Understanding Ethereum Network Upgrades: Lecture 5

Testing and Implementation - Mastering Ethereum Network Upgrades

This lecture covers the processes of testing the various components of a network upgrade, and how these components are implemented once successfully tested.

Index

  1. Lecture

  2. Office Hours

  3. Guest Speaker

  4. Supplemental Resources


Lecture

Lecture Transcript

The following transcript was auto-generated, and may content syntactical errors.

00:00:09.000 --> 00:00:17.000

Today is January seventeenth, Wednesday, January seventeenth and, 2024 and we're in the week of testing and implementation.

00:00:17.000 --> 00:00:28.000

So we're going to be talking about both generically, what does testing and implementation look like for, an upgrade and then we will get into some.

00:00:28.000 --> 00:00:42.000

Specifics of what testing and implementation. Looks like for the Denkun upgrade. So. Take ticket off today, you know.

00:00:42.000 --> 00:00:46.000

How do we test what is changing? And I think the short answer. Is we do it, we start incrementally in piecewise.

00:00:46.000 --> 00:01:01.000

So there's always some testing going on. That's incremental and piecewise. It's testing out EIPs that's testing out.

00:01:01.000 --> 00:01:11.000

Potential attack vectors on the network. These are kind of always happening. And they're happening.

00:01:11.000 --> 00:01:20.000

During network upgrade like in the run up to network upgrades, but also in the planning phase it's constantly kind of happening.

00:01:20.000 --> 00:01:31.000

But then as we get closer to actually making a network upgrade. Those. We test everything altogether at the same time.

00:01:31.000 --> 00:01:40.000

So, we start out with this incremental piecewise process and then we move to like doing everything and seeing how it works together.

00:01:40.000 --> 00:01:48.000

So We're gonna touch on. Really. These 4.

00:01:48.000 --> 00:01:55.000

Elements of what gets tested and then we're going to talk about like testing before the upgrade and then testing after an upgrade occurs.

00:01:55.000 --> 00:02:03.000

And there actually was. A test network that happened today. So we're also going to talk about what some high level results of that.

00:02:03.000 --> 00:02:17.000

So just to sort of cover the like our. We're going to talk about the implementation of EIPs by client teams or within in an Ethereum client.

00:02:17.000 --> 00:02:21.000

EIPs by client teams or within an Ethereum client, whether it's execution layer client or the CL client.

00:02:21.000 --> 00:02:37.000

Test cases, who writes them, where do they exist? What are the testing tools that exist we're gonna talk about shadow forks and dev nets which are some of the coolest like Names of stuff that we gave in Ethereum.

00:02:37.000 --> 00:02:44.000

We've done we've done ourselves sometimes a disservice with the naming but not with shadow forks shadow for the naming but not with shadow forks.

00:02:44.000 --> 00:02:55.000

Shadow Forks is that's a sweet name. And then we're gonna talk about test net forks in general and what those do and the overall like upgrade itself, which is the implementation.

00:02:55.000 --> 00:03:11.000

So we'll jump right into it. So the first thing we need to do if we look back at our week that we talked about the like writing EIPs, when we write an EIP, we have to actually implement it in an Ethereum client.

00:03:11.000 --> 00:03:21.000

So whether that's the EIP for an execution layer client or a consensus layer client. We actually have to implement that EIP in order to test it, right?

00:03:21.000 --> 00:03:40.000

You have to have some sort of implementation. So client teams do this. If you join all core Devs calls, There was always a part of the call where we go, they go around to the client teams, particularly on the execution layer and say, have you implemented these changes?

00:03:40.000 --> 00:03:49.000

There's often times folks from the EF who are asking questions around, hey, when is this team going to finish their implementation?

00:03:49.000 --> 00:03:57.000

And there's a lot of back and forth between the various teams on getting that implementation done so that tests can be written.

00:03:57.000 --> 00:04:11.000

But. Because all of these clients are in open source software repositories, I think actually all of them are pretty much hosted on GitHub, maybe if one or 2 on Gitlab.

00:04:11.000 --> 00:04:15.000

You could just fork that repo if you are an author of EIP and if you have the knowledge of that code base, you could implement it yourself.

00:04:15.000 --> 00:04:30.000

So this is a reason why we talked about reference implementations from EIP authors being so helpful. They actually make it faster for client teams for to be able to figure out how they're going to implement that, that EIP in the client.

00:04:30.000 --> 00:04:47.000

So, like I said, anyone can do this. You can just create a fork of a software repository and add those add those changes into it and oftentimes that's what you see is done.

00:04:47.000 --> 00:04:48.000

It's a combination of the client teams, but if someone is properly motivated, they can go ahead and do it.

00:04:48.000 --> 00:05:04.000

With their client of choice. Once that EIP is implemented, it's actually then possible for any user to download that and actually just run.

00:05:04.000 --> 00:05:08.000

From either a Genesis block or from a point, a certain point in the state, a local, a local version of the chain.

00:05:08.000 --> 00:05:23.000

And that could be a fork, but it could also just be there running the chain and seeing how it how it works to see the impact that the changes have, right?

00:05:23.000 --> 00:05:33.000

And when I say see the impact, I'm talking both about like literally like you know, potentially doing some actions on that chain.

00:05:33.000 --> 00:05:36.000

That's sort of just generally probing to see what might be different or it could be actually running like a full test suite.

00:05:36.000 --> 00:05:53.000

That is, is specifically written. So, not making a distinction there. The reason I bring that up is because Once you have something that you're able to run locally, a version of the chain.

00:05:53.000 --> 00:06:05.000

That can be useful for iterating on writing test cases because test cases are written typically towards what are the expected behaviors and what are the what are the behaviors that are out of bounds.

00:06:05.000 --> 00:06:06.000

So having something that you can refer to and actually go ahead and start writing those tests is critically important.

00:06:06.000 --> 00:06:17.000

Anything you want to add here, Matt.

00:06:17.000 --> 00:06:30.000

One thing that is kind of noted is that the client implementations often yield spec changes because we go to build something in we're like the spec actually doesn't work in practice or we realize that the spec is.

00:06:30.000 --> 00:06:41.000

Maybe over overly permissive or overly restrictive in certain cases, it may trigger portions of a client code that is not aware of.

00:06:41.000 --> 00:06:54.000

So for example, if I have a any IP that impacts the way that maybe the state tree works that could have cascading impacts up and down the clients that we are kind of unaware of that trigger new considered security considerations.

00:06:54.000 --> 00:07:07.000

So in reality, the first set of implementations are always fuzzy. Because once we The client implementations exist in isolation until we link them to other clients in these Dev Nets and test nets.

00:07:07.000 --> 00:07:16.000

So we yield a lot of results because We have a spec about a chunk of functionality and then we have all the other company pieces of the client.

00:07:16.000 --> 00:07:30.000

And then we have how your client peers with other clients. So We, you know, we do a lot of iteration based on this because these, initial implementations may pass all of the reference tests and all of these other tests.

00:07:30.000 --> 00:07:44.000

Because the specification is sound but it has upstream impacts in the client code that we don't we're not aware of so these first rounds of iterations are very much so in flux and the spec often changes beyond what was in scope for the EIP.

00:07:44.000 --> 00:07:53.000

But we need the kind of interoperability testing of clients to be able to understand the test cases better and to understand the client code.

00:07:53.000 --> 00:08:03.000

In terms of other clients, the Ethereum protocol itself and things we might not be aware of. So there's a lot of back and forth at this stage, I would say.

00:08:03.000 --> 00:08:09.000

And so while we said that, you know, client implementation, we these slides are sequential as Matt is referencing.

00:08:09.000 --> 00:08:11.000

This is more of a back and forth process. You can almost think of this happening as like concurrent to each other, right?

00:08:11.000 --> 00:08:19.000

So, what's great is that the EF and all core devs do keep a software repository.

00:08:19.000 --> 00:08:33.000

HOST on GitHub, under the Ethereum repo of Ethereum test cases. So I'll just click into that if you want to actually see what that looks like.

00:08:33.000 --> 00:08:41.000

And here we go. It's their name tests. You can see that there is a lot of tests in here, some are not relevant anymore, proof of work tests, right?

00:08:41.000 --> 00:08:49.000

And there is documentation to go along with that. The slides all link that I'll put them in, and afterwards, but we'll have all these these readings you can click out onto.

00:08:49.000 --> 00:09:00.000

There's actually, so like I said, there's general tests and then there's those that are specific to upgrade, right?

00:09:00.000 --> 00:09:13.000

So if you think about it, there's a set of tests that. The, that should be passable by any client pair or just or an execution layer client.

00:09:13.000 --> 00:09:19.000

Or a consensus like your client because that's like just you know, adhering to the overall spec, right?

00:09:19.000 --> 00:09:26.000

And then there are specific tests that, might be things that need to be tested in the upgrade.

00:09:26.000 --> 00:09:33.000

There is a full tutorial. So if you're interested in participating in this, there is the Ethereum test.

00:09:33.000 --> 00:09:51.000

Doc repo that's linked in this software repository. It's like a sub repo and it actually walks you through Testing against your client, it uses GET as the sort of reference implementation client, but you can.

00:09:51.000 --> 00:10:00.000

Try this out with anything else and I think this is a really great place to start if you're interested in being part of testing.

00:10:00.000 --> 00:10:15.000

So These tests. Assume in this case that you're using a tool called retest. And it's a tool that allows for the running of the test and the generation of the stats on tests.

00:10:15.000 --> 00:10:29.000

Now I think Matt. And I in our day jobs. You know, other test suites, right?

00:10:29.000 --> 00:10:43.000

Because we, work. So, Matt is definitely having to work with this test suite, but then there's like other test suites that the base you team and the take-out team take advantage of.

00:10:43.000 --> 00:10:56.000

Me being from like the inferior side and working on decentralized infrastructure network, we also use different test suites in order to test performance of certain, let's, if we just leave it to Ethereum, there's different test suites that we have.

00:10:56.000 --> 00:11:07.000

So what I pointed out because Just because we're only highlighting retest, as sort of this.

00:11:07.000 --> 00:11:16.000

Anchoring tool and it very much is an anchoring tool. It doesn't mean that different, stakeholders in the space.

00:11:16.000 --> 00:11:29.000

Are just limited to using this tool. Oftentimes, there are other testing tools used. The nice thing about retest, is that there's new releases that are pushed out for each fork.

00:11:29.000 --> 00:11:46.000

So We have a release here that allows us to be able to run a suite of tests and it gives us the stats that we need and brings in sort of all the tests that we need for this.

00:11:46.000 --> 00:12:01.000

What you need to know is that there are teams of folks who are like writing these tests, thinking about them, and they are working if you go into the ER and Discord, there's a channel.

00:12:01.000 --> 00:12:09.000

We highlight it later in this deck. It's called hashtag testing. If I Remember correctly, while it's currently, tagged.

00:12:09.000 --> 00:12:16.000

Underneath it's underneath like the heading Den Coon. It's a channel that moves around with different upgrades.

00:12:16.000 --> 00:12:18.000

Like if you go back in the history, it's actually the whole sense that ER. Discord started of testing.

00:12:18.000 --> 00:12:26.000

So it has that the testing history in in conversation that happened for Shanghai and Capella and going back so on and so forth.

00:12:26.000 --> 00:12:41.000

That channel just like gets moved with each upgrade. So that is kind of where things happen. Retest E, there is a web interface.

00:12:41.000 --> 00:12:51.000

It is a, a stark web interface. Let's put it that way. But sometimes, you know, sometimes you like brutalist architecture.

00:12:51.000 --> 00:13:01.000

Sometimes you really like brutalist web design. And so there is a web interface that you can see that can help run the test.

00:13:01.000 --> 00:13:07.000

So very useful that we have this. When you think about it, there's a lot of work that goes into building this shared infrastructure.

00:13:07.000 --> 00:13:20.000

And now I think that helps contextualize the importance of our C, the Ethereum Foundation. If we think back on that graph of overlapping, it's not just the ideation and creation and vetting of ideas.

00:13:20.000 --> 00:13:28.000

It's also building the DevOps infrastructure. So there is an Ethereum Foundation DevOps team that really takes ownership of a lot of this work.

00:13:28.000 --> 00:13:33.000

Anything else you want to add here, Matt?

00:13:33.000 --> 00:13:34.000

Yeah, where we just recently started to migrate a lot of these tests to something called hive testing suite.

00:13:34.000 --> 00:13:44.000

The reason being is that Hive takes a new account, multi-client use cases for testing and it also takes no account the CL to EL separation.

00:13:44.000 --> 00:13:55.000

So I, when I will go back and add hive to this. Slide when we go back to share the materials.

00:13:55.000 --> 00:14:16.000

But hive is a super important one for us to test. A lot of, a lot of the reason being is that it exercises the EVM and state tests but also exercises like the reality of proof of stakes so it it exercises the fork choice rule it exercises the engine API at exercises sync testing.

00:14:16.000 --> 00:14:24.000

It's really a moralistic picture that is slowly becoming this de facto standard. We're also going to, I believe this might be.

00:14:24.000 --> 00:14:42.000

Big news, but I believe we're incorporating into that testing harness. So there'll be kind of a one complete suite going forward because now that we have the merge and proof of stake retest deep is really a way to test execution layer implementations of the EVM and some of the state stuff.

00:14:42.000 --> 00:14:54.000

So we're kind of creating a new picture, but we're rolling all these things together. In the Ethereum Foundation leads these efforts continuously, but Client teams create new test cases all the time.

00:14:54.000 --> 00:15:07.000

So like, you know, For example, the bug that impacted based on main net on January sixth, we're potentially, we're adding back that test, that corner case of what happened in the state dB implementation to the high testing suite so that we can.

00:15:07.000 --> 00:15:17.000

Not have that happen to again or anyone else. So it's kind of like Tom said a collaborative process.

00:15:17.000 --> 00:15:24.000

Alright, so now let's talk Shadow Forks in Dev Nets. So first. These are my definitions of what a shadow fork in Devnet is.

00:15:24.000 --> 00:15:29.000

I'm sure if you Google this, there could be different ones, but I've just from seeing them.

00:15:29.000 --> 00:15:49.000

A shadow fork is basically when you take an existing network that could be the theory of main net that could be a test net like girly, it could be, Sapolia, it could be, and you are literally taking from a point of a set.

00:15:49.000 --> 00:15:57.000

State, you know, so think about it like a certain block. From that point, you're forking the test and applying some changes.

00:15:57.000 --> 00:16:10.000

So we use Shadow Forks because it allows you to implement the upgrade or part of the upgrade and observe the conditions starting from a known specific existing state.

00:16:10.000 --> 00:16:29.000

So there is a, if, you check out in, there's the Ethereum Hack MD, which is essentially a, I would call it a scientific document writing, platform.

00:16:29.000 --> 00:16:35.000

We have these, you could see here's girly, shadow fork 0 analysis.

00:16:35.000 --> 00:16:43.000

And it talks about the test setup, provides some information about. Health of the network. These look like screenshots of.

00:16:43.000 --> 00:16:54.000

Almost certainly Graafanna. Which is an observability tool and it is, you know, sort of running through what happened there.

00:16:54.000 --> 00:17:02.000

So we have a spec sheet for every shadow fork and it lets basically anyone who's participating know and define the parameters.

00:17:02.000 --> 00:17:16.000

It's important for setup. It's also important for analysis, right? So here we have the spec sheet, talks about everything that will will happen, talks about when it will start up, when it will be shut down.

00:17:16.000 --> 00:17:25.000

What is included in it when has that been merged, etc. So that is really important.

00:17:25.000 --> 00:17:39.000

So shadow for think about it. We are taking a Set. A set state and from that state we're applying some change so we're literally forking an existing chain.

00:17:39.000 --> 00:17:51.000

Now, Dev Nets are specific networks that are spun up. To test the implementation of changes. And They are not made from an existing network state.

00:17:51.000 --> 00:18:00.000

That is kind of how I define it. You might hear slightly different definitions, but the idea is that, hey, a Devnet is literally a developer network, right?

00:18:00.000 --> 00:18:20.000

Like Devnet is typically used with other sort of if you're writing solidity, your DAP developer, you might first deploy your, your, depth to a, Devnet that you create from like, a.

00:18:20.000 --> 00:18:24.000

You know, if you're using any of the sort of development frameworks, most of them have something that you can spin up and run a Devnet.

00:18:24.000 --> 00:18:39.000

So you think about this is isn't sort of necessarily taking the set network state. But I think the key and and Rob like you know, showed up on camera.

00:18:39.000 --> 00:18:56.000

So this is a great time to say like a remix being one of those frameworks. Has options to essentially like if you think about it from that depth developer perspective, you can either like start clean like a true Devnet or you could say, hey, I want to start from a certain fork.

00:18:56.000 --> 00:19:07.000

Right? So you could deploy and saying like, Hey, I want to deploy under what I would call the, I think, you know, if you, if you use remix, I was using it the other day, it's gonna be, Shanghai is like your default when, when you load it up in your web browser.

00:19:07.000 --> 00:19:20.000

So, Dev Nets. Once again, same thing, spat like. We're gonna have our.

00:19:20.000 --> 00:19:32.000

Here's the test. Here's the information. Here's you know, what our analysis of it and then we're gonna have a spec sheet, right? Same sort of deal.

00:19:32.000 --> 00:19:46.000

We're gonna have a spec sheet that's gonna help guide us. And in this case, you know, these are, these are really important for actually like running, running these, these tests.

00:19:46.000 --> 00:19:49.000

The results are. Sort of I would say formally reported out from both the shadow forks and the Dev Nets.

00:19:49.000 --> 00:20:11.000

In the, E. Developer operations. Hack MD. So here you could see a bunch of like different published notes and and information about them so you could like go in and just click on it.

00:20:11.000 --> 00:20:18.000

We have the links here gives you an overview of. Of all of these different specs and what happened.

00:20:18.000 --> 00:20:26.000

But what you'll also see is that a lot of times Client teams, other stakeholders.

00:20:26.000 --> 00:20:38.000

Will report out results. I think in the merge, we saw probably the most reporting out of shadow fork results literally by media outlets and other organizations.

00:20:38.000 --> 00:21:00.000

You'll see reporting out via Twitter or X or you know, whatever social media. The key though is that you have when you do Shadow Forks and Dev Nets that it doesn't mean that we're necessarily testing all the changes and it might not be inclusive of all the changes that go into the eventual upgrade.

00:21:00.000 --> 00:21:07.000

It may include changes that are going to go into a next upgrade. It just depends on how that specified, right?

00:21:07.000 --> 00:21:13.000

So. One big thing to take away from Shadow Forks and Dev Nets, they're useful because it's getting closer and closer to the actual conditions that we'd expect.

00:21:13.000 --> 00:21:35.000

But we're able to more piecemeal. Test changes under conditions that are looking more and more like what the actual upgrade will look like, but we're not all the way there.

00:21:35.000 --> 00:21:42.000

So we could be selective. You could, you saw in one of these, there was a Devnet that was really focused on like.

00:21:42.000 --> 00:21:57.000

Blobs right so you might be testing very specific functionality because you need to do that Like I said, this came after talking about the client implementation and talking about writing the test cases, but Shadow Forks and Dev Nets.

00:21:57.000 --> 00:22:06.000

Think about this like a circle where these are kind of always happening and we're working to then. Figure out what's going to be in there.

00:22:06.000 --> 00:22:15.000

So Last week, Matt talked about how ELF was not included. In this upgrade. But EOF was tested in some of the Shadow Forks and Def Nets to be perfectly clear.

00:22:15.000 --> 00:22:29.000

Like, that did happen during this, during the run up to this upgrade. So understanding what goes in and out is really important.

00:22:29.000 --> 00:22:39.000

That's where the Shadow Forks and Dev Nets really help us determine whether the the scope of the upgrade is such that it can include certain changes or not.

00:22:39.000 --> 00:22:48.000

Right? So do not be surprised if you go back to the history and you start to see it's like, Hey, there were implementations even.

00:22:48.000 --> 00:23:06.000

Correct me if I'm wrong, Matt, I think 4 8 4 4 was being tested in elements of 4 8 4 4.

00:23:06.000 --> 00:23:10.000

Yeah, the.

00:23:10.000 --> 00:23:13.000

You'll have to repeat the last part of your question again. Excuse me.

00:23:13.000 --> 00:23:24.000

Oh, basically we even though that 4 8 EIP 4 8 4 4. You know, proto-dank sharding was gonna, is going into this upgrade.

00:23:24.000 --> 00:23:32.000

Testing for that was actually occurring. Back before the Shanghai and Capella upgrade, the Shapella upgrade.

00:23:32.000 --> 00:23:40.000

Yeah, absolutely. So we kind of started developing that at the same time, honestly. So it was.

00:23:40.000 --> 00:23:57.000

Little bit separated logically because they we had to get withdrawals. Ships first. But yeah, we were, we've We kind of are iteratively testing and developing all of this stuff in tandem and they kind of loop over each other and things like that.

00:23:57.000 --> 00:24:02.000

So yeah, I think that's the answer to the question is yes.

00:24:02.000 --> 00:24:07.000

Cool. And here's a great question. Why do we need both Shadow Forks and Dev Nets?

00:24:07.000 --> 00:24:16.000

The simplest explanation is that it allows you to change the scope of your tests.

00:24:16.000 --> 00:24:34.000

And what I mean by that is a shadow fork says, let's take existing. So Devnet is probably less close to What, if you think about like main upgrading main net and upgrading main net as the goal.

00:24:34.000 --> 00:24:46.000

Certain points in time we need to simulate. What a main net upgrade will look like. A shadow for gives us the ability to do that.

00:24:46.000 --> 00:24:59.000

To give a better approximation of what upgrading main net or test net will look like. Whereas a Devnet allows us to start with maybe more idealized conditions, right?

00:24:59.000 --> 00:25:06.000

We can sort of change the parameters of where we're starting. Whereas with a shadow for We are saying we need to take in it.

00:25:06.000 --> 00:25:11.000

We're gonna take an existing state and see how that applies. So basically gives us optionality of what we're testing and how we're testing it, right?

00:25:11.000 --> 00:25:31.000

Think about the difference between the Shadow Fork and the Devnet. State is the variable and with the Devnet, you're saying that we are going to We were able to manipulate state much more easily because we can sort of set state.

00:25:31.000 --> 00:25:46.000

Wherever it should be and by state I literally mean the state try or the state tree right whereas with a shadow fork we're saying Let's hit us like a state so we can actually look at whether it's main net or that test net.

00:25:46.000 --> 00:25:51.000

And then let's manipulate it. And now we have a comparison point of what happens. After that upgrade is applied.

00:25:51.000 --> 00:26:03.000

So it's that optionality. That's why we need to do both, right? It gives us the ability to test different things and in different ways.

00:26:03.000 --> 00:26:07.000

And do different comparisons. Great question.

00:26:07.000 --> 00:26:13.000

Yeah, it's also an approximation of real state. We generate a lot of interestingly fake state.

00:26:13.000 --> 00:26:20.000

So Shadow Forks basically say, oh, this is what would happen if nodes forked right immediately down.

00:26:20.000 --> 00:26:32.000

And are the notes prepared because Not only do we shadow for test random stuff, but those nodes kind of they operate on the same memo sometimes in terms of like if you're shadow working girl you'll still pick up transactions.

00:26:32.000 --> 00:26:39.000

So it's a real approximation of like What would happen if we literally forked a subset of these nodes right now?

00:26:39.000 --> 00:26:45.000

How would they interact with an existing network? Would they talk to each other? Would they live? Would they agree upon the right state?

00:26:45.000 --> 00:26:59.000

So there's 2 approaches. Devonets are more build fast break fast kind of thing. And Shadow Forks are expensive because we have to spend real hardware things and on main net shadow forks we have to spend real E.

00:26:59.000 --> 00:27:13.000

So it's very like those are more legitimate exercises where we feel we're closer to the end goal where we want as Tom said we're testing on a different set of items but we're also testing on a real picture of state and real transactions.

00:27:13.000 --> 00:27:18.000

So that's definitely valuable.

00:27:18.000 --> 00:27:30.000

So. Just hammering 2 points that. We set up, said already what didn't make an an upgrade is often tested in the run up to the upgrade, right?

00:27:30.000 --> 00:27:39.000

So, That is, I think, sometimes a misunderstanding that it's like, hey, the like.

00:27:39.000 --> 00:27:51.000

The upgrade is scoped so well that we only test what goes into it. The reality is that we're constantly scoping the upgrade and Well, how we're scoping the upgrade.

00:27:51.000 --> 00:28:06.000

Allows us, you know, how we're doing doing this testing, we are literally scoping the upgrade through an iterative process and That means that you'll often see certain EIPs.

00:28:06.000 --> 00:28:10.000

Be, tested and maybe not included in upgrade and that might continue on, potentially through multiple upgrades.

00:28:10.000 --> 00:28:21.000

Also testing is A process. We are in the tens of Dev Nets in Shadow Forks.

00:28:21.000 --> 00:28:31.000

Respectively for this current. This current upgrade, I think Devnet 12. Was the last one?

00:28:31.000 --> 00:28:37.000

So, I mean, this gives you a sense of like. This is happening. Iteratively.

00:28:37.000 --> 00:28:47.000

And so we are, really going. Through this process This is a great question. Matt, maybe you know the answers.

00:28:47.000 --> 00:28:54.000

What is the budget of real ether to be spent on an upgrade for testing transactions. Maybe you could just give like a rough estimate.

00:28:54.000 --> 00:28:59.000

I'm sure it's different. Per upgrade, but just trying to get a sense of.

00:28:59.000 --> 00:29:03.000

Of you know the real the real stakes that are involved.

00:29:03.000 --> 00:29:09.000

Yeah, so the EF does not release those numbers because they use real validating nodes to test this stuff.

00:29:09.000 --> 00:29:14.000

And I also don't blame them because it's probably in the tens of thousands of dollars like sustained amount of money.

00:29:14.000 --> 00:29:25.000

If you're thinking about the amount of EF and the validating stakes that they use, It's because again, we have to pay gas.

00:29:25.000 --> 00:29:39.000

Or to keep those nodes. Kind of forks like in their own little worlds. Otherwise, they'll because we'll run out of transactions to sustain that fork and they'll say, oh, there's nothing here, something weird is going on and they'll try to connect to new peers.

00:29:39.000 --> 00:29:52.000

So we basically have to sustain normal main net gas prices from block to block. Let's see what the gas price on Ethereum main net is right now.

00:29:52.000 --> 00:30:05.000

Yeah, it's like 42. It's like $2 per transaction and blocks can fit tons of transactions and we need to sustain the shadow forks for.

00:30:05.000 --> 00:30:12.000

Hundreds and hundreds of blocks. So you can see that it will quickly add up in terms of straight up just gas.

00:30:12.000 --> 00:30:24.000

And since the state that they're using is real and the fork is fake. What we do on the shadow for doesn't impact Ethereum main net state because we are on a fork of the main chain.

00:30:24.000 --> 00:30:35.000

But it does cost like you have to cost money It's a weird thing to say, right, that we're not actually impacting Ethereum, state, but we need to spend money on gas.

00:30:35.000 --> 00:30:40.000

So in theory, you think that that would make any sense, right? Because if I just go off on a fork and spend all the gas in the world.

00:30:40.000 --> 00:30:48.000

It never really makes it back on the main chain. But we have to pay for those. We have to pay to like fork those machines basically and then sustain them with.

00:30:48.000 --> 00:31:01.000

Stuff and they also run hundreds of nodes like client pairs for the shadow forks which cost money in just like cloud infrastructure costs.

00:31:01.000 --> 00:31:02.000

Yeah.

00:31:02.000 --> 00:31:06.000

At the end of the day, it's electricity all the way down and it's and you know, you gotta pay for the electrons one way or the other.

00:31:06.000 --> 00:31:15.000

And that's a good thing. So let me just like to use an analogy, right? It is it's worth spending.

00:31:15.000 --> 00:31:22.000

Let's just think about like. The total value locked on Ethereum, not even considerate.

00:31:22.000 --> 00:31:28.000

Well, and if we consider all the L two's and app chains like L three's.

00:31:28.000 --> 00:31:41.000

It's worth, you know, spending. Tens to hundreds of thousands of dollars to test this because the value that's at stake literally at stake.

00:31:41.000 --> 00:31:57.000

If this is wrong would be, you know, it, You're talking about like 0 point 0 0 0 0 0 like 1% of the value spent testing in order to continue to secure an incredible amount of value.

00:31:57.000 --> 00:32:08.000

So I think that is really key, but what I'll also mention is that like It's not, you know, to test well and to do this and just to do these setups and.

00:32:08.000 --> 00:32:18.000

Just to go back to, Let's look at the specs. And the like a shadow for like, you know.

00:32:18.000 --> 00:32:23.000

Running. This is this is

00:32:23.000 --> 00:32:29.000

A pretty sweet setup, right? Like if we're if we're running. You know, this kind of, like hardware software combination, it has real cost.

00:32:29.000 --> 00:32:56.000

So, When I mentioned this because I would say have it's always good for us to have some grace and perspective when it comes to, you know, I think I think it's after the merge it's maybe become a little bit more like, oh well, you know, the the client teams and different teams doing this.

00:32:56.000 --> 00:32:59.000

They're just, oh, they're so good at this. They just do it, but like.

00:32:59.000 --> 00:33:07.000

There are real costs and If you're running all this infrastructure. There's all the challenges that go along with running that infrastructure just in the day to day as well, right?

00:33:07.000 --> 00:33:20.000

Keeping machines online. Dealing with outages, dealing with, that the cost of that.

00:33:20.000 --> 00:33:21.000

So I point that out because it ends up being, it's not a trivial process, but it's worth it.

00:33:21.000 --> 00:33:34.000

Right? It's very much worth it. So, let's now talk about.

00:33:34.000 --> 00:33:48.000

I put this as, you know, dress rehearsals and the main event. So we've now crossed over and we want to start testing what I would say would be let's test everything at once, right?

00:33:48.000 --> 00:33:56.000

Let's test all the dependencies. All the interdependencies at the same time. And that's test net upgrades, right?

00:33:56.000 --> 00:34:05.000

These are the closest thing to to an upgrade that like can occur because test nets often persist, right?

00:34:05.000 --> 00:34:08.000

If you run at test and upgrade, the test net will continue to exist after the upgrade and be used.

00:34:08.000 --> 00:34:22.000

It has real users. So there are real stakes to this. Like there are real users who are, you know, have a deployment of a DAP.

00:34:22.000 --> 00:34:39.000

Or of a staking setup on a test net that gives them a signal about how their main net setup or depth is gonna operate it is possible to revert these like this isn't as a dire if something goes wrong.

00:34:39.000 --> 00:34:46.000

And The safest way to do this is start with a test that's going to be deprecated.

00:34:46.000 --> 00:34:54.000

There isn't always a test that's going to be deprecated. For the merge it was.

00:34:54.000 --> 00:35:06.000

Rinkby. Thank you for your service, RinkB. There were some other chess sets that were in deprecation process already, Covon.

00:35:06.000 --> 00:35:25.000

In the case of, it's going to be girly, girly hat is technically, I believe, already officially deprecated or at least it's beyond Q 3 of 2023 which was like the planned deprecation or maybe I'm wrong about that.

00:35:25.000 --> 00:35:26.000

Already there. It's done.

00:35:26.000 --> 00:35:32.000

Girlie is going to be deprecated, is already deprecated. So with Den Coon.

00:35:32.000 --> 00:35:35.000

You're gonna start there because It's like the least is at state with that, but there is still something at stake.

00:35:35.000 --> 00:35:44.000

And so similar reporting analysis is going to occur as with the De Nets and Shadow Forks and there's often coordination calls and watch parties as that happens to talk through that happening.

00:35:44.000 --> 00:35:55.000

I'm not saying that there is a coordination of calls with Dev Nets or Shadow Forks, but like.

00:35:55.000 --> 00:36:00.000

You're sort of seeing like these are the dress rehearsals, like people start showing up for the merge like.

00:36:00.000 --> 00:36:13.000

I was blown away by how many people were showing up for the calls that were scheduled for not the merge itself but like for the forks like the Test Net Forks and seeing that play out.

00:36:13.000 --> 00:36:21.000

So Earlier today, we actually had the girly fork. On the thirtieth, we'll have this Apollo one and on the seventh, we'll have the whole ski one.

00:36:21.000 --> 00:36:28.000

So. Map, what happened? Let's talk about the girly fork that happened earlier, today.

00:36:28.000 --> 00:36:38.000

Yeah, so this is a non exhaustive. List of post mortem stuff. We uncovered 3 bugs.

00:36:38.000 --> 00:36:47.000

The biggest issue is that Prism is basically just kind of broken on girly right now. That means that and needs a patch.

00:36:47.000 --> 00:36:53.000

Some of the gossip blobs that they are receiving from their peers have the wrong index.

00:36:53.000 --> 00:37:02.000

And that makes the prism note invalidate them improperly, whereas sometimes the index is not needed because of late.

00:37:02.000 --> 00:37:14.000

Slot late blob stuff. So you don't necessarily know which index of the 0 to 6, well, you know, 0 to 5 because we have 6 max blobs and Things are 0 indexed in computers.

00:37:14.000 --> 00:37:20.000

So we have those 5 in the season. If you go outside of that, normally you're supposed to be able to handle a non sequential thing.

00:37:20.000 --> 00:37:27.000

They believe that the bug is that Prison is just handling this case and properly but it's kind of breaking prison on Gurley.

00:37:27.000 --> 00:37:38.000

Nether mind is not also keeping the max limited blob transactions. In its

00:37:38.000 --> 00:37:56.000

I believe parsing of these transactions in the pool for per block. So for the slot when prison or another mind is examining the number of maximum blobs they don't keep the correct number between transactions transaction, which could lead to an invalidation of the of the block from Netherlands perspective.

00:37:56.000 --> 00:38:10.000

I have a feeling this is not an exhaustive list. The fork happened last night we're still investigating, but it's pretty interesting to see that we have, you know, a few bugs, a client called Grand on that's a consensus layer client is proposing in valid blocks as well.

00:38:10.000 --> 00:38:18.000

This is the first transition that Grand D has been through, so that's probably to be expected. But yeah, we're ongoing investigation.

00:38:18.000 --> 00:38:27.000

The net is we'll expect kind of a full post Mormon client releases tomorrow on the core Devs execution call.

00:38:27.000 --> 00:38:35.000

And we will Hopefully have more information after that.

00:38:35.000 --> 00:38:38.000

Awesome. So follow along. Join the all core devs call if you want to hear more because that's going to be pretty interesting.

00:38:38.000 --> 00:38:51.000

This is so, what's gonna happen after this one is that new releases have to get cut.

00:38:51.000 --> 00:38:59.000

To prepare for the Sapolia fork. And new releases then have to get cut again after that.

00:38:59.000 --> 00:39:10.000

To prepare for the for the whole ski fork. And then after that The main event.

00:39:10.000 --> 00:39:18.000

May not upgrade. So after all that testing. This is the and implementation part. Now we have to implement.

00:39:18.000 --> 00:39:26.000

And so it typically takes a few weeks from the last. Test net fork to make final changes if they're needed to the client repos.

00:39:26.000 --> 00:39:36.000

I said about 2 weeks, that's more based on like just seeing what's happened in the past takes about 2 weeks.

00:39:36.000 --> 00:39:41.000

And then after then an epoch, an epoch, a date of the upgrade is a set.

00:39:41.000 --> 00:39:54.000

You scheduled the coordination call the watch party everything else and then it proceeds you know the upgrade occurs And if we've done our jobs right.

00:39:54.000 --> 00:40:06.000

All the testing will have. Proven to be you know useful and we'll have a custom upgrade.

00:40:06.000 --> 00:40:13.000

But after you upgrade. We're actually still testing it in production, believe it or not. Right?

00:40:13.000 --> 00:40:23.000

So, there are behaviors that cannot be identified until

00:40:23.000 --> 00:40:28.000

We're actually being used, right? Like they're actually being used on, on main net.

00:40:28.000 --> 00:40:35.000

And so because of that, There might be some unanticipated behaviors or vectors of attack that could happen.

00:40:35.000 --> 00:40:46.000

So there is teams of security researchers and ethical hackers that are probing the protocol constantly to identify vulnerabilities to identify potential issues.

00:40:46.000 --> 00:41:01.000

They do receive payment for successfully identifying and appropriately disclosing these. It's always great to have a bug bounty and ethical hacking program because you want to lean into those members of the community who can add value through their, you know, sort of finding behaviors that aren't supposed to occur.

00:41:01.000 --> 00:41:12.000

So I have an example of right here. Here's a fork choice. So I have an example of right here.

00:41:12.000 --> 00:41:14.000

Here's that aren't supposed to occur. So I have an example of right here. Here's the fork choice bug fix disclosure.

00:41:14.000 --> 00:41:28.000

This was, you can see this is also on the Ethereum Hack MD. But basically there was, 4 choice attacks that, were identified that could able to cause long reorgs.

00:41:28.000 --> 00:41:35.000

You can actually go down. There's quite a bit of documentation and proof. Some of it is actually done via formal verification.

00:41:35.000 --> 00:42:04.000

So if you go into this, you could see attached proofs about how this is proven and this helps identify how changes you know can Can occurred that need to be implemented and sometimes these changes don't require like a full update you know full upgrade it can be just done with cutting a new client versions, right?

00:42:04.000 --> 00:42:12.000

Because We're trying to. And to better adhere to the spec, there might be things that need to be changed or removed.

00:42:12.000 --> 00:42:25.000

But basically, this just because a upgrade is done doesn't mean that testing stops, there's just a different set of group.

00:42:25.000 --> 00:42:34.000

Different set of use. Users who are testing and in this case it's at security researchers.

00:42:34.000 --> 00:42:40.000

Ethical hackers, protocol, sort of base people. So What we have then is during this whole process, there's a ton of discussion that's happening.

00:42:40.000 --> 00:42:55.000

So like I said, we have coordination calls, we have, you know, the Alcore Devs calls, the CL layer calls, there's constant talk, sometimes there's specific calls to discuss EIPs and the testing and implementation of those.

00:42:55.000 --> 00:43:07.000

There's a testing channel on E. Discord. There's channels related specifically to each upgrade.

00:43:07.000 --> 00:43:13.000

There's the interop channel that talks between the EL and CL and talks about the engine API.

00:43:13.000 --> 00:43:19.000

The client teams have their own discords and telegrams where there's talking about testing and test conditions.

00:43:19.000 --> 00:43:27.000

There's a hack MD. Documents and we haven't even really broached this yet but I think in the run up to.

00:43:27.000 --> 00:43:39.000

You know, events like Dev Connect or East Denver, you know, this course started after Dev Connect and it's gonna end before East Denver, at least this version of it.

00:43:39.000 --> 00:43:54.000

But those are opportunities, you know, these different. Community get togethers for actually a lot of the teams to get together in person or in a hybrid setting and actually talk and try stuff out.

00:43:54.000 --> 00:44:13.000

Prior to the merge, there was a huge amount of progress made in an August. Meet up that was in I think the greater Athens area where client teams researchers aren't you able to get together, and actually spend, I think 3 to 4 days together working specifically on some of the harder aspects of the merch.

00:44:13.000 --> 00:44:27.000

So as much as we do stuff and sort of this like always a virtual environment. There are times when it does make sense to convene people in person to spend time working to sort of push through and get stuff done.

00:44:27.000 --> 00:44:40.000

So, anywhere else, Matt, that you think the coordination is kind of happening as well.

00:44:40.000 --> 00:44:49.000

This is basically it.

00:44:49.000 --> 00:44:50.000

Yes, the magicians and all of that.

00:44:50.000 --> 00:44:54.000

Yeah, so a lot of I was gonna say a lot of this happens in the GitHub spec repositories.

00:44:54.000 --> 00:45:02.000

So the CL specs and the enterprise execution layers are not the enterprise. The execution. Layer specs so the eels.

00:45:02.000 --> 00:45:06.000

Yeah, the coordination is happening there, but a lot of the actual coordination happens in GitHub discussions.

00:45:06.000 --> 00:45:22.000

On individual spec PRs. So, EIPs might have one or more individual spec PRs and people will ask for comment and opinion from other teams on those PRs.

00:45:22.000 --> 00:45:26.000

So the discussion in GitHub actually becomes pretty important and it stays canonical too, which is nice.

00:45:26.000 --> 00:45:31.000

It doesn't really go anywhere. Yeah, that's the only other thing I would add to this.

00:45:31.000 --> 00:45:36.000

Everything else is very much covered.

00:45:36.000 --> 00:45:41.000

Awesome. Alright, so let's open it. We have some good time for QA. Feel free to type it in or come off.

00:45:41.000 --> 00:45:53.000

Mute, whatever your choice and then I'll try and just wrap it. We'll probably stop with like a minute ago to go over, you know, what's gonna happen.

00:45:53.000 --> 00:46:19.000

At office hours.

00:46:19.000 --> 00:46:27.000

If no questions, that's completely, completely fine.

00:46:27.000 --> 00:46:28.000

I'll give everyone a moment to think and I'll cover this. We go right to the end.

00:46:28.000 --> 00:46:36.000

So obviously office hours will answer any questions that people have as they go over the material. We can go in depth on any specific.

00:46:36.000 --> 00:46:38.000

You

00:46:38.000 --> 00:47:02.000

Questions that you have about any of these processes. So one thing that we won't cover is We will probably we will stay away from the Devnet side because that's like our final week of the class is sort of diving into the Dev Nets and that's specific for when we talk about the Dev Nets, we're going to be specifically talking about how Dev Nets applied to this upgrade.

00:47:02.000 --> 00:47:20.000

So, That's to more sort of dive into to these changes and. Yeah, and we do have a guest speaker coming up to speak about, so, we're gonna get that scheduled.

00:47:20.000 --> 00:47:29.000

We'll announce it on Friday. It will be Justin Florentine from the, Hi.

00:47:29.000 --> 00:47:43.000

And so, we'll put out that information and he will talk about testing probably with, you know, and that's a great person to then ask questions if you have them, not just about the generalized testing process, but like.

00:47:43.000 --> 00:48:00.000

Decisions around testing specific to that execution layer Ethereum find.

00:48:00.000 --> 00:48:07.000

Okay, cool. Well, if there are No questions. I don't wanna hold anyone. For any longer.

00:48:07.000 --> 00:48:28.000

So thank you so much for attending today's. Lecture, we'll see you on Friday if you can attend and just to make a plug, there are some additional Just that forks coming up, so, I will tell you right now.

00:48:28.000 --> 00:48:35.000

We will probably, we will definitely cover what happens in this a polio one at some point.

00:48:35.000 --> 00:48:56.000

And we while the course will be, technically in the sort of final project stage at this point, Matt and I are gonna try and pull something together a little special extra one for, we want to, you know, whether that's a debrief about it or depending on the timing, if it works out, something that we can kinda.

00:48:56.000 --> 00:49:12.000

Do a little bit of a watch. Party. We'll see about that, but we're gonna have there's gonna be at least one or 2 bonus, activities as part of this course to take advantage of the fact that Our timing got lucky, right?

00:49:12.000 --> 00:49:23.000

So better lucky than good sometimes. And so It's very nice that this course is timing up with the test net forks as we're kind of rolling into the finish.

00:49:23.000 --> 00:49:30.000

So, we will take it. We will take it. It went as planned. All right, everyone.

00:49:30.000 --> 00:49:32.000

Have a great rest of your weeks and all will see you, on Friday.

00:49:32.000 --> 00:49:37.000

Thanks everyone


Office Hours

Office Hours Transcript

The following transcript was auto-generated, and may content syntactical errors.

00:00:04.000 --> 00:00:18.000

Kick off today is Friday? January nineteenth. And we're gonna have some office hours.

00:00:18.000 --> 00:00:30.000

So just to review. From last

00:00:30.000 --> 00:00:46.000

Lexter. We. Are always going through some sort of testing process. Whether we're testing the current fork or testing.

00:00:46.000 --> 00:00:53.000

Yeah, EIPs for inclusion and another fork. We might also always be testing. We might also be testing.

00:00:53.000 --> 00:01:10.000

Interpretations of the protocol as well. I think that's something that we kind of missed elaborating on, but what I mean by that is just that Sometimes, particularly when there is.

00:01:10.000 --> 00:01:20.000

The implementation of an EIP or of some change, other change to the Ethereum protocol, it may not.

00:01:20.000 --> 00:01:29.000

Be implemented as planned and so there's always testing to make sure that. There's adherence to the specification.

00:01:29.000 --> 00:01:36.000

So. There's always testing going on, but as we think about coming into any sort of upgrade.

00:01:36.000 --> 00:01:55.000

There are these initial test that give us signal about what needs to change. Those are, you know, the shadow forks and dev nets will go next week into more specifics about like sort of the nitty gritty of what happened on the Dev Nets.

00:01:55.000 --> 00:02:07.000

And then. When it's time for like. Prime time, we first start with dress rehearsals of Does, test net forks.

00:02:07.000 --> 00:02:20.000

And then those give a signal about what worked but didn't work. Make changes and that allows us to go and prepare into the, to the main net upgrade.

00:02:20.000 --> 00:02:30.000

So that's just an overview. I just wanted to open it up to any questions that folks had or any topics.

00:02:30.000 --> 00:02:34.000

To that would make sense to just go deeper on.

00:02:34.000 --> 00:02:44.000

So feel free to unmute. Or just drop any questions in the in the chat.

00:02:44.000 --> 00:02:54.000

Something that we pointed out, and this is in the slides is that, you know, there is this end-to-end testing suite for a theory.

00:02:54.000 --> 00:03:01.000

Of Hive and so we put that in there as that will replace retest teeth.

00:03:01.000 --> 00:03:11.000

Okay, so great. Question one. Which networks are accessible? To the general public.

00:03:11.000 --> 00:03:21.000

For trying out their own depths. Would this include an appropriate asset faucets? Would there be a page with all relevant information?

00:03:21.000 --> 00:03:33.000

Great question. So I'll start generally. Let's start outside of an upgrade. The DAP networks right now that folks can test on.

00:03:33.000 --> 00:03:36.000

There is.

00:03:36.000 --> 00:03:48.000

There is by. Coordination of the Ethereum Foundation and those who are running it. Only.

00:03:48.000 --> 00:04:04.000

One network that's really built for testing daps. And that. Would be, at this time.

00:04:04.000 --> 00:04:14.000

Sipolia. For Ethereum may not. So, Ethereum may not Sapolia because Gurley is deprecated.

00:04:14.000 --> 00:04:23.000

That is going to be the network for. Testing daps. There are Sepulia faucets.

00:04:23.000 --> 00:04:33.000

The etherium foundation does a very good job of like keeping up to date on where there are faucets.

00:04:33.000 --> 00:04:41.000

I would be remiss to say, you know, I, I'm wearing an inferior shirt right now.

00:04:41.000 --> 00:04:50.000

I work at consensus. We have a Sapolia faucet as well. So many other, our PC providers also have.

00:04:50.000 --> 00:05:04.000

Faucets as well. So if you want to get any sort of You can debt go to.

00:05:04.000 --> 00:05:15.000

The Ethereum Foundation website, you just go to the theorem.org and you're There is a like a.

00:05:15.000 --> 00:05:19.000

A section that says faucets, if you go to infuri. Dot.

00:05:19.000 --> 00:05:26.000

There's faucets if you go to, if you Google. S, you will find Sipolia faucets.

00:05:26.000 --> 00:05:33.000

There are a lot of faucets. That is for testing. If you just want to test at any given time.

00:05:33.000 --> 00:05:39.000

Adap and you wanna test it in a environment as close as possible to production, that's where you do it.

00:05:39.000 --> 00:05:49.000

Now, if you wanna test your DAP. In a Devnet situation or a shadow fork. That does require joining.

00:05:49.000 --> 00:06:00.000

The, channel and being in communication with the various teams that are testing it because That, Dev Nets and Shadow Forks.

00:06:00.000 --> 00:06:10.000

Tend to be a close validator staking set, right? So. If you have a DAP that has been deployed.

00:06:10.000 --> 00:06:21.000

To that. Network. And there's a shadow fork occurring. You would actually see what happens in that shadow fork.

00:06:21.000 --> 00:06:31.000

If you had the ability to interact with it, but that those shadow forks are, almost always not like open to the public, right?

00:06:31.000 --> 00:06:39.000

And that. There is not a, the coordination to like have that be an open test is very hard.

00:06:39.000 --> 00:06:52.000

So. If there's a reason that it makes sense to like test the DAP and for example, like if the DAP is making use of a certain new opcode that's introduced by EIP.

00:06:52.000 --> 00:07:15.000

That'd be a great reason to have that one be tested. That would require coordination with. All core devs with the The Ethereum like DevOps team is also sometimes called Panda ops just like if you hear us like throughout that name.

00:07:15.000 --> 00:07:29.000

Panda Ops is just a reference to the merge some visualization of the merge of like a like a black bear in a polar bear.

00:07:29.000 --> 00:07:36.000

Doing a little dance together and then becoming a panda bear so that's why that's, what the reference is.

00:07:36.000 --> 00:07:48.000

But if you wanted to test under the conditions, test adapt under the conditions of a. Upgrade, but wanted to get like a smaller set, you'd have to coordinate with them.

00:07:48.000 --> 00:07:57.000

Now, if you have a depth that's deployed to S, on the.

00:07:57.000 --> 00:08:16.000

The Sapolia. Upgrade is gonna happen on thirtieth January and that would be the best sort of like open set of people if you wanted to test out a depth deploy it before then see what happens and then get an opportunity to do it and you could just use Sapolia.

00:08:16.000 --> 00:08:28.000

So the is is now become the DAP testing layer and, Holeski is like the staking layer. So if you're like that, sorry, the staking sort of base test.

00:08:28.000 --> 00:08:34.000

So if you're looking to like test your staking validator setup, this test net will, will be the one.

00:08:34.000 --> 00:08:44.000

This will change over time, because What we're seeing is that, you know, test nets while there's no like actual crude value on them.

00:08:44.000 --> 00:08:58.000

They do like any other sort of computer system require resources to run. And so I would say the general conclusion is.

00:08:58.000 --> 00:09:09.000

That. It's easier to run a test net. That is. For DAP developers.

00:09:09.000 --> 00:09:26.000

At scale, if you have a closed validator set, basically like a closed number of set. Groups that are running the validators for it because it makes a little bit easier for them to ensure that that test that stays online.

00:09:26.000 --> 00:09:43.000

And if you're running a test net that is more like Testing a staking setup. Focused it's that's the one that you can keep open right it's because then it's an open set you're having validators join and the requirements are different if you think about it.

00:09:43.000 --> 00:09:44.000

Like adap doesn't need 30 to to deploy, right? 32 test. That's when you could do like a faucet.

00:09:44.000 --> 00:09:50.000

I's different if you think about it. Like, adap doesn't need 32, to deploy, right?

00:09:50.000 --> 00:09:55.000

32 test. Whereas like if you want to test your staking setup. You need like to have that 32 test, right?

00:09:55.000 --> 00:10:07.000

So it's just like a fundamentally sort of different. Setup. So great question. I went into a little bit more detail there, but just kind of wanted to flush it out.

00:10:07.000 --> 00:10:17.000

And then The page with all the information I can probably pull that up in a second. So let's go on to question 2.

00:10:17.000 --> 00:10:24.000

I would like to fork a client test modifications to the network framework. Would there be a way to do this without having to run a full-fledged network.

00:10:24.000 --> 00:10:45.000

I would say the best way to do that. Is to run it locally. Run it locally and The easiest way to do that is just to Spin up like you can spin up a client and also spin up multiple like other iterations of that client and have it peer with itself.

00:10:45.000 --> 00:10:53.000

And what you would need to decide is like what your starting state would be. So you could either say, I'm going to have my starting state be essentially a snapshot of a certain block number.

00:10:53.000 --> 00:10:59.000

And, and when I say this like, I'm assuming that you know how to set the configuration of the client, right?

00:10:59.000 --> 00:11:15.000

Like basically when you're doing startup, whether it's your ingesting that information via like a GAMMO file, any let's just say any sort of configuration file that you know what the starting state wants to be.

00:11:15.000 --> 00:11:24.000

So if you want to start from like, hey, we're gonna start from. Essentially.

00:11:24.000 --> 00:11:32.000

A coin like a coin based account just, you know, 0 x 0 0 0 and we're gonna start and try network.

00:11:32.000 --> 00:11:45.000

Framework that is essentially like recreating everything from scratch or if you want to say, you know what, I'm really interested in starting from the state, like doing a fork from 5 min ago. You could do that.

00:11:45.000 --> 00:11:57.000

You just need to set up your client and the peers appropriately. And then you can use that information to actually then fork and test modifications within the framework.

00:11:57.000 --> 00:12:04.000

So you're gonna run a network. But you're gonna run it locally. So it isn't as.

00:12:04.000 --> 00:12:25.000

Full, we used to do this all the time in the, one of the exercises in the developer boot camp was taking death and starting it and running basically a for node network back under like proof of work, but just doing it locally on.

00:12:25.000 --> 00:12:32.000

Your machine and you know there was a lot of laughs that would happen as everyone's machines start to you know go the fans spin and it sounds like it's an airplane taking off depending on how powerful their machines are.

00:12:32.000 --> 00:12:46.000

But now with proof of state, you can do this. You could be pretty strategic and like, wait about it.

00:12:46.000 --> 00:13:02.000

Additionally, if you want to. Even be more lightweight, there are different development frameworks that ship with a.

00:13:02.000 --> 00:13:12.000

With the sort of. Forks and you can reach out to those teams and see if that's something that they accommodate.

00:13:12.000 --> 00:13:33.000

Everything, you know, it's, it wouldn't be, for most of it wouldn't be out of the box because normally you're just trying to test the DAP versus test the client, but there could be some possibilities there and I'm talking about everything from remix, open source flavor of Ganesh opens hard hat Foundry all those they have some sort of version of like a

00:13:33.000 --> 00:13:43.000

forked version. So I'm not saying that like it would be easy to bolt on testing a client there, but it's something worth to talk to teams too.

00:13:43.000 --> 00:13:54.000

So those are kind of your options. And then finally during the testing, whether it be any data collection for vital signals of the network, say message is going gossip network, shaped with a blockchain with this data be accessible.

00:13:54.000 --> 00:14:06.000

Yes, there is. This is probably a good time for me to stop share and break out of my

00:14:06.000 --> 00:14:21.000

Pull up a page for you. Because we can talk about The, what is called the, the,

00:14:21.000 --> 00:14:27.000

Let me pull this up. I had this ready and then of course I had it ready and then I clicked off somewhere and I can't find it.

00:14:27.000 --> 00:14:42.000

Which, you know, always happens. This is the.

00:14:42.000 --> 00:14:57.000

First. And now, of

00:14:57.000 --> 00:15:01.000

I'm still sharing my screen. My goodness.

00:15:01.000 --> 00:15:09.000

Thank you. It's my first time using. This computer, but it is. Actually not.

00:15:09.000 --> 00:15:15.000

Okay, where did everything go?

00:15:15.000 --> 00:15:21.000

Come on, Zoom. Help me out. Help me out too. Okay, there we go.

00:15:21.000 --> 00:15:26.000

Goodness. I did not know it's going on there. Apologize to that. Okay.

00:15:26.000 --> 00:15:36.000

Here we go. We're back and share. Okay, so Girlie. This should be the, girly blob analysis.

00:15:36.000 --> 00:15:52.000

So this came out of. Yes. Upgraded. And so, This is the test, this is like the data collection and a write it up in hack MD on the, Panda ops.

00:15:52.000 --> 00:15:59.000

So it's talking about, hey, you know, we, the girly public test, it underwent the, the denkin fork.

00:15:59.000 --> 00:16:09.000

6 30 am universal coordinated time. There was a brief non finality incident. Let me just drop this in here, cause I think this is really interesting.

00:16:09.000 --> 00:16:15.000

This is like an initial report out, like, like we said in lecture, this is kind of what happens.

00:16:15.000 --> 00:16:27.000

There is like an initial report out and then We, we have some additional, reporting that's done, there is an issue, an issue analysis, which is awesome.

00:16:27.000 --> 00:16:45.000

So here is the debugging of that. And talks about What happened? Walks through all of it so We have that issue now.

00:16:45.000 --> 00:17:02.000

Data from precon was collected via centuries running. Eeli think it's like LLL is and you can kinda see this is the.

00:17:02.000 --> 00:17:03.000

Electric, that's what it is. Yeah. This is a multiplexer.

00:17:03.000 --> 00:17:28.000

It's additional. It allows multiple consensus clients to connect to a single execution client, which is Really makes me laugh because like when we were doing a bunch of education, work about the merge we.

00:17:28.000 --> 00:17:32.000

We're like, don't.

00:17:32.000 --> 00:17:41.000

Do this, right? Because it's suitable for monitoring analytics. Which is great. It's good for testing, but you will miss block proposals.

00:17:41.000 --> 00:17:48.000

Basically the idea is that you can't have multiple consensus layer clients driving the same execution that the same engine API, which is associated with that.

00:17:48.000 --> 00:18:02.000

The execution layer. So That's a little bit of a side, but, so we have, you know, the blob analysis.

00:18:02.000 --> 00:18:09.000

And everything is kind of walk through here, there's spanning of blobs.

00:18:09.000 --> 00:18:18.000

There was, you can see some screenshots dropped in here, how data was collected. Everything that was done, I think this is a great overview.

00:18:18.000 --> 00:18:26.000

And so we're collecting those P. 95 statistics. On what happened. There's some.

00:18:26.000 --> 00:18:34.000

Interesting, more mainly illustrative graphics dropped in there, but there is you know a heat map that you can view.

00:18:34.000 --> 00:18:40.000

There's the graph. I think this is all done. Yeah, it is done in and These are like the literal dashboard that you go into.

00:18:40.000 --> 00:18:51.000

So great question, cause this is, this is gonna force me to log in. Okay. I guess you'd have to have a login to do that.

00:18:51.000 --> 00:18:56.000

But I'm not exactly sure how to, to get that. That is probably a question.

00:18:56.000 --> 00:19:00.000

And, and I'm guessing it's a close set of people but This is like all the data about what happened.

00:19:00.000 --> 00:19:09.000

Kind of at a high level. So yes, I guess the short answer to the question is that, all of that data is here.

00:19:09.000 --> 00:19:18.000

It should be in some form accessible. That, all of that data is here. It should be in some form accessible.

00:19:18.000 --> 00:19:24.000

It does seem like it could be exported as well. It should be in some form accessible. It does seem like it could be exported as well. And it is shared around.

00:19:24.000 --> 00:19:28.000

And then there is, and while we don't have the login to see these graphs, it does seem like it could be exported as well, and it is shared around.

00:19:28.000 --> 00:19:30.000

And then there is, and while we don't have the login to see these graphs, it that these graphs do exist.

00:19:30.000 --> 00:19:32.000

So they are something that could be, you know, in talking to like, like someone else from that team that it should be accessible.

00:19:32.000 --> 00:19:43.000

So, yeah, that kind of answer. I hope that answers all 3 questions. Great questions.

00:19:43.000 --> 00:19:52.000

Happy to jump into, more.

00:19:52.000 --> 00:19:53.000

Yeah.

00:19:53.000 --> 00:20:01.000

I got another one. So like the tests are probably run by some script of. What they think are the things they want to test about.

00:20:01.000 --> 00:20:11.000

But because there's seems like So many different ways of getting in. To, there's so many different factors.

00:20:11.000 --> 00:20:16.000

I guess that's why they're limiting the network upgrades to just a couple of PRs.

00:20:16.000 --> 00:20:29.000

But, still there's still so many ways in so. It's amazing they don't miss new ways of of problems.

00:20:29.000 --> 00:20:30.000

Okay.

00:20:30.000 --> 00:20:42.000

You know, like in, I don't know, just like in. In remix where like where there's like our standard tests that we every time we add a new feature we add some tests for it but users always find some new way to break it.

00:20:42.000 --> 00:20:43.000

And, yeah.

00:20:43.000 --> 00:20:53.000

So, yeah. It is it is very impressive. That the number of issues. Our like I would say like it's an impressive.

00:20:53.000 --> 00:21:04.000

An exceedingly impressive rate of, catching issues beforehand. Now, to be clear.

00:21:04.000 --> 00:21:22.000

There are issues that pop up that have talked up. So we go a little bit more into this. Into the for choice bug that was discovered this one really did like this was a deep deep research issue.

00:21:22.000 --> 00:21:39.000

I'm not going to lie. Like I think that this was an issue that would have likely not been caught if not for like a really adept security researchers who have.

00:21:39.000 --> 00:21:51.000

The ability to like write proofs in like formal verification languages. Could do this because they basically found like edge cases that

00:21:51.000 --> 00:22:02.000

Could have been exploitable? But are so deep in there that we require like you know, Quite a bit of talent.

00:22:02.000 --> 00:22:16.000

To be able to discover them, though who knows with like. So the proliferation of AI, it is possible that a lot of these kind of like what we would once think of like, oh, you know, these are pretty deep issues, they might be more.

00:22:16.000 --> 00:22:22.000

I think there is an argument to be made that there's gonna be that sort of like.

00:22:22.000 --> 00:22:36.000

So only gonna accelerate sort of that. That you know finding bugs and fixing them but There actually is a very deep explanation of this issue.

00:22:36.000 --> 00:22:46.000

Roberto. Sultani, who's one of the. The

00:22:46.000 --> 00:22:52.000

The researchers on this, I was fortunate enough to get to spend some really nice time. With him.

00:22:52.000 --> 00:23:03.000

In a small group setting. To really like talk through what, they, what they figured out.

00:23:03.000 --> 00:23:12.000

And. It was. I am not going to necessarily be able to.

00:23:12.000 --> 00:23:19.000

Do you do justice? I've probably, I, he's also shared some like a talk that he gave around this.

00:23:19.000 --> 00:23:32.000

But, what was realized was that There were possibilities of reorging with for a non justifiable reason like.

00:23:32.000 --> 00:23:53.000

So, so the issue was essentially was. The way that the specification was written. And the way it was implemented did not match essentially but on these like sort of edge cases so that there was an attack vector where there could be the possibility of a reorg.

00:23:53.000 --> 00:24:01.000

That could occur that would not be a justified reorg. And it one of the results was that.

00:24:01.000 --> 00:24:16.000

Validators who acted honestly could be slashed. So this was discovered and. There was at you know full

00:24:16.000 --> 00:24:23.000

I mean, I think this is one that was done by Roberto like at a station. Denlocks and then.

00:24:23.000 --> 00:24:36.000

That there was the, this is how it's gonna be. Changed so This was a really so you know it is very and impressive that all of this was like figured out.

00:24:36.000 --> 00:24:50.000

Here is the manual proof list. And this goes like. Super deep. If you want to like start clicking down, I'll share this like again.

00:24:50.000 --> 00:24:58.000

So you can just see. But as you keep on like going down, if you really want to get into some some.

00:24:58.000 --> 00:25:09.000

Interesting. Work, it just. You can see the spec versions in there, but this goes into.

00:25:09.000 --> 00:25:30.000

Sort of the assumptions and then like. How do you prove that this thing but what was supposed to happen was not happening so this whole

00:25:30.000 --> 00:25:39.000

Real, math and justification going on. But to your point, Yes, it is possible. That we can get something.

00:25:39.000 --> 00:25:53.000

Live and there's still be some, gaps in there, but we're very fortunate that For the most part.

00:25:53.000 --> 00:26:02.000

The vast majority of the hit like expected behaviors. Our, are observed. And the upgrade is able to occur.

00:26:02.000 --> 00:26:14.000

Now to to talk about sort of an interesting situation. Let's talk about it. This one is, this is like an open for debate.

00:26:14.000 --> 00:26:29.000

Question, but like at some point, right? We have to say. Is there adjusted like, right, is a good example.

00:26:29.000 --> 00:26:36.000

Was that an intended part of the protocol? Is that an intended part of the protocol is that an intended part of the protocol, is that an intended part of the protocol or not?

00:26:36.000 --> 00:26:47.000

I think we've We've come to say, well, you know, It's something that exists and there are benefits.

00:26:47.000 --> 00:26:51.000

There's positive benefits. There's negative benefit. There's, there's not negative benefits.

00:26:51.000 --> 00:26:57.000

There's, there's negatives to it, but what you can also see is sometimes that.

00:26:57.000 --> 00:27:11.000

Parts of the protocol, there is a inability to always predict what that would. How users will. End up interacting with the protocol.

00:27:11.000 --> 00:27:32.000

And so then there has to be decisions around. You know, is that now just part of it and we're saying it's included a lot of times, you know, that is seen the like code is law sort of subset of of folks that are in this space and that is a group that, I think, you know, it's very important to kinda like take that into consideration.

00:27:32.000 --> 00:27:57.000

On the other hand, there is a like, hey, the intent wasn't for that. So, self-destruct, we're starting to see, you know, all that work around self-destruct and that's gone on and modifying the opcode is basically saying like, hey, this was the original intention and yes, could his law but like because of things that are going on with

00:27:57.000 --> 00:28:03.000

it, can we modify the opcode? So it's always like there isn't like a hard fast rule.

00:28:03.000 --> 00:28:11.000

It does feel like there is always this sort of like tension and pull between various groups within all Cordes within the Ethereum community.

00:28:11.000 --> 00:28:21.000

But what's cool about it is that we end up coming to . A Enough of a consensus that we can move forward to keep on.

00:28:21.000 --> 00:28:32.000

Keep the protocol going. Now, obviously doing upgrades like this, we have said, you know, there is a certain desire to constantly move.

00:28:32.000 --> 00:28:39.000

You know, taking information and react. So as much as that like code is law, there is a desire to say like, hey, you're not going to get everything right.

00:28:39.000 --> 00:28:51.000

You need to be able to. Constantly update and improve. And so that Tension is is a good one because it Makes us respect the fact that like, hey, there are decisions made.

00:28:51.000 --> 00:29:06.000

We're just not gonna try and not take those decisions into account, but at the same time, like a protocol has to evolve to meet used cases and what people want to do with it.

00:29:06.000 --> 00:29:16.000

And in the case of Roberto's. Proof. Like, so you found a problem. And then, then there was probably.

00:29:16.000 --> 00:29:20.000

How long did it take for them to did they address it or did they? Hi, did it have to wait?

00:29:20.000 --> 00:29:34.000

They did address it. I think that the time horizon to address it was ended up being months. So which sounds about right, you know, that seems, it seems like that seems pretty fast.

00:29:34.000 --> 00:29:48.000

Like, like pretty reactive for like such a deep. Proof that they that had to do but it see from my memory it was like identified and and you know

00:29:48.000 --> 00:29:55.000

A solution was come up with and that was all be able to be implemented over the course of months.

00:29:55.000 --> 00:30:02.000

But it does that it was presented. It was like fairly disclosed. And all that. So it was part of like a.

00:30:02.000 --> 00:30:20.000

A an an ethical security researcher work group. I think there that there was a compensation received for identifying that and fairly disclosing it under the terms of a better set out.

00:30:20.000 --> 00:30:31.000

It didn't make a new. Fork network for good. I mean, yeah. Did it or when they up fixed it?

00:30:31.000 --> 00:30:32.000

I think.

00:30:32.000 --> 00:30:35.000

It didn't my understanding is not it was more of a client implementation change that could be made. Yeah, yeah.

00:30:35.000 --> 00:30:46.000

Without going into the deep specifics of it, I think there was like a specific. Field that was able to be some parameters on that were able to be modified.

00:30:46.000 --> 00:30:53.000

And so that's a little bit quicker because it just requires the client teams to cut a new version.

00:30:53.000 --> 00:30:59.000

Yeah.

00:30:59.000 --> 00:31:08.000

So as much as you kind of laid this out linearly, I mean, I would I probably need to get a good make a good diagram.

00:31:08.000 --> 00:31:18.000

Long term that shows like it's really like circles upon circles of testing. And, and usage and so yeah.

00:31:18.000 --> 00:31:33.000

Any other questions? Great questions.

00:31:33.000 --> 00:31:40.000

Okay, well, everyone thinks about if there are any final questions. Do not take the whole time, but did want to.

00:31:40.000 --> 00:31:53.000

Just give some, final, announcement. So on Monday, this is on the course calendar just in Florentine from the basic team is going to explain testing as it relates to him working on an Ethereum execution layer client.

00:31:53.000 --> 00:32:03.000

So we'll go in depth. It will be sort of in his focus. And Matt will be running that session with with Justin.

00:32:03.000 --> 00:32:06.000

Any specific questions you have, if you sort of review anything I shared and you're like, I'm really interested in finding more about this tooling.

00:32:06.000 --> 00:32:15.000

He's great person asked that recording will be posted. It might be a little delayed in getting it posted.

00:32:15.000 --> 00:32:23.000

We have that next week off. Matt and I have some prior obligations that are just gonna make it, you know.

00:32:23.000 --> 00:32:35.000

Tough for us to do the Wednesday in the Friday office hours. But then we come back and we have a, our final week where we talk about, you know, really go in depth on Dev Nets.

00:32:35.000 --> 00:32:38.000

On the

00:32:38.000 --> 00:32:48.000

On the thirtieth and then instead of having office hours on the second what we're going to do is push them to Wednesday, February, the seventh to coincide with the Holski upgrade.

00:32:48.000 --> 00:32:50.000

Hello.

00:32:50.000 --> 00:32:57.000

So that way we can just keep the conversation going. So we won't have office hours that are typical Friday time.

00:32:57.000 --> 00:33:10.000

We'll have us will push the office hours on the whole ski upgrade date just so we because at that point we'll have all the test nets upgrade date just so we because at that point we'll have all the testnuts upgraded and that's like a good way to wrap and summarize.

00:33:10.000 --> 00:33:21.000

Probably it also that one will. Talk about bonus activities. And we are also probably going to at that point.

00:33:21.000 --> 00:33:46.000

Talk about the opportunities that we might have to do a little. if possible, either a hybrid or in person get together as we get closer to, one of the, what I would call like a real cornerstone event of the Ethereum community, alongside the likes of, you know, the, the global series.

00:33:46.000 --> 00:33:55.000

Devconnect, Devcon, East Denver. So, many of us will, be there.

00:33:55.000 --> 00:33:59.000

And so, we're trying to figure out, is there a way to just informally get together, maybe over a coffee.

00:33:59.000 --> 00:34:11.000

And just say hi to anyone who's in the course. Who might be in the area and talk about what we've learned.

00:34:11.000 --> 00:34:19.000

And see if we can gather some of our our guest speakers as well just to come by and say hi so it would be very informal but.

00:34:19.000 --> 00:34:24.000

Yeah, that's right thinking.

00:34:24.000 --> 00:34:25.000

Sounds good. We can meet at Dandy's house.

00:34:25.000 --> 00:34:33.000

Alright. Yeah, that would be nice. I'll bring, I'll bring a bunch of coffee and, I'll just.

00:34:33.000 --> 00:34:34.000

Yeah.

00:34:34.000 --> 00:34:46.000

Get caffeinated. Pull out a whiteboard and and and write some write some mathematical proofs.

00:34:46.000 --> 00:34:58.000

Alright, well if no more questions that was really great to hear everyone guest speaker on Monday. Just to, so you should see that in the calendar and, We're really excited for that.

00:34:58.000 --> 00:35:08.000

We'll have a week off from lecture and then we're back. With our final official lecture of the course on the I said the thirtieth by minute 30 first and then we're pushing back like I said office hours to be the day it's something that Friday I've already moved that that should update it that should have updated in the calendar.

00:35:08.000 --> 00:35:28.000

All right


Guest Speaker

Justin Florentine - Besu - Consensys

Guest Speaker Transcript

00:04:37.150 --> 00:04:47.520

Matt Nelson: all right. Thank you for joining folks. Today is week number 4, guest speaker number 3 of our upgrading ethereum network

20

00:04:47.710 --> 00:04:50.759

Matt Nelson: upgrading the ethereum network lecture series.

21

00:04:51.100 --> 00:05:11.770

Matt Nelson: And today's topic is going to be a guest speaker on the week that we discussed testing and implementation of the hardworks. So we have with us today. Justin Florentine is a member of of my team here, consensus on the base. 2 team who was the core developer. It's been a big part of delivering the Cancun upgrade on the execution there.

22

00:05:11.770 --> 00:05:24.069

Matt Nelson: so I won't give too much away. But we'll give let you do a little intro Justin and then we can kind of go into it. I'll start with some initial questions, or if you'd like to start us off in a particular spot.

23

00:05:24.210 --> 00:05:28.840

Matt Nelson: But yeah, again, the context for this this week of lecture was last. We discussed.

24

00:05:29.080 --> 00:05:50.650

Matt Nelson: How? Core devs coordinate around things like Devnett's specification updates testnet forks. We discussed the gorilla fork briefly. So there, there's context already. There there's also context around the eip process. How those are written, how those are coordinated! We taught. Had puja from Eve cat Herters come on and discuss all that stuff.

25

00:05:50.650 --> 00:06:00.260

Matt Nelson: So the the students should have a great kind of understanding of how we get to the point of scope and how we start to put things in practice. But I think your perspective will be super helpful on like.

26

00:06:00.390 --> 00:06:06.380

Matt Nelson: okay, we have kind of a defined list of items. Now we have to get started with.

27

00:06:06.390 --> 00:06:17.980

Matt Nelson: you know, implementation, which is in many cases kind of the step one or the easy step until we start to break stuff with interoperability testing. And then we have, of course, devnets and testnets.

28

00:06:18.060 --> 00:06:27.700

Matt Nelson: so I'll take a pause here. I'll let you intro, and then, if you'd like to start anywhere feel free. If not, I have some questions prepared that we can go through to discuss, but I'll turn over to you.

29

00:06:28.570 --> 00:06:38.200

Justin Florentine (Besu): Cool. Yeah. Hi, Justin Florentine. I'm an engineer on the Baseu team. You'll find me on socials as Robocop's gone mad, or some variant thereof.

30

00:06:38.260 --> 00:06:49.589

Justin Florentine (Besu): I've been working with consensus since 21 right around London. I think London was the first hard fork that I worked on. I worked on pretty much every hard fork since then, except for Shanghai.

31

00:06:49.760 --> 00:06:55.110

Justin Florentine (Besu): So that's you know, London, Paris. And now, cancun

32

00:06:55.680 --> 00:07:11.510

Justin Florentine (Besu):  you will find me hanging out in discords various times when it's time for interop testing ethicians, forums, etc., etc. That's where a lot of the hanging out and finding out what needs to be done where we're at, etc., etc. goes on.

33

00:07:11.540 --> 00:07:13.310

Justin Florentine (Besu): So yeah, happy to be here.

34

00:07:14.910 --> 00:07:25.940

Matt Nelson: Awesome, Justin. So let's think this, let's start these questions kind of in terms of of testing apparatus. Right. So zoom, we've had a

35

00:07:26.030 --> 00:07:34.290

Matt Nelson: rousing set of scoping discussions around the Cancun Hard Fork, and you are a core developer on the basic team who's been given

36

00:07:34.510 --> 00:07:43.560

Matt Nelson: a handful of things to implement as well as a date for a first devnet launch. What does that kind of look like when we're going through?

37

00:07:43.790 --> 00:07:54.269

Matt Nelson: again. You know, there's the broad specs, broad strokes applying the specs. But then we actually have to connect the nodes and get that started. What's kind of those first little steps there. And how do we start to kind of

38

00:07:54.470 --> 00:08:02.489

Matt Nelson: iteratively patch the clients to get them all talking to each other? Get them all working on the same page, and, you know, go from there.

39

00:08:03.490 --> 00:08:15.800

Justin Florentine (Besu): So there's a couple of different aspects that you want to think about when you're when you're when you're discussing how you get from decided specs to clients running and processing blocks on a network.

40

00:08:15.870 --> 00:08:28.660

Justin Florentine (Besu): The first is a traditional software engineering challenge. Right? So this is open source software, which means you don't necessarily have quite the rigorous top down software design and implementation that you would have elsewhere.

41

00:08:28.890 --> 00:08:50.330

Justin Florentine (Besu): So you need to have discussions with your community. You need to decide. You know what are the. You know we. We understand what the actual features to be delivered in a hard fork are, and the granularity you're given is the eips themselves. So there'll be a design document that'll express some sort of feature that we wanna add to ethereum? It's scheduled to be delivered in this hard fork. Cool?

42

00:08:50.330 --> 00:09:08.250

Justin Florentine (Besu): What are the software tasks that need to happen for that? Is there an area of the code that needs to be refactored? Is there a place where this obviously is a quick hit and will be easy to implement? Who is already familiar with that part of the code and wants to work on. So all of that needs to happen. As you're preparing for the hard work, and as you start delivering.

43

00:09:08.710 --> 00:09:13.890

Justin Florentine (Besu): you're going to be discussing with other client teams in discord

44

00:09:14.650 --> 00:09:19.049

Justin Florentine (Besu): how we know the various eips work. so there will be

45

00:09:19.090 --> 00:09:47.319

Justin Florentine (Besu): usually a series of tests that arrive in a number of different ways. We have reference tests. We have state tests. The big one these days is the hive tests, which is a full on systems test. It's actually running clients. It's interacting with them over the engine Apis to drive them from a test Genesis state to a head block that is theoretically past the fork that we're designing. It has all the features that we're trying to build.

46

00:09:47.320 --> 00:10:04.150

Justin Florentine (Besu): and there's a lot of discussion amongst the teams around that. So they will say, Hey, here's a tive test. Is this actually valid? Great? Ef does does a lot of investment on that. They spent a lot of time and effort on testing. We have really good test coverage cover coverage in these different dimensions.

47

00:10:04.170 --> 00:10:15.409

Justin Florentine (Besu): And that's and I think that's really the shelling point for a lot of getting this work done is the tests. The tests really do drive it. And they are granular enough that you can discuss it. And we implement these tests when they're passing.

48

00:10:15.410 --> 00:10:39.240

Justin Florentine (Besu): We discuss with folks when they're not most the time it's on us a lot of times we find things in the test that are either inaccurate or ambiguous, and sometimes it'll go back to the spec. So a lot of times. People have been joking lately like we're still making changes to the spec for Dan Coon, you know. Hey, we kind of are but a lot of these things are very, very small things. They're they're reducing ambiguities that developers may have run into.

49

00:10:39.360 --> 00:10:55.329

Justin Florentine (Besu): So that's you know. That's kind of the I think the the high vision of of how that works. You iterate on that stuff until we're all in a discord room somewhere, saying, Yeah, we're passing all these things, we feel good about it. What do we do next? Great, we're gonna build test network

50

00:10:55.450 --> 00:11:01.869

Justin Florentine (Besu): it'll be a completely fake network. The Ef will spin up a whole bunch of their devops stuff, they'd use it.

51

00:11:02.080 --> 00:11:21.590

Justin Florentine (Besu): Excessive automation on all of this. They can create these new networks. They will socialize that and say, like, Hey, we made a fake network. Here's a bunch of tools that we're actually running on it for people to watch. So when a new network comes out I'll be like, Hey, Matt? E stats is up over here. You can see how things are going, and they'll be an E stats implementation, and they will be running all the different versions of our clients

52

00:11:22.040 --> 00:11:41.400

Justin Florentine (Besu): when they run into an issue they'll contact whoever they've been working with as the point of contact for that for that hard fork. So some. It's nice for us to have one team member kind of quarterback that, and and try to coordinate that information and keep it moving. That could be anybody, any release? And so you know, that happens.

53

00:11:41.730 --> 00:11:48.869

Justin Florentine (Besu): we work the work, the issues that we run into on the debnets, we find the bugs. And again, it's really your standard Sdlc process at that point

54

00:11:49.640 --> 00:11:55.869

Justin Florentine (Besu): find an issue, report an issue. If you can fix it, fix it. Somebody else could help you fix it. Great, awesome

55

00:11:56.220 --> 00:12:03.200

Justin Florentine (Besu): and that's that's usually the first step is like the fully synthetic test nets the completely constructed one.

56

00:12:03.350 --> 00:12:25.389

Justin Florentine (Besu): Once we've done a few of those we feel really good about it, we'll say, like cool. Let's Shadow fork, a test network like a proper test network. So like girly a named test network, polesky sepolia, those are the those are the ones that we have today. Ripe girly. Bye, bye, this is the last. This is the last for off for girly, so say your goodbyes. Raise a glass.

57

00:12:25.890 --> 00:12:28.970

Justin Florentine (Besu): It's served as well. and

58

00:12:29.090 --> 00:12:40.569

Justin Florentine (Besu): we will take a shadow fork, which is a technique that we developed during the merge. Actually, I think, was the first time that we started doing that where we'll intentionally fork the network. So you'll have

59

00:12:41.090 --> 00:12:54.219

Justin Florentine (Besu): a much smaller subset that'll get real transactions, and it'll create its own blocks with the new rules for the Hard Fork while the other network is still running on the old rules. So, for instance, during the merge Mainet would keep

60

00:12:54.260 --> 00:12:56.440

Justin Florentine (Besu): chug it along on London specs.

61

00:12:56.540 --> 00:13:17.960

Justin Florentine (Besu): and we'd set up a whole bunch of networks, a whole bunch of nodes that are on that network, but now have paras specs, and they will intentionally fork off, and they'll continue to run valid transactions against valid main net state for as long as they can like. At some point these things decay. Because you're running contracts that they don't know about the new features. And they're gonna they're gonna start breaking it.

62

00:13:17.960 --> 00:13:27.270

Justin Florentine (Besu): But it's a really really helpful technique that we've developed that we've we're so happy with how it informed the merge that we're just gonna do it all the time. Now.

63

00:13:27.920 --> 00:13:32.120

Justin Florentine (Besu): So there was a lot of that for Shanghai. There's a lot of that going on right now.

64

00:13:32.140 --> 00:13:46.009

Justin Florentine (Besu): We have shadow forked girly a number of times until we were happy with it. And now we've actually fully forked girly. If you're running a note on gorily, and it's keeping up with head congratulations. You're running Dan Coon software.

65

00:13:46.600 --> 00:13:53.869

Justin Florentine (Besu): We then repeat that process for subsequent networks. Next up will be hulesky, and then sepolia

66

00:13:54.380 --> 00:13:57.940

Justin Florentine (Besu): I don't know if I have the more the order, right? It's the other way around. Yeah.

67

00:13:58.510 --> 00:14:03.830

Justin Florentine (Besu): Sopolo and Hillesky, and then we'll do shadow forks for me net and

68

00:14:04.190 --> 00:14:08.550

Justin Florentine (Besu): wash rinse. Repeat until we're super super confident that we're ready to get to main net.

69

00:14:09.190 --> 00:14:22.380

Justin Florentine (Besu):  yeah. So that's that's a big, complicated, very thorough process that we use to deploy new features on a very expensive network without without dropping

70

00:14:22.840 --> 00:14:24.520

Justin Florentine (Besu): customer transactions.

71

00:14:26.870 --> 00:14:37.970

Matt Nelson: Yeah, that's that's awesome overview. Tell me a little bit more about how the kind of collaborative testing process works. Mostly being because, you know, we're all kind of core developers

72

00:14:38.150 --> 00:14:50.030

Matt Nelson: to outside observers. It might seem that we're all we're we're kind of creating the tests we're creating the specs we are doing all of the testing ourselves. It's kind of like, you know.

73

00:14:50.540 --> 00:15:12.110

Matt Nelson: could seem like a single group is doing all this. But in reality it's a lot of different people. How does that kind of collaborative testing environment come about? You know, what are the orgs involved? And how does it kind of look from a perspective where some might say, Okay, no. It's actually just the same groups doing the same things kind of patting themselves on the back when in reality there's a huge diversity of

74

00:15:12.560 --> 00:15:14.849

Matt Nelson: stuff that goes into that testing in reality.

75

00:15:16.120 --> 00:15:17.780

Justin Florentine (Besu): Well,

76

00:15:17.980 --> 00:15:23.589

Justin Florentine (Besu): yeah. So we get contributions from the community. Each person

77

00:15:23.700 --> 00:15:45.899

Justin Florentine (Besu): providing what they're what they're best at. Right? So a lot of folks that are, familiar with driving Json, Rpc. Api's would be contributing to the hive tests right? Folks that are more interested or well versed with lower level Evm tests could be submitting reference tests. And those are those are very different. Kind of opposite ends of the spectrum.

78

00:15:47.100 --> 00:16:15.379

Justin Florentine (Besu): You know. So so you you could get contributions from just about anyone and it they just sort of get socialized and filtered amongst the other teams through, mostly discord. But all this stuff is tracked in version control. You know, there's a project out there for reference tests. There's a project out there for the hive tests, and those are really just traditional software management problems, right? So as folks create new issues or find issues or fix ambiguities.

79

00:16:15.530 --> 00:16:38.930

Justin Florentine (Besu): they create Prs, they get on to main. And then someone will say, Hey, Justin, that test that you were complaining about, that you thought we implemented wrong. Well, you were wrong, and here's how, and they'll have a test that you know clarifies the spec or fixes and ambiguity, etc., etc. And you just pull those tests. You run them against your your client software, and you move forward from there. And so you do that, you you.

80

00:16:39.380 --> 00:16:58.850

Justin Florentine (Besu): if or whoever's running the test, knows that that that was done, they'll pull main branch of your client, run it against their tests to confirm, and they'll continue doing that. So they, whoever whoever's running these tests is always staying very current on the bleeding edge of the corresponding clients that are being tested. So you have a pretty tight feedback loop.

81

00:16:58.850 --> 00:17:10.039

Justin Florentine (Besu): You'll hear something the next day, if like something on nightly went out and broke broke a test, because they're just constantly and automatically usually pulling those new client updates and running existing tests on.

82

00:17:11.920 --> 00:17:23.369

Matt Nelson: yeah, that's great. So I mean, I know that in context of what we've seen on main net, there have been a few bugs and clients, consensus issues that have actually stopped kind of nodes in the network.

83

00:17:23.390 --> 00:17:33.950

Matt Nelson: The reason I'm asking about this is because I think in Devnet's and testnets, it's a little bit different. How do we necessarily kind of look at consensus issues when there may not be

84

00:17:34.010 --> 00:17:42.649

Matt Nelson: a consensus among the clients? Do we always kind of defer to the tests? And in some cases right. The tests are written from perspective of

85

00:17:42.760 --> 00:17:59.230

Matt Nelson: kind of one team, often, or one clients implementation. How do we start from the building block where every block isn't valid, and then kind of slowly progress? These client specs because it's really very much like you said it. It might even be from one commit to the next.

86

00:17:59.250 --> 00:18:04.410

Matt Nelson: as far as, like the tip of a branch is concerned with Github that can cause an issue.

87

00:18:04.570 --> 00:18:26.680

Justin Florentine (Besu): So that happens through the the redundant design of the testing pipeline right? The fact that we're actually running these hive tests like I run high test locally against no network. Sometime it'll just be what the hive test run against a single instance of base, which is a very, very, very simple form of doing that, but it's easy to reproduce, and it's easy to iterate on. It's easy to repeat it over and over and over again. So

88

00:18:26.970 --> 00:18:39.910

Justin Florentine (Besu): once we go through that we go through the next layer and the next layer, and then you're doing. You know your shadow forking things, your shadow, forking testnets, etc., etc. You've done it so many times that it's very rare that

89

00:18:40.120 --> 00:18:48.909

Justin Florentine (Besu): You found a bug that halts the network right? Or you've you found like a really weird edge case or a

90

00:18:49.680 --> 00:18:59.779

Justin Florentine (Besu): spec issue like, those are the things that we really worry about is like it's the spec wrong. And in most of those cases, apart from like a proper test network.

91

00:19:00.270 --> 00:19:08.309

Justin Florentine (Besu): it doesn't matter if it's a shadow fork fine, you can. Just, you know. Let the Shadow Fork die and start over with your adjusted specs.

92

00:19:08.660 --> 00:19:10.520

Justin Florentine (Besu): So

93

00:19:11.040 --> 00:19:25.209

Justin Florentine (Besu): it it's it's a good question, because the stakes are really really high. And I think the answer is redundancy, like the answer is, we're just re really, really redundant. It's really, really important. And we're kind of fortunate that an open source community that we can just do that. I think if we were in a commercial sense.

94

00:19:25.210 --> 00:19:41.199

Justin Florentine (Besu): the cost benefit analysis would not fly past some being calendar and accounting, and they would tell you like, Oh, you're you're this is too redundant. You're you're you're you're wasting money, etc., etc. But you know it's it's live. There's no, there's no better way to do that. Redundancy is important.

95

00:19:44.450 --> 00:19:52.059

Matt Nelson: Yeah, redundancy is key, and we we definitely have redundancy among these test test nets, where we have

96

00:19:52.400 --> 00:19:56.709

Matt Nelson: tens of clients of each combination size, shape.

97

00:19:57.350 --> 00:20:26.729

Matt Nelson:  very cool. I wanted to take 2 s to see if we have any questions that folks on the phone wanted to provide. Again, the context for today's discussion is testing and implementation for the hardworks. And as I mentioned the intro, some of you might not have been on by that point that Justin has been working on the basic team to get cancun developed, tested and shipped. So anything in that context. But you also have a core developer on the phone. Anything else you wanna chat about is is likely fair game here.

98

00:20:26.900 --> 00:20:30.229

Matt Nelson: If not, I will keep probing, probing with questions.

99

00:20:31.790 --> 00:20:41.889

Matt Nelson: also the eips that we discussed where there was potentially some ambiguity. I know we went through the eips themselves in depth. So you have more detailed spec questions that I was either Iffy

100

00:20:41.990 --> 00:20:43.090

Matt Nelson: or

101

00:20:43.340 --> 00:20:49.679

Matt Nelson:  you know we we have Justin here who worked on a lot of those specs themselves, so that'd be great.

102

00:20:50.060 --> 00:20:51.170

Matt Nelson: But hmm.

103

00:21:00.000 --> 00:21:02.929

Matt Nelson: alright! I got another question for you while we wait here, Justin.

104

00:21:03.090 --> 00:21:09.810

Matt Nelson: tell us about the girly fork post mortem. We very briefly walked through what happened.

105

00:21:10.010 --> 00:21:20.889

Matt Nelson: As far as the prism client bug and potential nethermine client bug for the last fork. But we actually didn't have enough time for a proper analysis, because girly was forked, maybe

106

00:21:21.040 --> 00:21:31.449

Matt Nelson: a handful of hours before our call last time. So do you have anything that any lessons learned or anything that would be, you know, interesting in context of this discussion that we learned from that hard fork, how we're going to apply those.

107

00:21:32.010 --> 00:21:33.520

Yeah. So

108

00:21:34.040 --> 00:21:43.039

Justin Florentine (Besu): now you forgive me. I was on vacation this weekend and the day before, so I didn't go too deep into the root causes of what we ran into. But this was

109

00:21:43.390 --> 00:21:57.420

Justin Florentine (Besu): the important question is is like, Oh, how do we miss something right here, because I just went on and on about redundancy, and we're still found something that broke on a test net with, you know, one of our one of our clients. That was interesting, because

110

00:21:59.030 --> 00:22:12.330

Justin Florentine (Besu): it it probably should have showed up in one of the shadow forks. We're a little suspicious as to why it didn't, but the nature of the bug is such that it would not have showed up in hive. It would not have showed up in

111

00:22:12.670 --> 00:22:17.539

Justin Florentine (Besu): The. You know, the ephemeral networks that we're spinning up because my understanding of what

112

00:22:17.800 --> 00:22:27.489

Justin Florentine (Besu): prism ran into had to do with historical receipts that were older than a certain point. So so they had a situation where.

113

00:22:28.100 --> 00:22:53.959

Justin Florentine (Besu): when in our smaller networks, we were creating the 4.4 dancoon, a little too close to origin or to to Genesis. And so we weren't hitting certain paths in the code that are a little bit more relevant when you have a much longer distance there. So that was kind of a a weird edge case that we're gonna have to really consider how we cover with our tests because you don't wanna have like.

114

00:22:54.200 --> 00:23:14.820

Justin Florentine (Besu): you don't wanna have days between your genesis for your test network when you actually hit the thing that you want to test, you know. So we'll have to take a closer look at that, and just a and and realize well, was it a length of the blockchain issue that exacerbated this, or was it a state sized thing, or whatever? It's probably the former, because it had to do the

115

00:23:14.820 --> 00:23:25.940

Justin Florentine (Besu): something with the receipts. I don't. I don't quite recall off the top of my head. But but it would be a new test scenario that we would have to introduce there. To specifically target that.

116

00:23:26.340 --> 00:23:27.949

Justin Florentine (Besu): so yeah, interesting.

117

00:23:28.900 --> 00:23:52.459

Matt Nelson: Yeah, I think that's the the prism. One was especially interesting because this it was sort of an optional spec implementation detail around the way we index blobs, which is part of the reason why we have redundancy, because the spec is intentionally left a little bit ambiguous in certain instances to allow client diversity to solve some of these problems just by virtue of

118

00:23:52.560 --> 00:24:09.070

Matt Nelson: whomever is thinking over the spec in a slightly different way. We do this in many ways by the ways that the Cls will handle Mev blocks or block production in general. Some of them have the. They've implemented different kind of censorship, resistant overrides for these things that have different timeouts.

119

00:24:09.070 --> 00:24:23.010

Matt Nelson: different ways that they kick in and then different present present presentations to the user. But the I remember specifically at a a core Devs call where we said, no, we do not want to codify this in the spec intentionally, to give

120

00:24:23.030 --> 00:24:36.379

Matt Nelson: openness, so that the clients can be a little different than each other, because if we had an extremely rigid spec, they would all look and act identical, which means they would all present potential spec challenges in the same way.

121

00:24:36.630 --> 00:24:49.389

Matt Nelson: so in this instance, it can create kind of issues where clients will have a little bit, maybe too ambiguous or loose interpretation of the spec, and can cause issues. But in in general it's a kind of a good thing for sure.

122

00:24:51.970 --> 00:25:10.409

Matt Nelson: Okay, we got a question in chat from Tj. The question is, what is the process for a new client like ref to be considered legit enough to be an official client. Couldn't any random group of individuals create an execution or consensus client? Obviously we don't want pro poor performing clients to drag down the rest of the teams during the upgrade process.

123

00:25:10.490 --> 00:25:14.150

Matt Nelson: So I'll give a 2 s version. Then I'll kick to Justin

124

00:25:14.750 --> 00:25:16.549

Matt Nelson: In many instances

125

00:25:16.720 --> 00:25:33.780

Matt Nelson: we kind of just say, Hey, if you can keep up with the status quo welcome, we're seeing new consensus and execution clients like ethereum js and ref, and on the consensus side we have a new client called Grandine, which actually produced an invalid block

126

00:25:33.780 --> 00:26:02.259

Matt Nelson: that tripped up a lot of the other clients on on some of these forks. So in reality, I think we we test against a common denominator. We don't really have a criteria. So if people are willing to run your node that can follow the tip of the chain. You basically have a good enough client in many instances. That's an oversimplification. But in the case of things like theium js, and Ref, I think that's absolutely the case. And they continue to push their performance, profile and functionality profile

127

00:26:02.270 --> 00:26:03.460

Matt Nelson: over time.

128

00:26:03.640 --> 00:26:15.049

Matt Nelson: But both of them went through the Fork Transition, and if users want to run that client they can, and if they want to validate with that client they can. I think that a lot of the kind of voice on the core development

129

00:26:15.060 --> 00:26:20.580

Matt Nelson: space comes from expertise, but also representation right? I think the Get team

130

00:26:20.900 --> 00:26:38.890

Matt Nelson: has a big portion of voice on core devs because they represent on the execution layer at least a hugely outsized proportion of users that they want to protect and make sure, have the best functionality available to them, running the client, etc. So that's my take, Justin. Maybe you have a different or more nuanced one there.

131

00:26:39.300 --> 00:26:58.009

Justin Florentine (Besu): II think, might take us fairly similar to that. To add a little nuance, I would say that if you're producing a new client. The good news is that there is a ton of stuff that you can do up to, and prior to actually proposing new blocks on the chain.

132

00:26:58.050 --> 00:27:06.709

Justin Florentine (Besu): and you can do that stuff on all the networks and all the way up to May that and you can measure your performance, and you can measure it against all the other clients

133

00:27:07.040 --> 00:27:09.380

Justin Florentine (Besu): to go further than I think

134

00:27:09.630 --> 00:27:37.869

Justin Florentine (Besu): you know. If I was, if I was endorsing a new client I would wanna see all of that. I would wanna see all of them participating the way Matt suggested, and keeping it up with it. And then I would wanna see all of the lower level testing things that I spoke about before executed and including proposals and including and creating new things for the blockchain. So that includes results from Edm tests running all the state tests and making sure that it was super. You know.

135

00:27:38.540 --> 00:27:52.639

Justin Florentine (Besu): it's making sure that it had been exposed to all the weird edge cases and stuff that we bake into those tests as well as checking its performance to making it to to make sure that you know some of the attacks that we're worried about that would occupy gas

136

00:27:52.940 --> 00:28:00.010

Justin Florentine (Besu): are analogous to all the other clients right like you don't want to find a gas mispricing issue that's specific to one client.

137

00:28:00.110 --> 00:28:06.779

Justin Florentine (Besu): And so there's there's a lot of tests that you would want to do. And then, you know, you've got the proposal stuff, too.

138

00:28:07.070 --> 00:28:15.020

Justin Florentine (Besu): so how do you? How do you create blocks? How long does it take you to create a block all all that stuff. So I think that

139

00:28:15.510 --> 00:28:27.719

Justin Florentine (Besu): it would be. I don't think it would be that difficult to say like, Oh, this client, yeah, this is a legit client like we have all the processes in place we have where we're used to running hive tests against everything. The results are quite comparable.

140

00:28:27.720 --> 00:28:51.289

Justin Florentine (Besu): I know that there's been a discussion ongoing recently about performance. And how do we compare it? And I don't think that's gonna be too hard. We're gonna come to a consensus pretty quickly on that, it'll be documented and reproducible across clients. The hive tests are really good test bed for that. And so once. That's once that exists. New clients. You just gotta you will draw bar somewhere. Says you must be this high to ride on main net and

141

00:28:51.560 --> 00:29:13.619

Justin Florentine (Besu): there's nothing we can do about it. If they don't, you know. We'll we'll there'll be a social consensus. Maybe some social prefer like, hey? Don't run that because it actually, when your turn comes up to propose, might not get a legit block, etc. So that's just common evaluating open source software and waiting for that to shake out through social consensus.

142

00:29:14.920 --> 00:29:24.849

Matt Nelson: There's also the gas limit to consider in this sense that and other clients can shift the gas limit, but they cannot outright change it. So if you're

143

00:29:25.320 --> 00:29:27.469

Matt Nelson: if your client cannot

144

00:29:27.490 --> 00:29:34.789

Matt Nelson: execute roughly 30 million gas and 12 s, you probably aren't going to be able to keep up with the chain.

145

00:29:34.990 --> 00:29:47.210

Matt Nelson: That's why I think it's kind of fun when you look at the python specs to like run those like State tests against the execution layer specifications, which is just like python pseudocode. And you can see, like, you know.

146

00:29:47.380 --> 00:30:01.539

Matt Nelson: the base suit and Geth numbers in the number of milliseconds. And then you have, like, 15 s for some of the python code. So I think that it's kind of like, yeah to Justin's point, what what works, as far as social consensus is concerned, what works in terms of the specs, and how

147

00:30:01.750 --> 00:30:07.930

Matt Nelson: performant is your client to follow the chain, and the rest is kind of social stuff.

148

00:30:08.790 --> 00:30:14.250

Matt Nelson: That was a great question. again, please feel free to post more in the chat.

149

00:30:15.240 --> 00:30:24.919

Matt Nelson:  okay, let me take a look back at my question list here. 1 s.

150

00:30:32.100 --> 00:30:34.250

Matt Nelson: Okay, here's a good one, I think.

151

00:30:35.080 --> 00:30:46.619

Matt Nelson: So you've mentioned kind of late breaking spec changes how, as as kind of developers with these late breaking spec changes.

152

00:30:48.250 --> 00:30:56.559

Matt Nelson: how are we kind of squaring up the modifications that need to be done at the implementation level versus

153

00:30:56.720 --> 00:31:00.599

Matt Nelson: the specification. If if you're following my question.

154

00:31:02.590 --> 00:31:08.070

Matt Nelson: is it all the clients think this is this is silly, let's change it, or

155

00:31:08.240 --> 00:31:18.639

Hmm, because I think that a lot of the problem that ethereum had before the merge was that the specification was primarily driven by developments in the Geth client in general

156

00:31:19.140 --> 00:31:21.529

but now we have this different landscape.

157

00:31:22.040 --> 00:31:27.420

Matt Nelson: How does that kind of how does that new blurred line make sense to to a core? Dev!

158

00:31:29.120 --> 00:31:42.350

Justin Florentine (Besu):  That's one of those questions that's hard to answer. Unless you've got your elbows in the code like, if you're super deep in the code, you can maybe in like 5, 10 min of discussion with your team. You can say like

159

00:31:42.370 --> 00:31:46.010

Justin Florentine (Besu): that would really be hard for us to implement, and

160

00:31:46.020 --> 00:31:54.399

Justin Florentine (Besu): it would be by hard. That generally means we would have to refactor a bunch of stuff to actually implement that change in the spec.

161

00:31:54.650 --> 00:32:01.450

Justin Florentine (Besu): And here's the additional testing and performance impacts. We would want to be clear about

162

00:32:01.650 --> 00:32:06.989

Justin Florentine (Besu): before before submitting that back and merging that in and changing the way that that works.

163

00:32:07.910 --> 00:32:11.060

Justin Florentine (Besu): Does that answer your question, Matt.

164

00:32:12.110 --> 00:32:30.599

Matt Nelson: Yeah, it does. I think that. Yeah, the in my mind, it's like we have a spec that is intended to be somewhat inflexible. like, where and how does our the teams choose to kind of bend or push on that spec versus bend or push on the client? Because I think you're right like

165

00:32:31.400 --> 00:32:49.190

Matt Nelson: us. Let's think of it this way, right? Us saying we need to refactor a bunch of code in order to meet a spec that is actually well designed versus the opposite, you know. We don't wanna say that that's not a fun thing to say. No, of course not, of course not.

166

00:32:49.420 --> 00:32:55.209

Justin Florentine (Besu): Cause. Cause if you don't, if if that's not really a concern, or the answer is almost always sure, go ahead, change it.

167

00:32:55.420 --> 00:33:06.590

Justin Florentine (Besu): It's like there's a there's a a question being kicked around about renaming some fields for block gas use or data gas user. I forget what I forget what it was.

168

00:33:06.860 --> 00:33:15.930

Justin Florentine (Besu): it's it's kind of just a you know, naming things is important, and it's hard. But once that decision is made, it's not gonna be that difficult for anybody anything to get changed, you know.

169

00:33:16.660 --> 00:33:18.420

Matt Nelson: Yeah. Got you there?

170

00:33:19.130 --> 00:33:38.089

Matt Nelson: This is more, a little bit of a more fun question for you. Where do you see, the community kind of coming into play and coming into this testing and implementation process. Because I think we, we have a lot of the initial stuff is done in the core devs kind of sphere a little bit

171

00:33:38.520 --> 00:33:59.579

Matt Nelson: you know. Hush! As we work things out. But then we slowly start to layer in more and more groups, like institutional stakers, communities like East Staker, and even regular users who are like, I'm experiencing some weird client bugs on girly. You know what kind of fun or cooperative or kind of uplifting

172

00:33:59.720 --> 00:34:10.080

Matt Nelson: interactions did you see there? And where do you see? Also incentives to have community members get involved in that process just as individuals or small groups.

173

00:34:11.510 --> 00:34:22.420

Justin Florentine (Besu): I wish I had a better answer for that. But the the real incentive is social. if you're if you're nice enough to be running a test set client.

174

00:34:22.440 --> 00:34:25.179

Justin Florentine (Besu):  Then

175

00:34:25.210 --> 00:34:49.049

Justin Florentine (Besu): you got some interesting people to talk about it with on on the various discords, etc. You're gonna be much further down the stack. You're gonna be, probably in more contact with core developers things like that. It's really really awesome. When our users choose to do that, they have no financial incentives to do that. They're using compute resources to S to sync up with.

176

00:34:49.080 --> 00:35:06.339

Justin Florentine (Besu): you know, girly, which is a very large chain. You know, moving forward. That's gonna get sunset. No, it'll still be. Blobs will be there. They're they're still gonna have the same requirements. Hopefully, that main that's gonna have. The state management will be a lot, you know, a lot smaller. But they're still gonna have to, you know.

177

00:35:06.580 --> 00:35:17.410

Justin Florentine (Besu): They're gonna have to consider their their, their hardware resources. And that's a nice donation. for them to be giving back to the community. And

178

00:35:18.120 --> 00:35:45.129

Justin Florentine (Besu): it's it's it's super super helpful. Right? Because we get we get into these. We get. We get blinders on sometimes, and it's hard to. It's hard to avoid that. And it's very easy for us to automate all of our testing and deployment of our nodes, etc., etc., and they all have the exact same spec out machine, because they're all running in azure aws or whatever. And you don't really have the hey? I tried to run girly on my old laptop the other day.

179

00:35:45.400 --> 00:35:57.809

Justin Florentine (Besu): And this is some weird stuff that happened like, Oh, well, that's cool. Cause that would actually happen on main net. And that's actually kind of hard for us to to to simulate and reproduce. So it's so it's like super helpful.

180

00:35:58.430 --> 00:36:12.190

Justin Florentine (Besu): I would love to see like a stupid girlie tricks award, or a Po app, or something like that, where, like somebody just tried to do something weird and silly on on our test nuts. And you know, build a little bit of a community about around that.

181

00:36:12.430 --> 00:36:23.550

Justin Florentine (Besu): You know, people try to run doom on refrigerators. Why aren't we trying to run, you know, ethereum on on weird stuff? I think that would be that would be fun. That would be that would be kind of

182

00:36:24.220 --> 00:36:29.170

Justin Florentine (Besu): I don't know. I think it would be fun. I think our community would think it would be fun, but that's and that's really what would matter.

183

00:36:29.500 --> 00:36:33.610

Matt Nelson: Zoom in the ebm. Sure.

184

00:36:34.100 --> 00:36:42.690

Justin Florentine (Besu):  so yeah, if you're if you're running, if you're already going through the trouble to to to solo, stake and run things from home. Throw another network on there.

185

00:36:44.810 --> 00:36:59.439

Matt Nelson: Awesome, awesome. Alright. We got another question in the chat here from Tj. This one's a fun one, because I think it's actually very revealing. Declined teams start working on implementing future eips, even if they're not necessarily going to be included in upcoming upgrades.

186

00:36:59.590 --> 00:37:05.740

Matt Nelson: or even sorry parentheses, or even eips that do not have popular support from other teams.

187

00:37:07.300 --> 00:37:23.959

Matt Nelson: As an example, euf could be shipped in Prague, Electra, and the Ap. Specs are mostly written will. Most of the clients have done preliminary work to implement eips such as those needed for ef in advance for do client teams have code written or possible future apips that aren't up for inclusion.

188

00:37:26.230 --> 00:37:28.320

Justin Florentine (Besu): Yeah. Yep.

189

00:37:28.460 --> 00:37:32.080

Justin Florentine (Besu): Yup, eip is very often

190

00:37:32.100 --> 00:37:38.740

Justin Florentine (Besu): coexist alongside implementations that are that are in flight, and that's a good thing, because it kind of reinforms the design.

191

00:37:39.140 --> 00:37:52.980

Justin Florentine (Besu): you know, there there will. Eips are notoriously hard to finalize. In fact, there's you could probably go through the eip database and find tons of them that are, you know, marked still in draft, or whatever that have already been implemented and shipped like

192

00:37:53.410 --> 00:38:02.649

Justin Florentine (Besu): they're probably just marked incorrectly, but I think the spirit of that is not too inaccurate. Like, I said, these things keep changing over over time.

193

00:38:02.960 --> 00:38:15.280

Justin Florentine (Besu):  so yeah, so yeah, we we will campaign for something. I mean, that's a good way to put pressure on eip, you think is good for the good, for the network is to implement it. I mean being able to say.

194

00:38:15.660 --> 00:38:25.860

Justin Florentine (Besu): You know, basic team thinks we should ship eof. By the way, we've already got it implemented is a it's a great way to to to to get what you want out there.

195

00:38:26.520 --> 00:38:32.439

Justin Florentine (Besu): so so yeah, that that definitely happens, I think what's really important, though, is that

196

00:38:33.100 --> 00:38:37.519

Justin Florentine (Besu): prototyping an eip as it's being developed

197

00:38:37.620 --> 00:38:46.610

Justin Florentine (Besu): gives clients first, mover advantages right? So if everybody that's designing eips prototypes them all in Geth.

198

00:38:46.890 --> 00:38:51.369

Justin Florentine (Besu): Geth will always be able to say we already have an implementation for this, we should ship it.

199

00:38:51.810 --> 00:39:13.519

Justin Florentine (Besu): and that's a really subtle way to encourage client diversity is to not just run other clients, but prototype on other clients. Give that first mover advantage to other clients so that they can say, Yeah, we've got this implemented already. Have other clients coming to that team to say like, how did you implement it? What tips do you have.

200

00:39:13.520 --> 00:39:22.640

Justin Florentine (Besu): you know? Did did implementing Verko go better for you because you already have a bonsai implementation in your your data store.

201

00:39:23.060 --> 00:39:25.760

Justin Florentine (Besu): So yeah, it's

202

00:39:26.240 --> 00:39:31.989

Justin Florentine (Besu): it's a, it's a, it's a bit of a weird flywheel feedback loop that happens there.

203

00:39:38.510 --> 00:39:43.150

Matt Nelson: Awesome. Great question. Yeah, I'd have to add as well that I think

204

00:39:44.280 --> 00:39:51.329

Matt Nelson: it's not necessarily an addition. But the punctuation is that like clients will work on pick these Ips that they're passionate about, or that their users are.

205

00:39:51.400 --> 00:40:08.879

Matt Nelson: you know, products are passionate about and like they will just go ahead and build stuff in order to push things through. We've discussed this many times on this this series is that in order to champion stuff, you need a little more than just a good idea. So client teams will absolutely work with external contributors and other groups to

206

00:40:09.390 --> 00:40:15.190

Matt Nelson: oftentimes provide advice so that others can implement the Ips that they're working on.

207

00:40:15.370 --> 00:40:16.390

Matt Nelson: And

208

00:40:16.810 --> 00:40:33.280

Matt Nelson: a lot of the times these reference implementations end up in Geth. But sometimes you've have users proposing Ips that have expertise in Java, or, you know, Dotnet, or go, or different languages. And so we end up with a variety of reference implementations. But those are definitely super interesting here.

209

00:40:33.780 --> 00:40:39.220

Matt Nelson:  Any other questions in the chat? I

210

00:40:39.490 --> 00:40:48.420

Matt Nelson: mostly it will just keep going down my list here. We also have about 20 min left. It could probably duck out a little bit early.

211

00:40:49.670 --> 00:40:53.990

Matt Nelson: give another chance to the peanut gallery.

212

00:41:01.920 --> 00:41:07.220

Matt Nelson: Okay, here's a good question, Justin. What has been the most challenging.

213

00:41:07.430 --> 00:41:16.639

Matt Nelson: frustrating, or rewarding part of your participation in this testing experience. So you can either go good good news, bad news, or

214

00:41:16.850 --> 00:41:17.820

Matt Nelson: we're capable.

215

00:41:22.110 --> 00:41:26.179

Justin Florentine (Besu): Well, testing in particular.

216

00:41:26.320 --> 00:41:30.250

Justin Florentine (Besu): you know, it's weird cause I don't really consider myself a tester like

217

00:41:30.390 --> 00:41:37.249

Justin Florentine (Besu): I consider myself sort of like the customer for the tests. I think that

218

00:41:37.390 --> 00:41:47.899

Justin Florentine (Besu): you know, for as far as like a really rewarding technical experience was seeing, seeing the utility of the hive tests improve and the quality of them improve over time.

219

00:41:48.530 --> 00:42:11.780

Justin Florentine (Besu): There is quickly becoming kind of the de facto way to send somebody a bug report. I think I could see like in a year from now there'll be very, very easy ways to do that, and to say, like, Hey, I think this is an issue in in the bug. Okay, where's the hive test right? And you can run it. You can isolate your clients. It spins up kind of a small little docker network.

220

00:42:11.890 --> 00:42:22.760

Justin Florentine (Besu): It's it's it's a really good piece of infrastructure. I think that has a lot of legs, and it's so easy to automate your testing and so many. so many different ways, but also so many different layers of precision.

221

00:42:23.220 --> 00:42:40.870

Justin Florentine (Besu): And and and that's really the the general purpose. One. II think the hive tests really are the right balance between granularity, repeatability, modularity, being able to kind of point it easily at different clients and different networks, and how they're set up.

222

00:42:40.870 --> 00:43:09.319

Justin Florentine (Besu): and that's not to belittle or say like, Oh, the state tests are not less important. There's those are actually just as important because they do the opposite right. They isolate just the evm, and it's very easy to get a very specific trace back out of it when you run into an issue. And it's very easy to inject very specific pieces of evm coder transactions, or whatever, and point them in a specific piece of state. There's there's other types of testing that have a very different granularity that are equally useful for totally different reasons.

223

00:43:09.320 --> 00:43:17.950

Justin Florentine (Besu): So that I think the diversity of scope of the testing techniques that we have is really really cool to see and really cool, to see how

224

00:43:18.560 --> 00:43:25.899

Justin Florentine (Besu): how, is just making all the developers better. I know. I mean, I should just speak for myself, like I think it's making me better as a developer because

225

00:43:25.900 --> 00:43:49.729

Justin Florentine (Besu): I get frustrated personally when I have to load too big of a model into my head, and I'm always looking for ways to narrow it down. Narrow down, narrow it down just because you know the way that I think I don't have a great memory. I don't have as much experiences of a lot of other people, and it takes time for me to build up those sense memories and intuitions about where to find code or where a problem could be, etc. So, having these different granularities of tests.

226

00:43:49.730 --> 00:44:05.370

Justin Florentine (Besu): speed me up as a developer, and I think speed us up as a team. So I think that's that's been really, really cool to see. I think that the the the shadow forking. I still don't I? Still, sometimes I think I'm like, Oh, man, that's such a good idea like when we started doing that for for main net. I was like.

227

00:44:05.440 --> 00:44:26.370

Justin Florentine (Besu): man. That's that's really a great, great test. Cause it's it's like doing it live. It's like just running it test. It's it's testing in production. And so that's that's really cool. I was really excited when we when we did that it gave me a ton more confidence that the merge was gonna go. Well, and I'm glad to see that it's gotten baked into every hard forks since. And it's just standard operating procedure for us now.

228

00:44:27.260 --> 00:44:35.270

Matt Nelson: So yeah, yeah. I think that the even since the for even since I started working on network upgrades with the merge

229

00:44:35.710 --> 00:44:42.820

Matt Nelson: Shanghai and then cancun have increasingly become more automated and more procedural, which I think is

230

00:44:44.050 --> 00:44:59.020

Matt Nelson: like nice to see for a decentralized community, because there's so many procedures and things like you said, that have to be redundant. That could be missed. That could be gaps in testing that, I think. As we kind of get used to working with 10 client teams and more. And all this other stuff.

231

00:44:59.350 --> 00:45:07.050

Matt Nelson: That it's it's very heartening to see the progress. Okay, let's see, here

232

00:45:08.260 --> 00:45:09.380

Matt Nelson: we have

233

00:45:09.840 --> 00:45:15.570

Matt Nelson: again a little over 15 min left. We don't need to use all that time. I mostly have more

234

00:45:15.960 --> 00:45:21.390

Matt Nelson: basic questions, if we have any, from the group here for Justin.

235

00:45:28.190 --> 00:45:40.209

Matt Nelson:  alright, you gave us a good, a good, a good one there, like a a positive note. What about what do you find the most difficult or frustrating part of

236

00:45:40.250 --> 00:45:43.540

Matt Nelson: working on these network upgrades as a developer?

237

00:45:45.660 --> 00:45:58.190

Justin Florentine (Besu):  I mean, there's always that fear right? The stakes are the stakes are just really high. I don't know that that's specific to the network upgrades or how they're gonna work. It's just working on like a

238

00:45:58.200 --> 00:46:05.930

Justin Florentine (Besu): you know. What are we at? Like a 200, some 1 billion dollar network? I don't even know where we're at as far as Market Cap these days.

239

00:46:05.980 --> 00:46:08.540

Justin Florentine (Besu): you know. So that kind of sucks.

240

00:46:08.930 --> 00:46:10.110

Justin Florentine (Besu): I think.

241

00:46:13.000 --> 00:46:15.200

Justin Florentine (Besu): Gosh! I don't know

242

00:46:16.020 --> 00:46:18.090

Justin Florentine (Besu): what what could be better.

243

00:46:19.580 --> 00:46:30.849

Justin Florentine (Besu): I you know that. So so the the diversity of testing is, you know, probably cuts both ways right? It's like, well, where? Where you think you find an issue. Okay, can you send me a test cool. In what format?

244

00:46:31.020 --> 00:46:39.829

Justin Florentine (Besu): Okay? Well, where do I find the tools to do that? I don't know. So now I need to like walk you through. I got a report the other day that was

245

00:46:40.330 --> 00:47:07.450

Justin Florentine (Besu): it was. I forget exactly the test format, but it was a it was a I think it was a more guest specific test format, and it hadn't been translated into something that bases evm tool could execute. And that was, that's kind of a that's friction, right? That's friction in your testing process, friction in your development process where you need to be like. Oh, now I need to go learn this other tool. So I can convert its output into something that I can run through my tool before I can even start doing my job and analyzing.

246

00:47:07.450 --> 00:47:23.489

Justin Florentine (Besu): What is the problem that you found analyzing the traces? Comparing the traces like comparing traces between Cvm's is still not something that we've really standardized. And II think that's a problem. I think that's a huge area for improvement, because the point of traces is to compare them like

247

00:47:23.890 --> 00:47:46.239

Justin Florentine (Besu): it's it's you. Can. You can. The trace will tell you a lot about your evm in isolation, and that's fine. But so did the code that you were looking at. It's even more useful to be able to say like very quickly, I don't have to read and understand Guest code. I can pull that trace. And literally I should be able to do a diff on it like I should be able to compare them with a tool that says like, Hey, here's where they diverge, and how they diverge, and why?

248

00:47:46.290 --> 00:47:47.640

Justin Florentine (Besu): So

249

00:47:48.560 --> 00:47:58.100

Justin Florentine (Besu): getting that next step? To really make that process better, I think, would be, would be a big improvement. That's not. That's not fun to do when you're when you're actually trying to chase down an Evm bug.

250

00:48:00.260 --> 00:48:10.199

Matt Nelson: And we all know those notorious knowing you. That is as bad as it probably will be on this call. So that's fine.

251

00:48:10.840 --> 00:48:19.710

Matt Nelson:  okay, folks, I'll give one more chance for any last questions. If not, I think we'll give everybody an additional 10 min back to their day.

252

00:48:30.510 --> 00:48:33.990

Matt Nelson: Anything coming in chat? We'll give you just a second.

253

00:48:45.710 --> 00:49:02.920

Matt Nelson: Okay, it looks like that, is it? Thank you again, Justin, for coming and bringing your perspective. It's super valuable. This course, I'm hoping will remain relevant for tons of time to come, because we will continue to upgrade Aetherium, and we will continue to have to test those upgrades.

254

00:49:03.400 --> 00:49:05.589

Matt Nelson: So thank you again, Justin, for your time.

255

00:49:05.760 --> 00:49:07.460

Justin Florentine (Besu): Happy to be here. It was a blast.

256

00:49:07.850 --> 00:49:15.429

Matt Nelson: Alright! Some housekeeping folks, I believe. Our next lecture is the

257

00:49:17.470 --> 00:49:26.949

Matt Nelson: February, January 30 first, so we have nothing this week, and then we will return on the Wednesday, the 30 first at 90'clock, Pacific time, or 12 Eastern.

258

00:49:27.040 --> 00:49:37.369

Matt Nelson: and we will have some guest speakers the following week. There. This will be our last lecture. So make sure to mark your calendars. We'll be discussing

259

00:49:38.270 --> 00:49:51.529

Matt Nelson: maybe some more technical details on how to kind of get literally involved in testing on fork to networks so we might even take some look at early code or girly clients. I might have to sync up some early client for

260

00:49:51.570 --> 00:49:52.770

Matt Nelson: the lecture

261

00:49:53.060 --> 00:50:05.599

Matt Nelson: either way. Thank you again for your time today. And if you have any additional questions that pop in your mind that you want answered later on. I know where to find Justin. So please feel free to shoot me an email, and we can get an answer.

262

00:50:05.910 --> 00:50:07.279

Matt Nelson: But thanks again. Everybody

263

00:50:09.160 --> 00:50:10.000

Justin Florentine (Besu): see folks.


Supplemental Resources

Proceeds from collectibles editions of this post will be distributed as follows:

100% to Education DAO Optimism Treasury (0xbB2aC298f247e1FB5Fc3c4Fa40A92462a7FAAB85)

Loading...
highlight
Collect this post to permanently own it.
Wiki of Web3 logo
Subscribe to Wiki of Web3 and never miss a post.
#ethereum#lectures/seminars#courses