Ethereum Protocol Fellowship (EPF) Cohort 7 — Applications open until May 13

RPC Standards #025

2026-04-20 Agenda: #2029 canonical JSON

Transcript

00:05:18
Mercy Boma Naps-Nkari:Okay, good afternoon, everyone. I guess we can start, and then if Felice joins, that would be great.
00:05:32
Mercy Boma Naps-Nkari:Let me share the link to the agenda for today, and then probably share my screen.
00:05:43
Mercy Boma Naps-Nkari:So, since, Sina, you had something on the chat. I don't know the… you added something to the agenda. Do you want to say something about it?
00:05:54
Simsonraj Easvarasakthi:Yeah, hey, Mercy. Yeah, I did create the PR,
00:06:00
Simsonraj Easvarasakthi:this is, like, an initial version. It's not fully polished yet, but I would really like to Geth some feedback before…
00:06:08
Simsonraj Easvarasakthi:I finished this.
00:06:10
Simsonraj Easvarasakthi:This is a little bit nuanced, because, these are testing the negative conditions, and I'm not able to test every single error code with, you know, consistently replicating across every client.
00:06:22
Simsonraj Easvarasakthi:So, it just basically added few error codes that's in the description, initially to start with.
00:06:29
Simsonraj Easvarasakthi:And then we can slowly add and slowly migrate, or add capacity to the Hive test to support all these error codes.
00:06:41
Simsonraj Easvarasakthi:So I was just, wondering if anyone would…
00:06:44
Simsonraj Easvarasakthi:Take an initial look at it, and leave some comments and reviews.
00:06:49
Mercy Boma Naps-Nkari:Okay, let me share the link to the PR, to the chat.
00:06:53
Simsonraj Easvarasakthi:Thank you, Lucy.
00:06:55
Mercy Boma Naps-Nkari:The problem is, I don't really know how my… What was it called?
00:07:01
Mercy Boma Naps-Nkari:Zoom works, then I can't find the chat.
00:07:05
Simsonraj Easvarasakthi:No worries, I can… I can paste it.
00:07:07
Simsonraj Easvarasakthi:Let me paste it here.
00:07:10
Mercy Boma Naps-Nkari:I really don't know what's happening.
00:07:19
Simsonraj Easvarasakthi:Okay, thank you, I just wasted.
00:07:23
Mercy Boma Naps-Nkari:But can you still see my screen? Okay, yeah.
00:07:25
Simsonraj Easvarasakthi:Yeah, yeah, we can, yeah.
00:07:28
Mercy Boma Naps-Nkari:So, I don't know, do anyone have anything in respect to this PR? Although we don't have, Felix here, because he's, like, the…
00:07:38
Mercy Boma Naps-Nkari:The manufacturer.
00:07:39
Simsonraj Easvarasakthi:And I can probably summarize this in, like, really short. So, I'm adding a new error code, it's a replacement transaction enterprise.
00:07:48
Simsonraj Easvarasakthi:And I also added, test, generators for those. And, still keeping everything within, ETH_, send raw transactions.
00:08:00
Simsonraj Easvarasakthi:And, we have these negative tests generated automatically.
00:08:05
Simsonraj Easvarasakthi:For the few error codes scenario.
00:08:10
Simsonraj Easvarasakthi:And, I tested this, this works, and
00:08:14
Simsonraj Easvarasakthi:These… I believe these can be consistently replicated across all clients without too much…
00:08:20
Simsonraj Easvarasakthi:tweaking, so I'm just giving it for now.
00:08:24
Simsonraj Easvarasakthi:We can extend…
00:08:24
Mercy Boma Naps-Nkari:I think maybe we can also include this part of this PR to ACDEE, but I don't know when the next ACDEE is happening, because other client needs to…
00:08:35
Mercy Boma Naps-Nkari:chime in on it also. But, since, Sina is here from Geth, and then…
00:08:42
Mercy Boma Naps-Nkari:We have another person from Erigon, and I'm not sure if you guys want to say or make… make a comment on this.
00:08:52
Simsonraj Easvarasakthi:Yeah, that would be good. Thank you.
00:08:56
Tullio | Erigon:Yeah, I've… I will take a look, but…
00:08:59
Tullio | Erigon:I've… I think it's… it's fine.
00:09:04
Mercy Boma Naps-Nkari:Okay, thank you very much.
00:09:07
Simsonraj Easvarasakthi:Once this goes into the hive,
00:09:10
Simsonraj Easvarasakthi:Probably, let's say, next meeting, maybe?
00:09:13
Simsonraj Easvarasakthi:Only then it'll start complaining that the clients are not respecting these error codes.
00:09:19
Simsonraj Easvarasakthi:This currently includes Geth, because, Geth, hasn't implemented the standardized error codes yet. So right now, it's just warrants, in, in the RPC test inspection.
00:09:34
Simsonraj Easvarasakthi:Once it goes to the hive and starts using these test fixtures, it'll actually start complaining it.
00:09:42
Sina Mahmoodi:So, one, note here is that…
00:09:45
Sina Mahmoodi:the… the I.O. fixtures that are generated.
00:09:49
Simsonraj Easvarasakthi:For order generated, yes.
00:09:51
Sina Mahmoodi:These are also auto-generated, okay? Yeah, yeah, yeah.
00:09:53
Simsonraj Easvarasakthi:Yeah, these are auto-generated. The way… it is tricky right now, because these are auto-generated, but for error codes, it will return what Geth has, right? So I have a…
00:10:04
Simsonraj Easvarasakthi:sorry, a holder called Expected Error Codes, where I add these error codes, and then it'll overwrite those error codes while generating these text fixtures. So, it's basically generating with whatever codes Geth has, and then on top of it, it overwrites the expected error codes.
00:10:27
Sina Mahmoodi:I think, seems like a temporary measure to me, I think.
00:10:33
Simsonraj Easvarasakthi:If Geth fixes, it'll be automatic. We don't need to have these overrides, because everything is based on what Geth has currently, so there's no easy way to do this. We need at least one client to adopt these error codes fully, so we cannot… we don't even need to do this overriding.
00:10:53
Felix (Geth):Hi guys, sorry for being late. So just regarding this, I think usually, we would just implement it in Geth, and then have it, like, generated like that.
00:11:03
Simsonraj Easvarasakthi:Yeah, exactly.
00:11:04
Mercy Boma Naps-Nkari:Yeah, that's actually what I wanted to say, if… or maybe, I don't know if you can do it, or I can just make a PR, then…
00:11:12
Mercy Boma Naps-Nkari:We'll have something to fall back to.
00:11:17
Felix (Geth):Yeah, certainly, I mean, if you guys already know how to add these specific error conditions in Geth, or if they are already kind of recognizing Geth, but just need the error code, like, we are super happy to receive that PR, like.
00:11:29
Felix (Geth):That's… that's okay.
00:11:32
Mercy Boma Naps-Nkari:Oh, okay, thank you.
00:11:36
Mercy Boma Naps-Nkari:I think next on the agenda should be…
00:11:59
Mercy Boma Naps-Nkari:Sorry, I'm still trying to figure out how to maneuver my screen sharing, and then… Doing this.
00:12:05
Mercy Boma Naps-Nkari:But the only thing with this is I already,
00:12:10
Mercy Boma Naps-Nkari:address the comments, so… I'm not sure if there's another thing to it, or we can use…
00:12:16
Mercy Boma Naps-Nkari:We can merge it now.
00:12:27
Mercy Boma Naps-Nkari:75 eighths, this one.
00:12:32
Mercy Boma Naps-Nkari:the TS pool.
00:12:36
Felix (Geth):I mean, yeah, we can probably imagine that there was no…
00:12:41
Mercy Boma Naps-Nkari:Yeah, I already addressed your other review comment on it.
00:12:52
Mercy Boma Naps-Nkari:Is my screen really visible? Because I don't really know what's happening on my laptop screen.
00:12:56
Felix (Geth):It is, it is visible, it just Geths some drag, but it is visible.
00:13:07
Mercy Boma Naps-Nkari:I think this should be the last comments that I did.
00:13:14
Mercy Boma Naps-Nkari:Yeah, this…
00:13:17
Felix (Geth):Yeah, I mean, it looks okay for me. We have the TX pool.
00:13:21
Felix (Geth):Status… Yes, cool content result. Yeah, I mean, Seems okay.
00:13:27
Felix (Geth):For me, like, at least.
00:13:29
Felix (Geth):If this is all, then, yeah.
00:13:33
Felix (Geth):There is also… yeah, I mean, with the… with the… oh yeah, so the tests, they are spec only, so that's nice. We still have to see. These tests will…
00:13:45
Felix (Geth):Because, like we were saying last time, One problem is that
00:13:52
Felix (Geth):It's the response of this, method.
00:13:57
Felix (Geth):Is a… is an object Which has the…
00:14:05
Felix (Geth):address… no, what it has? I think it has the address as the key, or something like that. Yeah, and then,
00:14:16
Felix (Geth):One problem is the testing framework cannot really handle this too well, so at the moment when it,
00:14:22
Felix (Geth):when it… when the test will be executed, so not in the generator, the generator is fine, but when it executes this test, it will try to match the resulting object
00:14:33
Felix (Geth):shape against the return shape, and the content of the TX pool in these tests will be basically whatever is left over from the other tests, and this can also change over time, or it depends on the test ordering and things like that. So.
00:14:50
Felix (Geth):I mean, I can merge this, but then we also have to go ahead and somehow figure out how we can actually properly validate these responses, because…
00:15:00
Felix (Geth):is not… It's very possible right now to, like, there's no…
00:15:05
Felix (Geth):real guarantee what will be in the TX pool of the client anyways, and, I mean, this is basically very hard to know.
00:15:14
Mercy Boma Naps-Nkari:Okay, is there, like, something we need to figure out? Because I don't really understand how to go about it, that's another point. Is there maybe…
00:15:22
Felix (Geth):Yeah, there isn't, like, a good… that's the thing, this is just… this is, like, inherently kind of a hard problem, because the way this test works is all of the other tests will
00:15:32
Felix (Geth):possibly try to send a transaction. And then, depending on the client policy, this transaction will be lingering around in the client, or it will be discarded. And then at some point during the test suit execution, we will call this method, TXPullContent.
00:15:48
Felix (Geth):To, retrieve all of the transactions that are currently in the client.
00:15:53
Felix (Geth):I just think it's… it's gonna be…
00:15:55
Felix (Geth):One of these methods that is very hard to test, because
00:16:00
Felix (Geth):Essentially, we just have no idea if the client should have the transaction or not.
00:16:05
Felix (Geth):It's not possible for us to define it, really.
00:16:09
Felix (Geth):So, we will just always have this test as more of a… You know, we…
00:16:15
Felix (Geth):basically, it's more… it's maybe one of these tests where we just check that it does an error, and it gives, like, a non-empty list or something, but that's about as much as we can check about this. Or we can validate it against the schema or something. But that's about it. There's no more…
00:16:30
Felix (Geth):We cannot really assume too much about what the clients will be returning.
00:16:35
Felix (Geth):Anyways, this is not really 100% related with merging this, but just knowing that when we merge this, it will have generated tests, and then these tests will be failing. We can still merge it, yeah, I'm just saying that. I just already know these tests will fail.
00:16:49
Felix (Geth):Like, on the… on high…
00:16:53
Tullio | Erigon:Yeah, and by the way, the same behavior that you are describing is already happening with testing build block V1.
00:17:02
Tullio | Erigon:Which has basically the same problem.
00:17:07
Felix (Geth):Oh, because it's non-deterministic?
00:17:10
Tullio | Erigon:Yeah, yeah, because when you have,
00:17:13
Tullio | Erigon:when you issue testing build block V1 with
00:17:18
Tullio | Erigon:TX is from Mempool, you are exercising the same behavior, but…
00:17:24
Felix (Geth):I'm not sure. Do we have RPC compat tests for Build Block V1? I think we shouldn't.
00:17:30
Chase Wright:Yeah, we do, and we.
00:17:32
Chase Wright:We just merged that fix that made, from Mempool spec only, so we gotta review
00:17:39
Chase Wright:We gotta review what happens now that it's spec only.
00:17:42
Felix (Geth):probably gonna pass, but I will anyway. Okay, we have to see. Maybe it's good or not, but I'll check it. Anyway, we have to…
00:17:50
Felix (Geth):the test execution has to be improved to check the schema. This is something that will… we will take care of it. Okay, I will merge this, like, TX pool namespace one.
00:18:19
Mercy Boma Naps-Nkari:Oh, wow. This is the next, item.
00:18:28
Mercy Boma Naps-Nkari:But this has to do with the fashion, and although I had a call with Zane.
00:18:33
Mercy Boma Naps-Nkari:And then he had some comments on the PR already, but…
00:18:37
Mercy Boma Naps-Nkari:there are some things we discussed that I'm not really sure, but I don't know if he's here too.
00:18:42
Zane Starr:I'm here. I could talk about it.
00:18:45
Mercy Boma Naps-Nkari:Yeah, thank you.
00:18:47
Zane Starr:Okay, cool. So, I met with Mercy to talk about the versioning.
00:18:52
Zane Starr:And I think generally, maybe the… the… the direction that it's going, which is just kind of like…
00:18:59
Zane Starr:pulling back tagged releases from the GitHub to already have the pre-compiled versions there, so it kind of Geths rid of that, like, caching issue. It just kind of depends on a couple of different things.
00:19:14
Zane Starr:So, an interrelated, sort of issue with document versioning is the versioning in OpenRPC.
00:19:23
Zane Starr:overall, and I wasn't sure exactly where we landed on that, and how, people want to, like.
00:19:31
Zane Starr:Tag versions, in general.
00:19:33
Zane Starr:So, there's, like, the sort of semi-automated thing, where… You could…
00:19:42
Zane Starr:have a GitHub action that creates the release PR, and then you have the ability to merge that release PR whenever you want, and that would trigger
00:19:56
Zane Starr:And there's this other kind of direction where either you manually put in the OpenRPC version into the OpenRPC doc.
00:20:06
Zane Starr:And then that is perfectly tagged with the release. But there are a lot of packages within execution APIs, so it's kind of like…
00:20:17
Zane Starr:What do you want to have happen?
00:20:21
Zane Starr:Because there's a possibility that, like, whatever's in the execution API spec
00:20:26
Zane Starr:Maybe there were some RPC test gen changes, and that's not really necessarily…
00:20:33
Zane Starr:Has anything to do with the API spec itself.
00:20:36
Zane Starr:So… Yeah, I guess I'm just a little bit uncertain as to what
00:20:43
Zane Starr:Like, how, people want versioning to work.
00:20:47
Zane Starr:Yeah. If there's already something in mind, otherwise I can propose a scheme that I think would make sense.
00:20:58
Zane Starr:Does that make sense?
00:21:03
Mercy Boma Naps-Nkari:Yeah, I… okay.
00:21:05
Felix (Geth):Sorry, you go first. Please go first.
00:21:07
Mercy Boma Naps-Nkari:No, no, I just wanted to reference what you… we had… the discussion we had on Discord, that's all.
00:21:18
Mercy Boma Naps-Nkari:Sorry, please go on.
00:21:22
Felix (Geth):Hmm… I didn't fully understand, Zane, what you…
00:21:28
Zane Starr:Oh, okay, the thing is, I wasn't sure…
00:21:34
Zane Starr:How versions you would like that to necessarily work.
00:21:38
Zane Starr:Do you want the OpenRPC version to match the tagged release of execution APIs altoGethher, so there's always only one version that tracks? Or would you want the OpenRPC version document to update independently of whatever the tagged release for execution.
00:21:59
Felix (Geth):I mean, our plan is just to have a workflow where we tag a release on execution APIs, and then this release is the current one, and we will
00:22:10
Felix (Geth):then… My idea was always that we will attach the Rendered back to this.
00:22:20
Felix (Geth):to this release as an artifact, so you can download it from there. And we have to have some other tooling in…
00:22:27
Felix (Geth):GitHub Actions or wherever that will
00:22:30
Felix (Geth):Take all of these versions, which are released, and compile…
00:22:37
Felix (Geth):The site so that it can display them.
00:22:40
Zane Starr:Yeah, that's not… I don't think that's a particular problem. The… the real question was, is just basically, there's a bunch of other code with the spec, so changes to RBC TestJ,
00:22:57
Zane Starr:Probably… Tess would be.
00:22:57
Felix (Geth):part of the release as well. But we wouldn't… the generator of the test doesn't have to be a part of it, but the tests themselves would be. So we would release the test also as an artifact.
00:23:09
Zane Starr:Right, and the question I had was kind of like, there's this other thing called the OpenRPC document version. Maybe… I don't know if it's currently being used right now, I don't… I think it's just hard-coded to 0.0.0. So, my sort of question was, like.
00:23:29
Zane Starr:Do you want that document version to always correspond with the tag released? If so, that's, like, easy to do, but it's still just a…
00:23:37
Felix (Geth):Render it in, yeah, we can have a flag on the spec generator that will render that version in.
00:23:45
Felix (Geth):Like, that's a possibility if we… if we wanna… if we wanna go that way, because anyway, we have to have some kind of workflow that will create the release artifacts, and that workflow will basically be to just run the GoTools in the repository.
00:23:58
Felix (Geth):On the tagged version, and then… Upload the output somewhere.
00:24:07
Zane Starr:So, like, I guess, the order of operations is basically, I would create a GitHub action, the action would be for you to optionally tag release, and that tag release process
00:24:21
Zane Starr:there would be something that then, changes the YAML version on the… Document.
00:24:30
Felix (Geth):No, no, we don't even have to put it in the YAML. It's just that the GoTool can just put this value in the JSON output, but it doesn't have to be in the YAML.
00:24:40
Felix (Geth):Command line flag or something, like, to the tool that generates it.
00:24:44
Zane Starr:Okay, and so you'd want the refs, released to then… so, like, whatever's in the repo will then never track the version?
00:24:54
Zane Starr:And then the version will always be in the tags, and that's the way that you'd want it.
00:25:00
Felix (Geth):What do you mean, what's in the… what's in the repo doesn't track?
00:25:04
Zane Starr:Well, so, what's in the repository will always be 0.0.0. So, like, if you're looking at the API spec YAML files, that will just say 0.0.0.
00:25:17
Felix (Geth):Yeah, yeah, but they
00:25:18
Felix (Geth):the input, so we don't really… they are not the specs, so that's… this is, like, kind of the thing, they are just the source of the spec, so there shouldn't be anything like that. I don't think we have a YAML file right now that, contains this.
00:25:31
Zane Starr:I think so. Well, I thought there was, but maybe not.
00:25:36
Felix (Geth):YAML files just contain the methods, and they have the schema, but there's not… this top-level document doesn't have a YAML file, because the top-level document is created by the Go tooling.
00:25:49
Zane Starr:Yeah, maybe I can just start.
00:25:51
Felix (Geth):We are in charge of whatever goes into this top-level object inside of the Go.
00:25:56
Felix (Geth):thing that we have. And…
00:25:59
Felix (Geth):we also never really… I mean, we have this one branch that contains the rendered spec.
00:26:05
Felix (Geth):like, official, so in general, we also don't commit the openrpc.json to the repo, so there's no place, like, the only place where it would live is inside of…
00:26:17
Felix (Geth):in the… yeah, there's this assembled spec branch, but it's kind of a weird concept, like, so…
00:26:22
Zane Starr:The assembled spec, just to be clear, is used by flashbots and other, like, client consumers downstream.
00:26:33
Felix (Geth):Like, that's the thing, they are probably using this because they don't…
00:26:37
Felix (Geth):You know, there's no official other place where the spec is, you know, Released, but…
00:26:46
Zane Starr:Yeah, I think we're on the same page. I just wanted to make sure that, like.
00:26:50
Zane Starr:like, there's a particular direction that you want things to go, and so, like, if I make the decision to then, like.
00:26:59
Zane Starr:Generate the version that's tied directly to the tag, that's the correct decision to make, and then just make sure that the assembled spec has the…
00:27:09
Zane Starr:proper version that corresponds to the latest release tag. And so, like, if you go back down through history, it should be consistent with whatever the released version was. And the other thing is, is, like.
00:27:25
Zane Starr:Changes to the spec are not so important in the sense that whatever happens in the repo just tracks across the board, so there won't be multiple versions between, like, how the spec actually changed versus how the tooling changed.
00:27:40
Felix (Geth):Yeah, I mean, in general, we will not be rendering every single commit to the spec as a separate version. It's only when we create a release, which is gonna be sometimes, that there will be a new version. And then that new version will have the test generated, and it will have the spec,
00:27:58
Felix (Geth):generated, and then that's, like, what we release. But that also means that, for example, if we change the tooling that creates the spec.
00:28:06
Felix (Geth):like, the spec generator or the test generator, then, like, these changes… I mean, yeah, they are in the repo, but they are just the input to this release process.
00:28:17
Zane Starr:Alright, yeah, so that's pretty much so… what I wanted confirmation of.
00:28:26
Mercy Boma Naps-Nkari:Sorry, I have an extra question, because I got confused. We talked about, having, like, a dedicated changelog view, more like,
00:28:35
Mercy Boma Naps-Nkari:to create, like, a release note in MD files. How is that going to, like, fit into all this?
00:28:43
Felix (Geth):Yeah, I mean, once we create the release, we can also create this changelog.
00:28:49
Felix (Geth):maybe from the release notes, or the other way around. I mean, the thing is, we have to…
00:28:53
Felix (Geth):releasing the spec will mean that someone has to figure out, either using AI, or manually, or using some kind of script, what were the actual API changes between two versions. And then the documentation of that has to be stored in a file, maybe. But I think this process is somewhat independent from
00:29:13
Felix (Geth):website. I mean, we can make it so that these changelogs are visible in the site, and that would be very nice, but they are not really a part of the spec, they are just part of the release process. So, for example, we can attach these by just making these changelogs the release notes of the GitHub release.
00:29:32
Felix (Geth):We can just put that text in there, just saying, yeah, these are the changes.
00:29:37
Zane Starr:Yeah, I think we can do a changelog. I don't think that's, like, particularly difficult. The one thing is, like, the changelog probably would…
00:29:47
Zane Starr:Typically, a lot of the automated systems and tooling around that tend to write the changelog into the repo.
00:29:55
Zane Starr:And then it's all additive, so in between the commits, you do the diff, and then you aggregate all of the commits that happen in between.
00:30:04
Zane Starr:And you kind of have, like.
00:30:06
Zane Starr:sort of release notes that are between that, and it just shows you sort of the commits in between what happened and what didn't. But because the repo itself, I don't believe, uses semantic commit.
00:30:18
Zane Starr:You don't Geth, like, really nice, like, this were the features, here were the fixes, here were the bugs, here were the breaking changes, that kind of a thing. And that would be a much larger change for, like, how commits are made to the repo.
00:30:31
Zane Starr:But otherwise, like, we can just have a changelog that shows, like, here are the commits in between, like.
00:30:38
Zane Starr:what happened before and whatnot.
00:30:40
Felix (Geth):And that's not really release notes. Like, release notes means someone has to go through it, and I mean, it is totally possible to detect if, like, automated or by hand, if, like, some method was modified, or if it was just, you know, a new method was added, and so on. Like, we can create a bit of a semantic diff.
00:30:58
Felix (Geth):I do think this is possible to figure out, but like I said, this is not really… I don't think this… I mean, yes, the idea of having the changelog is good, but it doesn't really require…
00:31:11
Felix (Geth):is not really related, I think, with this…
00:31:13
Felix (Geth):process in the same way, like, the tooling for the releasing is just mostly about, like, rendering this back and having this, like, GitHub action that Geths triggered off of the GitHub release.
00:31:40
Mercy Boma Naps-Nkari:Sorry, did… I don't know what happened. Okay.
00:31:46
Mercy Boma Naps-Nkari:I guess maybe we can…
00:31:53
Mercy Boma Naps-Nkari:Go on, yeah, so…
00:32:03
Mercy Boma Naps-Nkari:So, Sina, I don't know if you have anything to say in regards to this PR.
00:32:15
Sina Mahmoodi:I was, going through the Get PR for this feature today, and noticed a few things. I wanted to flag them.
00:32:25
Sina Mahmoodi:It's mostly… About the particular design of the data here, of the data structure.
00:32:37
Sina Mahmoodi:I think the first point that I wanted to bring up was this… What happens if…
00:32:44
Sina Mahmoodi:a resource is enabled on the node, so let's say…
00:32:49
Sina Mahmoodi:Guess has disabled log lookup,
00:32:53
Sina Mahmoodi:How the spec here handles this case is that you return
00:32:58
Sina Mahmoodi:A disabled value to be true.
00:33:01
Sina Mahmoodi:But at the same time, also return
00:33:05
Sina Mahmoodi:these other fields, and just return nonsensical values for them. So, you would still return the oldest block to be 0, and…
00:33:15
Sina Mahmoodi:And you would return a deletion strategy.
00:33:19
Sina Mahmoodi:And the only reason why we return them is because in the spec, it is… those fields are required.
00:33:26
Sina Mahmoodi:And I think I want to make a case to make those optional.
00:33:31
Sina Mahmoodi:So this is one point. I think it's… it can be a foot gun if you have disabled true, and then at the same time have
00:33:40
Sina Mahmoodi:an oldest block value which is valid, so it's, like, 0.
00:33:45
Sina Mahmoodi:And a delete strategy, set.
00:33:49
Sina Mahmoodi:And the second reason why I think those fields should be optional is that
00:33:55
Sina Mahmoodi:Like, especially the lead strategy. I see it more as a hint from the client to the consumer, because what can be actually observed in the database is the oldest block.
00:34:08
Sina Mahmoodi:But… There is nothing that will… validate that.
00:34:18
Sina Mahmoodi:This oldest block is in conformance with the delete strategy.
00:34:24
Sina Mahmoodi:So, even if you check the examples, and I left a comment, like, in the examples.
00:34:29
Sina Mahmoodi:The oldest block is… Very old, and the delete strategy
00:34:35
Sina Mahmoodi:wants to keep only the latest 90,000 blocks. So, it's an invalid example.
00:34:43
Sina Mahmoodi:And I think that it's… it's easy for something like this to come up. So, yeah, basically, I want to suggest us to…
00:34:52
Sina Mahmoodi:make deletion strategy in particular optional.
00:34:57
Sina Mahmoodi:Also because I think, like, this delete strategy of none, it doesn't really make much sense. Like, the only thing that does make sense is the window strategy as a valid one.
00:35:08
Sina Mahmoodi:So we can just… omitted if…
00:35:15
Sina Mahmoodi:If we don't have a particular delete strategy.
00:35:20
Sina Mahmoodi:And, I mean, like, we could also just rename it to something more sensical, like retention policy.
00:35:27
Sina Mahmoodi:Yeah, I think that's… what I wanted to bring up.
00:35:31
Sina Mahmoodi:If you guys have any thoughts.
00:35:33
Felix (Geth):I was not really a fan of the delete strategy, but I guess…
00:35:37
Felix (Geth):I'm in the minority with this.
00:35:46
Felix (Geth):So, I mean, or if we add the deletion strategy, then we have to be, like, really clear what they are, like, what are the strategies, and also, like, what's the… what are the actual semantics? I mean, we discussed it at length last time when this was added, that the whole point of the deletion strategy is so that in the load balancer, they can kind of project the availability of the data.
00:36:05
Felix (Geth):Without having to go back to revalidate it.
00:36:10
Felix (Geth):But I'm just not sure if that is really what we want, ultimately, because…
00:36:15
Felix (Geth):What if it does change, or what if we have this, like, sparse availability? Like, we say, okay, we have these parts, and these parts, and these parts, is there a deletion strategy that covers this, or…
00:36:25
Felix (Geth):Do we just give up at that point, or like…
00:36:29
Sina Mahmoodi:Yeah, I mean, technically, we could add a delete strategy that supports these gaps, so because it's an object, we could say.
00:36:39
Sina Mahmoodi:like, define whatever field's in there, but I think this default delete strategy of, like, none, that… I… I just don't know what is… what is the value of it.
00:36:52
Sina Mahmoodi:And what is the value of having it mandatory?
00:36:59
Mercy Boma Naps-Nkari:So, I have something else to say. Is this not one of the piers that we can, like,
00:37:05
Mercy Boma Naps-Nkari:take to ACDEE, because most… I think most of the client teams are not really here to…
00:37:15
Sina Mahmoodi:I think Chase, asked this in the JSON-RPC channel, I don't know if there was any feedback on it.
00:37:23
Mercy Boma Naps-Nkari:Oh, sir, I think I messed up.
00:37:29
Felix (Geth):I mean, we discussed it a little bit, but I do think it makes sense to Geth people on there again, one more time, to just really make sure that everyone knows about this. So, the thing is this… it took me, like.
00:37:40
Felix (Geth):couple minutes to understand the approach, but once I got it, I was really, happy with it, and I think this is a really good direction to say we have this… the modeling of the client's resources as they are presented on the RPC. I think this moves us in a very good direction, because
00:37:56
Felix (Geth):it kind of solves this problem that we had for a long time, where these things are just generally undefined in the clients. And at least with this, it's like we have a representation of it that somehow captures what actually is there.
00:38:18
Felix (Geth):So, yeah, I mean, I don't think it's gonna be super controversial.
00:38:22
Felix (Geth):With the clients, but we should absolutely bring it up, like, especially if no one commented, we have to escalate it, because we can't just add this without having significant feedback.
00:38:35
Mercy Boma Naps-Nkari:Okay, I think maybe I can include it to next ACDEE.
00:38:42
Mercy Boma Naps-Nkari:And then, see, report back to you.
00:38:48
Mercy Boma Naps-Nkari:Based on what was discussed.
00:38:52
Mercy Boma Naps-Nkari:But we do have someone from Erigon team. I don't know, do you have something to say?
00:38:57
Tullio | Erigon:Yeah, I agree with the approach as well. I like this direction of
00:39:06
Tullio | Erigon:Being explicit in term… in terms of the… representing the resources.
00:39:13
Tullio | Erigon:Used by the clients. And, yeah, the only comment, is about the delete strategy, which… I think.
00:39:23
Tullio | Erigon:Should be flexible enough to accommodate, maybe.
00:39:29
Tullio | Erigon:Other strategies or retention policies that we…
00:39:34
Tullio | Erigon:We… we can't see today, but may…
00:39:38
Tullio | Erigon:emerge in the future, so I think we should just take care in… Leaving flexibility there, and…
00:39:49
Tullio | Erigon:Yeah. And that's it.
00:39:51
Felix (Geth):Another, approach that was discussed previously was to explicitly support this mechanism only as a subscription-type thing, where the load balancer would have to connect to the client.
00:40:05
Felix (Geth):And… Establish a kind of stream connection, and then it would receive from the client
00:40:11
Felix (Geth):updates about the availability ranges of the data. And this would be then superseding this deletion strategy model by having explicit notifications whenever the availability of data changes. So, for example, when pruning is activated, then it would return to the
00:40:31
Felix (Geth):Load balancer is some object that says, by the way, the availability of
00:40:36
Felix (Geth):receipts and blocks has now changed to this range. Or when a new block is added, then
00:40:43
Felix (Geth):Once the block is fully imported, it would then signal again this availability of it to the…
00:40:49
Felix (Geth):to the load balancer, and I think Using this model would be…
00:40:54
Felix (Geth):Better somehow, because then you don't have to guess.
00:40:58
Felix (Geth):At, like, what could be the availability, and you don't have to model it, because you just Geth,
00:41:03
Felix (Geth):The object, but of course, then it means for the spec that we have to figure out the specification of the notifications, which is not yet possible.
00:41:13
Felix (Geth):So it's… it's a bit like… like, for the spec… from the spec point of view, it's maybe not the nicest approach, but from a practical point of view, I think it could be a way to… to drive that forward, especially since all the clients have support for this notification mechanism now.
00:41:35
Sina Mahmoodi:Maybe a question to Erigon. Do you guys have any other retention policy
00:41:43
Sina Mahmoodi:Other than, like, the window deletion and fixed deletion, so…
00:41:49
Sina Mahmoodi:See, these are the two currently that Geth supports.
00:41:56
Tullio | Erigon:Okay, basically we have,
00:42:01
Tullio | Erigon:Another one, which is for what we call the minimal node configuration, where we… just,
00:42:11
Tullio | Erigon:Keep the… the headers of the chain, but not necessarily the…
00:42:18
Tullio | Erigon:the full, body and transactions, so we prune also non-recent bodies and transaction.
00:42:29
Tullio | Erigon:Which is… Kind of.
00:42:33
Tullio | Erigon:Slightly different, it's… it's like saying that not all the parts of the blocks have the same
00:42:49
Tullio | Erigon:Yeah, but… Hmm.
00:42:52
Tullio | Erigon:this is something specific to us, I think, so I…
00:42:57
Tullio | Erigon:I don't know if it's…
00:42:59
Tullio | Erigon:relevant, to model? Maybe yes, but,
00:43:06
Tullio | Erigon:I don't know, I mean, the… One of the…
00:43:12
Tullio | Erigon:things that can happen with this EF capability is that… capabilities is that if we want to…
00:43:20
Tullio | Erigon:Follow all the… Different implementation of… of the clients. It may… become…
00:43:29
Tullio | Erigon:Quite wide in terms of spec.
00:43:37
Sina Mahmoodi:I would… I would argue that, your… what you're describing is… it's possible to model it
00:43:45
Sina Mahmoodi:With the current spec.
00:43:48
Sina Mahmoodi:Because we… we have a type for each resource, so, like, you can represent blocks, receipts, TXs, All separately.
00:44:00
Sina Mahmoodi:you can't say for how long you want to keep each, so I think in the… like, headers are assumed to be kept for the whole history, always.
00:44:11
Sina Mahmoodi:That's… that's one… like, if you're… if you're also pruning headers, this is something, indeed, that we need to change here.
00:44:22
Tullio | Erigon:Which is… okay. It's kind of… yeah.
00:44:27
Sina Mahmoodi:And so, for them, I guess you were keeping them for, like, let's say, at least, I don't know, 256 blocks, because…
00:44:36
Tullio | Erigon:No, more than that. It's something like 100K.
00:44:40
Sina Mahmoodi:Okay, then, yeah, so then it could fit into the window, delete strategy. It means…
00:44:48
Sina Mahmoodi:My node is keeping the last 100,000.
00:44:52
Sina Mahmoodi:Transactions and block bodies.
00:44:56
Sina Mahmoodi:So… I think it can be modeled.
00:45:00
Tullio | Erigon:Yeah, okay, I see. Okay, it's because deletion strategies is for revenue a resource.
00:45:13
Tullio | Erigon:So, yeah, kind of, we can map it, yeah, I think so.
00:45:18
Tullio | Erigon:Okay, that's fine.
00:45:25
Mercy Boma Naps-Nkari:So, I think Chase has a question about pruning it into a window.
00:45:29
Chase Wright:No, I was just saying, even though they're…
00:45:32
Chase Wright:even though they're doing that, that's still a window strategy, I think.
00:45:49
Sina Mahmoodi:Yeah, I mean, so yeah, generally this was it for me, for this PR. I'll go ahead and make the comments that I mentioned also on the PR for the author to evaluate.
00:46:03
Mercy Boma Naps-Nkari:Yeah, and I also take, try to include it on ACDEE, follow up on it.
00:46:10
Mercy Boma Naps-Nkari:For the next call.
00:46:12
Mercy Boma Naps-Nkari:And I don't know if this is, like, the only thing we have on the agenda for today, but I can see Uchi on the call, and I know that he has some PR.
00:46:21
Mercy Boma Naps-Nkari:So I'm not sure if he wants to talk about the PR.
00:46:25
Developer Uche:Yeah, yeah, I do.
00:46:27
Developer Uche:And that's been…
00:46:30
Mercy Boma Naps-Nkari:Sorry, can you share the link? Because I can't really…
00:46:35
Developer Uche:Yeah, it's in Japan.
00:46:43
Developer Uche:Well, I'd love to ask a quick question on how… on how,
00:46:48
Developer Uche:the repo operates. I saw on YouTube,
00:46:52
Developer Uche:some calls to talk about the PR before…
00:46:56
Developer Uche:Some other discussion before it's merged, so I just want some clarity on that.
00:47:00
Developer Uche:I'm just the first pair I'm making, so… execution APIs.
00:47:06
Mercy Boma Naps-Nkari:Yeah, I think this is one of the PR… we had the discussion about this PR, and
00:47:12
Mercy Boma Naps-Nkari:Correct me if I'm wrong, Felix said, this is something we need to take to ACDEA.
00:47:19
Mercy Boma Naps-Nkari:Yup. I think?
00:47:21
Felix (Geth):So, changes to the engine API, we were… are not processed on this call.
00:47:38
Mercy Boma Naps-Nkari:But, is there, I don't know, a direction on how he can proceed further since he's here?
00:47:45
Felix (Geth):the right call. On ACDE, like, we have to make a…
00:47:50
Felix (Geth):You have to put in a comment on the agenda for the ACDE. On the Ethereum slash PM repository, there's an issue open for every four quarters call, and this issue, you have to put a comment saying, I want to discuss this
00:48:05
Felix (Geth):Change, and then it can be discussed on there.
00:48:11
Developer Uche:Alright, that sounds good.
00:48:21
Mercy Boma Naps-Nkari:Okay, since that's settled, that's, like, the only thing on the agenda from my own end. I don't know if someone else has something to say, or we can call it a day.
00:48:32
Mercy Boma Naps-Nkari:Oh, there's another one.
00:48:37
Developer Uche:Just a link to the PR, or the link to the issue?
00:48:44
Mercy Boma Naps-Nkari:I think it should… the call should be ACDEC, and then I think also ACDEE should be involved. I'm not sure if I'm right.
00:48:55
Felix (Geth):I mean, it is a cross-client concern, so we absolutely have to talk, like, it doesn't matter which call we discuss it on, because ultimately, both sides have to be kind of present in these calls, but if there are any leftover questions, we can put it on both, but I think the ACDEE, if it's the next one and you want to put it in, then it's appropriate there.
00:49:13
Felix (Geth):I mean, both sides have to support it.
00:49:17
Mercy Boma Naps-Nkari:Yeah, that is what I'm saying, that maybe… because most of the times, consensus devs don't, like, attend ACDEE, so we kind of, like, have to, like, put it into two.
00:49:27
Mercy Boma Naps-Nkari:Just to be sure, and to Geth, like, more clients' views on it.
00:49:36
Developer Uche:That sounds good. I think I can place it on the… on the two calls.
00:49:41
Mercy Boma Naps-Nkari:Okay. Thank you very much.
00:49:46
Mercy Boma Naps-Nkari:So that is it for my own end, and I think that's all for today.
00:49:51
Mercy Boma Naps-Nkari:Thank you guys for joining. See you guys next two weeks. Thank you.
00:50:01
Mercy Boma Naps-Nkari:Thank you.

Chat Logs

00:05:40
Mercy Boma Naps-Nkari:https://github.com/ethereum/pm/issues/2029
00:07:10
Simsonraj Easvarasakthi:https://github.com/ethereum/execution-apis/pull/784
00:07:16
Mercy Boma Naps-Nkari:https://github.com/ethereum/execution-apis/pull/784
00:12:00
Mercy Boma Naps-Nkari:https://github.com/ethereum/execution-apis/pull/758
00:16:41
Chase Wright:I think we merge it and observe the behavior and then review it
00:18:22
Mercy Boma Naps-Nkari:https://github.com/ethereum/execution-apis/pull/779
00:31:15
Simsonraj Easvarasakthi:https://github.com/changesets/changesets would help
00:31:35
Zane Starr:changesets or knope is another good one for that
00:32:02
Mercy Boma Naps-Nkari:https://github.com/ethereum/execution-apis/pull/755
00:37:41
Chase Wright:I did ask, nobody commented lol
00:44:33
Chase Wright:But you prune it in a window right?
00:46:32
Developer Uche:https://github.com/ethereum/execution-apis/pull/773
00:48:28
Developer Uche:https://github.com/ethereum/pm/issues/2015

Summary

10 highlights · 3 action itemsExperimental

testing progress

  • Initial negative error code tests PR ready; includes replacement transaction underpriced00:06:12
  • Test fixtures auto-generated; currently return Geth error codes with overrides00:08:20

client updates

  • Geth hasn't implemented standardized error codes yet; tests will warn only00:11:03
  • TXPool content/status tests merged; will fail initially due to non-deterministic content00:18:00

organizational

  • Versioning approach: GitHub releases with pre-compiled artifacts, no caching issues00:19:15
  • OpenRPC version will match execution-apis tag; added via CLI flag not YAML00:23:58
  • Assembled spec branch used by Flashbots and downstream consumers00:31:41

critical infrastructure

  • eth_capabilities PR needs ACDE review; models client resource availability00:32:02
  • Delete strategy field controversial; may make optional or rename to retention policy00:32:30
  • Alternative: subscription-based availability notifications instead of static deletion strategy00:40:05

Decisions

  • TXPool namespace PR merged despite expected test failures due to non-deterministic behavior00:18:00
  • OpenRPC document version will track execution-apis release tags via CLI flag00:24:10
  • Engine API changes must be discussed on ACDE/ACDC, not RPC Standards calls00:47:45

Action Items

  • Mercy or community contributor: Create Geth PR for standardized error codes implementation00:11:27
  • Mercy: Present eth_capabilities PR (755) to ACDE for client team feedback00:38:07
  • All client teams: Review and comment on eth_capabilities PR optional fields proposal00:41:03