Mercy Boma Naps-Nkari:Good evening, everyone. Welcome to our PC call standard,
Transcript
Mercy Boma Naps-Nkari:our PC Standard Call, and we have a lot of things on our agenda today, but I just wanted to give a quick update on the things I said I was going to do last two weeks. So, the two PRs I,
Mercy Boma Naps-Nkari:How to get, the EL and the CEOs to take a look at, I've had, like, positive feedback.
Mercy Boma Naps-Nkari:Although SCDC was postponed last week, so I'm still trying to figure out how to get more client devs to look into it.
Mercy Boma Naps-Nkari:That's all from my end. I guess… Okay, sorry about that.
Mercy Boma Naps-Nkari:But I would also like to give a quick… I have a question about the error codes. I don't know if SIMS,
Mercy Boma Naps-Nkari:can make a quick, update on that before I ask my question.
Simsonraj Easvarasakthi:Hey, yay, EMOC,
Simsonraj Easvarasakthi:So, based on the previous reviews, we decided to go, Go inspection route, and, I did modify the PR. Now, it just uses the new Go tooling, and, does not use the extensions anymore.
Simsonraj Easvarasakthi:I think…
Simsonraj Easvarasakthi:Yeah, the functionality remains the same. I validated it. I also wrote tests to make sure everything is sticking to our expectations. I did speak to Zane. Zane mentioned he is in talk with LightClient. I'm not sure.
Simsonraj Easvarasakthi:I'm not sure, what's the direction here. Would appreciate if Felix, reviewed it.
Simsonraj Easvarasakthi:But, yeah, but the changes are done, in short.
Mercy Boma Naps-Nkari:So, I just had, like, because I was trying to look at it, and although I don't have, like,
Mercy Boma Naps-Nkari:strong opinions on what should be, in the error codes or not. So, my first question is, is it okay for two groups to define the same code? Like.
Mercy Boma Naps-Nkari:What if, a method, reference both groups. Which era wins? I don't know what I'm pronounce.
Simsonraj Easvarasakthi:Right, yeah, I just saw the message, I did not get a chance to respond, but it is…
Simsonraj Easvarasakthi:ultimately transformed into an array, so there is no collision. Both of them will be present in the method.
Simsonraj Easvarasakthi:But we do, or we can actually have a validation that checks based on the ranges, and the ranges don't overlap, but inherently, it'll apply the validation to the error codes. There should be a small change, I can actually update it. That was a good catch. I'll do that, thank you, Marci.
Mercy Boma Naps-Nkari:Okay, the last thing is… I… let me just finish typing.
Mercy Boma Naps-Nkari:We are using… is it not… I'm not a GoDef, so I don't really know much, but from the last thing, this thing, should it be this… shouldn't it be this, format?
Mercy Boma Naps-Nkari:I posted something on the chat.
Simsonraj Easvarasakthi:It's just, it's just error. Sorry, I don't catch what exactly you're saying.
Mercy Boma Naps-Nkari:I'm talking about the error wrapping.
Simsonraj Easvarasakthi:Oh, yeah, yeah, yeah, that's a standard one, yes.
Mercy Boma Naps-Nkari:So…
Simsonraj Easvarasakthi:If you want to return a custom error, we usually wrap it with the header if.
Mercy Boma Naps-Nkari:Yeah, my question is…
Mercy Boma Naps-Nkari:shouldn't we use the one I posted on the chat? Like, for consistent… like, for error wrapping to preserve, like, error change?
Simsonraj Easvarasakthi:I see what you mean. Give me a sec.
Mercy Boma Naps-Nkari:Because the old style we are using is, hold on.
Simsonraj Easvarasakthi:I have to…
Simsonraj Easvarasakthi:Okay, I can chat with you async on this, I need to get a little bit more context.
Simsonraj Easvarasakthi:Sure, I can address, these, these are minor, for sure.
Mercy Boma Naps-Nkari:Okay, so,
Mercy Boma Naps-Nkari:I don't know if anyone has something else to say in regards to the error codes, Pierre.
Mercy Boma Naps-Nkari:If someone else had, the opportunity to look at it.
Mercy Boma Naps-Nkari:Okay, in case we didn't, I can drop the PR link so that
Mercy Boma Naps-Nkari:To be easier for us to review, why not call?
Mercy Boma Naps-Nkari:And…
Simsonraj Easvarasakthi:Thank you.
Mercy Boma Naps-Nkari:That's the… So…
Mercy Boma Naps-Nkari:apart from these two things, I don't really have any much thing else to say, so… and, the… okay, I think I'll ping, Felix.
Mercy Boma Naps-Nkari:If he's available, so that he can also take a look at it.
Mercy Boma Naps-Nkari:Chase, I don't know if you have the time to also take a look at it.
Chase Wright:I mean, it generally looks good to me, but Felix usually has a lot of input in that I overlook, so we should get him to look at it.
Mercy Boma Naps-Nkari:Okay, thank you. So, back to the agenda for today.
Mercy Boma Naps-Nkari:We… last week, we talked about versioning and then the spec and the docs.
Mercy Boma Naps-Nkari:Although, I can't see, zane and Nicole.
Mercy Boma Naps-Nkari:I think we can skip that, and we have, like, a lot of, open issues and PR we need to talk to… we need to look into.
Mercy Boma Naps-Nkari:And I'm not sure how we're going to go about that now, since Felix isn't on the call.
Mercy Boma Naps-Nkari:Chase, can you please help me out? Because I'm not really sure how to handle it right now.
Chase Wright:I mean, I don't… I can't force Felix to join the call.
Mercy Boma Naps-Nkari:I'm saying, do you have, like, another alternative? We can, like, take a look at this, and then make a decision, or…
Mercy Boma Naps-Nkari:something else we can do, because I think we are just trying to, like, declutter, the issues and the stealth barriers we had so far.
Chase Wright:I mean, we can go through them and discuss them and give, like, a summary.
Chase Wright:Or… If there are PRs that are ready, we could ask, like, clients to
Chase Wright:Provide input, but .
Mercy Boma Naps-Nkari:Okay, can I share this link?
Mercy Boma Naps-Nkari:I think this is ready, the first one we have on the list.
Mercy Boma Naps-Nkari:PR761.
Chase Wright:Yeah, I mean, that one's mine, and…
Chase Wright:It's already… technically has an approval, his name's…
Chase Wright:If that gets merged, though, there's a PR in Hive that also needs to get merged.
Chase Wright:I don't know if flight clients can do that.
Chase Wright:Probably not.
Mercy Boma Naps-Nkari:Okay, so the…
Mercy Boma Naps-Nkari:I think the whole point of this is to kind of, like, have to hold on a little bit, since…
Mercy Boma Naps-Nkari:Felix is not here, and I'm not sure if…
Mercy Boma Naps-Nkari:Like clients would be willing to.
Mercy Boma Naps-Nkari:I'm not sure if LightClient is with us, or… I don't know.
Mercy Boma Naps-Nkari:Apart from these PRs, I don't really have any much things on the agendas, so, unless someone else has something else to bring up, which is not yet on the agenda that has to do with these open issues of, pay hours.
Chase Wright:So, I don't really have anything, but Tulio, I know that you previously had an opinion on the,
Chase Wright:the debugs?
Chase Wright:I have a new… I have a new PR.
Chase Wright:If you wanna… say anything on it, that would be nice. I…
Chase Wright:I went into the ETH Musicians, and I pinged everyone.
Chase Wright:There, about, EIP3155.
Chase Wright:I asked Marius for… For input as well, but he's very busy with all the, devNet stuff?
Chase Wright:So, I'm basically just waiting for feedback and opinions.
Chase Wright:on that one.
Tullio | Erigon:Okay, Chase, I'll… I'll take a look and let you know.
Tullio | Erigon:Yeah.
Chase Wright:No, no pressure. I assume it's gonna be an uphill battle, no matter what, so… all good.
Tullio | Erigon:Oh, okay, I will… I will take a look and… reply there.
Tullio | Erigon:If anything.
Ahmad:Hey, guys, so, relatively new here, at least to this meeting. I came last week.
Ahmad:Or, sorry, the week before, since this is bi-weekly. So with respect to, PRs and code reviews and, soliciting feedback or calls for feedback.
Ahmad:Is there a… Is there, like, a general sentiment, or, like, an idea, or some sort of…
Ahmad:like, process in terms of how, like, AI agents, whether or not it's Curse or Claude, I've probably… I've done more with, like, ETH PandaOps, just because I work in infrastructure. And I know, like, that, for example, they use, I think it's Claude, skills, or Claude Commands, or Claude Rules.
Ahmad:So that, you know, you could just, like, comment at, Claude or cursor or whatever on the PR and say, hey, review this, and then according to some set of standards, whether or not it's, like, you know, Felix's,
Ahmad:general, like, sort of, like, thoughts and ideas or insights into how he thinks about, code reviewing, or anyone else, Chase, Mercy, like, anyone else.
Ahmad:Also incorporating… so it's… it's all kind of, like, version controlled. So yeah, it's a lot of words to say. Is there… is there any, like, has there been any thought, to applying AI or incorporating more, like, AI agents, just so you can get that first level?
Ahmad:Of feedback, and then… and then, like, others can, you know, kind of come in, and provide, like, maybe the… the more finer, insights and corrections, or…
Ahmad:Or, or, feedback.
Chase Wright:I mean, it hasn't come up on any of the calls, and no one has…
Chase Wright:put any effort, as far as I'm aware, into, like.
Chase Wright:doing GitHub actions for, like, automated
Chase Wright:Poll request reviews and things like that.
Chase Wright:I'm not against it. I find them very useful, but…
Chase Wright:Others may have other opinions. I don't know.
Mercy Boma Naps-Nkari:Okay, I have something to say, I don't know if it's of any importance, but I feel like if we are going to, like, incorporate that, we should at least, section out, the repo a little bit. For example, the versioning we are trying to
Mercy Boma Naps-Nkari:get into place, and then the error codes. I think these are, like, the kind of things we need to properly figure out before we can, set up, an AI agent or skills.mdes, stuff like that, so that we'll be able to, like, say, okay.
Mercy Boma Naps-Nkari:properly map it out, per se. But I'm not sure how it totally works, because I've not, like, used them before.
Mercy Boma Naps-Nkari:But…
Mercy Boma Naps-Nkari:I think the next, because we just recently merged the RFP citation to the section, report, so…
Mercy Boma Naps-Nkari:There are some things we still need to figure out first before we can then introduce the agent.
Mercy Boma Naps-Nkari:Into the report itself.
Chase Wright:Yeah, I mean, as far as versioning goes, like, I noticed no one's really said anything on the ETH R&D, or the ETH Magicians, even though you opened a thing.
Chase Wright:I think it's gonna be very hard. Oh, Felix is pinging me. I think it's gonna be really hard to do the endpoint versioning.
Chase Wright:Like, I think we should focus on getting a GitHub release of the spec out.
Chase Wright:First, I think that should be our first priority, honestly.
Chase Wright:But… how many more…
Chase Wright:things do we need to fix before we can release, like, a V1? I don't… I don't really know. Or we can release, like, an alpha or something, like, doesn't matter.
Mercy Boma Naps-Nkari:Yeah, during last week's call, we had this, because on the website, we wanted to have, like,
Mercy Boma Naps-Nkari:A toggle button that you can, like, toggle between the various versions that was previously released.
Mercy Boma Naps-Nkari:I don't know if you understand what I'm saying. Hey, Felix, good afternoon.
Felix (Geth):Oh, sorry for being late to this. Chase, notified me, fortunately.
Chase Wright:Welcome.
Mercy Boma Naps-Nkari:Yeah.
Mercy Boma Naps-Nkari:It so happens that you're the one driving this car, so we have, like, a lot of, issues and PRs we need to, like, go through together, so that I will know the ones I need to bring up to ACDE or ACDA, as the case may be.
Mercy Boma Naps-Nkari:Can I… let me share the, the link…
Mercy Boma Naps-Nkari:I share the agenda link, so the list of the peers are…
Mercy Boma Naps-Nkari:The ones we… we are unable to look at.
Mercy Boma Naps-Nkari:From last week.
Mercy Boma Naps-Nkari:Do you want me to share my screen?
Felix (Geth):No, I got it, I got it.
Mercy Boma Naps-Nkari:Perfect.
Felix (Geth):I have to… I just have to, like, frantically set up everything here. I was, like, really not prepared for this.
Felix (Geth):Okay, yeah, okay, the screen share is up now, so this… oh my god, that's a lot.
Felix (Geth):Yup.
Felix (Geth):So… I guess there… you guys already heard the update on the error codes?
Felix (Geth):Or is that the next item, or what are we…
Mercy Boma Naps-Nkari:Yeah, we've heard the updates from Sims, although we still want your input on,
Mercy Boma Naps-Nkari:What we have so far.
Felix (Geth):Yeah.
Felix (Geth):I mean, definitely it…
Felix (Geth):request some review, but what I saw, just from the notification, I mean, I got a GitHub notification about it, and I looked a little bit into… into it, so I'm…
Felix (Geth):basically, I mean, I saw that it was integrated, and I took, like, a short look, so it seems like the tool is now extended to…
Felix (Geth):Use these files, which is…
Felix (Geth):kind of good. I think this is… this is good for us, and it applies some checks on it, so what is the input that is needed from me, basically, if it's ready, or…
Simsonraj Easvarasakthi:Yeah, I got, two comments from Mercy. I'll be… it's a quick fix, I can fix that.
Simsonraj Easvarasakthi:But if you think everything else is, okay, I can post the update later today or tomorrow.
Simsonraj Easvarasakthi:So we can merge this.
Felix (Geth):I mean, it seems to be okay. I would like to take a look at the output, which I cannot do just right now, but I will do it after this call.
Simsonraj Easvarasakthi:Sure, yeah, yeah, yeah.
Felix (Geth):output really looks like, but I think this integration now looks very clean to me. So we have these files, and I mean…
Felix (Geth):Yeah, it's… they are… they are nice.
Felix (Geth):It's also, I mean, it's kind of done in the same way that the generator also operates.
Felix (Geth):Now, with, like, having…
Felix (Geth):basically these… yeah, I mean, it's a bit… I kind of wonder what's the point of having, like, these multiple files now when… I mean, basically every file just has one group, so we could also just have, like, a single file that has all of the error groups.
Felix (Geth):But yeah, I guess that's just like a… like a…
Simsonraj Easvarasakthi:Yeah, I mean, I specifically left it like that so it's easy to navigate, and when a lot of error codes are added or determined, it'll be easier. But yeah, I mean, I think that works too.
Felix (Geth):For me, it doesn't really matter, it's just more like the… I mean, the tool doesn't care either, because it just reads all of the files into the same namespace.
Simsonraj Easvarasakthi:Yeah, exactly.
Felix (Geth):I think it's okay. Yeah.
Felix (Geth):Okay. I mean, I think I'm…
Felix (Geth):looks very good now. I mean, this is definitely a lot simpler than what we had before.
Felix (Geth):In terms of the logic, and…
Felix (Geth):Yeah, I mean, I will… I will… I will check out the output after the call, so that's my update, too.
Simsonraj Easvarasakthi:Sounds good, yeah, yeah, no worries, thank you.
Felix (Geth):Okay, so now we are supposed to check the… the PRs, or… yeah.
Felix (Geth):Should we maybe first go through the… These ones here?
Mercy Boma Naps-Nkari:Yeah.
Felix (Geth):like, listed on the agenda. So we have this one, which is from… Chase, and it…
Chase Wright:So, yeah, I can speak to it if you want me to, but, like, someone made a PR to GoEthereum, that's the ref, to fix it… to fix GoEthereum, because GoEthereum was failing the Hive tests. Marius reviewed the PR, and said.
Chase Wright:this is dumb, I think the spec is wrong. So I looked at it, and I think that I agree that the spec is wrong.
Chase Wright:But then, LightClients now is asking, can clients just delete it? And, like, I honestly don't know the answer to that question.
Felix (Geth):Yeah, this is not something that is, like, it's not such an easy decision to make, as is, like, changing it. I think that the…
Felix (Geth):is kind of… I mean, I agree, especially if Mikhail also made a comment here, I mean, he approved it, and he is the author of these specs, so I think it's fine, we can just merge this.
Chase Wright:I mean, I did ask in, in the steel testing for all the Consensus Layer clients to look. I asked for everyone to look at it. I don't… I didn't really get any feedback.
Felix (Geth):It shouldn't make too much difference for them.
Chase Wright:It's just an error code, right?
Felix (Geth):So, yeah. I mean, it's okay. Let's just see how it… what it does to the test. I mean, for now, I think we can just… I mean, we can purchase. Mika gave the okay, so I think that's enough.
Felix (Geth):We don't have to raise it all the way to the top with this one.
Felix (Geth):There's the, this one.
Felix (Geth):This is kind of hard to make a decision on, I feel.
Felix (Geth):I mean, basically nobody has commented on this, so…
Felix (Geth):Basically, from a workflow perspective, this pull request or this issue is…
Felix (Geth):Asking us to consider adding a method.
Felix (Geth):But… this…
Felix (Geth):there are no further comments on this issue, so it's a bit like, what are we supposed to do here? We can consider it.
Felix (Geth):But… that doesn't… Have any action.
Chase Wright:Yeah, I think we can just leave this one for now.
Felix (Geth):Yeah, this is not, like, an actionable issue for us now.
Felix (Geth):This one… Yes, this is good, Juan.
Felix (Geth):I actually put the triage label, but I put that last year, so I guess we can remove that now.
Felix (Geth):it, is that…
Felix (Geth):The problem is that the delegations… I mean, the authorizations, sorry, require a signature, and there have been some attempts from users to raise this to us, that they would like to
Felix (Geth):Specify authorizations when, for example, estimating the gas, which are not signed, so that they do not have to
Felix (Geth):pre-sign an authorization when it could fail, or something like that. So it has a…
Felix (Geth):But the problem is that the EIP7702 does not specify a schema for these
Felix (Geth):basically unsigned authorization, so we would have to invent something. Basically.
Felix (Geth):just to refresh everyone's memory here a little bit, I'm not sure if everyone is super aware of what this looks like, but basically for EIP7702,
Felix (Geth):We have these…
Felix (Geth):Yeah.
Felix (Geth):I'm not sure. It doesn't have, like, a clear place that I can point to right now, so…
Felix (Geth):I guess we can also look here into our own spec.
Felix (Geth):And,
Felix (Geth):So, yeah, the 7702 transaction has the authorization list, and each authorization here has a chain ID, nonce, and address, and then it has these values, which are the signature values, and these values are required. So, the authorization list…
Felix (Geth):It's also…
Felix (Geth):an input parameter to, a call, because for the… for these ETH call operations and, ETH estimate gas, we…
Felix (Geth):basically, The input is…
Felix (Geth):Basically, a… what's called a generic transaction.
Felix (Geth):And I'm not 100% sure where this is defined, but yeah, so it's defined here, and the generic transaction contains an authorization list. So now the problem is.
Felix (Geth):this would be a case where the input to ETHC call and the input to send transaction presumably differ
Felix (Geth):In the sense that
Felix (Geth):For when sending a transaction, you want them to submit a signed authorization, whereas when they are performing a call, you want them to submit this other type of authorization that
Felix (Geth):Basically, not signed, but it specifies
Felix (Geth):who is the signer? Because, unfortunately, for the 7702 authorizations, the signer address is determined from the signature itself. So basically, we would need another version of the authorization list, which contains, instead of these fields, contains something like the,
Felix (Geth):sender address, or something, and then this would be the input to the ETH call, so it would be kind of a larger spec change.
Felix (Geth):yeah, anyway, that's what this is about. I can also… I mean, to be honest, I didn't elaborate on it too much in the issue, I just made it more like a note, because this came up a bunch of times also in Geth development, that people were asking about this feature, and…
Felix (Geth):I was just thinking, yeah, at some point we will get to this, so that's why I made the note. Anyway…
Felix (Geth):I don't know how big the need is for this to be there. I mean, we don't get a lot of questions about it, definitely. Just recently, I think we got one. Someone asked about it again, so…
Felix (Geth):Does anyone have an input on this, or…
Chase Wright:I mean, so it just… it sounds like basically what you're saying is we need to extend the schema to have a… a sudo authorization list that accepts a sender address.
Felix (Geth):Yes, and then we need to make sure that, basically, in general, it could be an opportunity to clean up a little bit the schema for the call input data to distinguish it from the transactions.
Chase Wright:Because…
Felix (Geth):The input to a call is subtly different from
Felix (Geth):a real transaction, also in other ways. For example, this is something that is, I think, also a little bit confusing. So, for example, here in this… in the schema… on the schema side, we have this generic transaction.
Felix (Geth):That is supposed to contain the fields which are…
Felix (Geth):generic to all types. So this is sort of, if you will, it's the base type of all transactions.
Felix (Geth):And then…
Felix (Geth):here you have it, like, the way we define transactions, generally, I always found that a bit obtuse in some ways, but I mean, I mean, some other people might consider it elegant, but basically it has…
Felix (Geth):We have this huge alternation here that basically has these complex objects, like one for each transaction type, and then the types each define
Felix (Geth):Some of their own fields, but then they also have They also include…
Felix (Geth):So, for example, here we have the signed transaction, and that has the signature values, the V, R, and S, and also includes, via the all of construction, the fields of the…
Felix (Geth):Unsigned legacy transaction, which… let's see where that is… Not super sure.
Felix (Geth):Yeah. So, and then that one…
Felix (Geth):So, interestingly, here we repeat it, so we actually don't use this generic transaction too much.
Felix (Geth):It's a bit like… Yeah, so if we… if we see the… the generic transaction, Is…
Felix (Geth):Hmm. Yeah, so that's the… this is kind of the problem. So the problem is that…
Felix (Geth):We have multiple methods. We have, for example, the method ETHSignTransaction.
Felix (Geth):Technically, that's, like, a whole other can of worms, why we even have that, but this one takes the generic transaction right now, and it's the same for the…
Felix (Geth):ETH send transaction, which also takes a generic transaction, but also ETHC call and ETH estimate guess, they also use generic transaction. So basically, we would have to come up with another schema that is not called generic transaction, but something like call input or something.
Felix (Geth):But it would be almost the same as generic transaction, just it has some differences, including the authorization list, and then possibly in the future, more differences will come up.
Felix (Geth):We actually had, in the past, some more questions like this, like, can certain things be supported in the call, which are not supported in transaction? Like, it just sometimes comes up in anyways.
Felix (Geth):Yeah, I don't want to dwell on this too much, I mean…
Felix (Geth):we don't have that much time on the call, and also I was late, so I'm just curious if… if…
Felix (Geth):Anyone has some input here, like, maybe from Erigon, or I don't know.
Tullio | Erigon:Yeah, I think this could be a good chance to define, I don't know, something like a generic call type, which applies to the
Tullio | Erigon:If coal, if, estimate, gas.
Tullio | Erigon:And… probably others, I don't know, cold bundles, if… all things like that.
Tullio | Erigon:I think it depends… A lot on…
Tullio | Erigon:how much… how many requests we have for this, I think, if it's a… And…
Felix (Geth):Yeah, I mean, you could search it in your own issue tracker, so this is maybe something… how I would like to end this discussion now, it's like, I'm not sure if also your man's on the call, but for sure, you guys sometimes will get some requests like this also.
Felix (Geth):So, we can just take a… take a note here test.
Felix (Geth):So, yeah, and I mean, I would just request that you guys could somehow maybe make a comment here on the issue or something, if you… if you find it useful, or if you want to…
Felix (Geth):if you want this, and I mean, we can certainly make this change, but… I mean, the need is not very pressing, let me say it like that.
Felix (Geth):It's just a nitpicky kind of thing, where it would be nice, but yeah.
Mercy Boma Naps-Nkari:We can also drop a like on the, channel, the Zocuson channel.
Felix (Geth):No, I mean, possibly. I'm just wondering if, really, there are that many people who really deeply care about specifying authorizations in ETHCall.
Felix (Geth):One of the things that we noted is that, at least in Goy theorem, we also have a feature in ETHCALL which allows overriding the state, which means it… which makes this redundant in some ways, because you can just install the delegations to the state directly via the overrides, or if you use ETH Simulatev1, you can also just
Felix (Geth):overwrite.
Felix (Geth):the state to have the delegations as if the authorizations have succeeded. So, in some ways, this is also redundant with this.
Felix (Geth):this is maybe the other thing we should consider, is that if there is some kind of override facility for ETHCall, which I'm actually not sure how common that is, like, that would be good to have a survey on at some point, like, which clients support this, or if this is now fully made redundant by ETH Simulate, or…
Felix (Geth):We just have to… If you can use ETH Simulate, then you don't need this.
Felix (Geth):Because you can just… You can just pretend that these authorizations happened by changing the state.
Felix (Geth):Okay, I think we discussed it enough, let's just continue, because we need to get through this.
Felix (Geth):All of these things. Getstoragevalues method, this was added in getth.
Felix (Geth):Now, CINA has regenerated the tests.
Felix (Geth):Is there any other client who was agreed to adding this?
Tullio | Erigon:Yeah, we added it in Erigon as well.
Chase Wright:I think Reth added it, too, so…
Felix (Geth):Oh, yeah?
Chase Wright:I think so.
Chase Wright:Was that in one of their release notes?
Felix (Geth):Yeah, I mean, it says here, Reth has it, there's some… yeah, it was added in Erigon.
Felix (Geth):Yeah, here Chase is giving the statement that he doesn't like the batching. Well, okay.
Felix (Geth):Anyway, yeah.
Chase Wright:I said, I like the method because it removes the requirement to use a JSON RPC batch call.
Felix (Geth):Yeah, but I mean, the batch color would be the same, no?
Chase Wright:N-no.
Felix (Geth):Can you?
Felix (Geth):Okay.
Felix (Geth):I mean, it's… conceptually, it's the same.
Chase Wright:It is… so, I mean, I can go over all the reasons why I hate bash calls if you… if you want me to, but I did… I did lay out…
Chase Wright:Some of the benefits.
Felix (Geth):I mean, yeah, I… Definitely, it gives…
Felix (Geth):it's more efficient, yeah. If anyone has the need to read many storage values.
Felix (Geth):That would be, like, the question, how common that is, but I guess it is common enough that we are considering to add this method now.
Felix (Geth):So, yeah, I mean…
Chase Wright:So the funny thing is, shortly after this came out, someone in one of the RETH telegrams was like, hey, I need to make these thousands of git storage act calls. And I was like, here, try this method.
Felix (Geth):Yeah, so it's nice, I mean, if it was already added. Like, I'm okay with it, like I said,
Felix (Geth):Yeah, so what should I do now here? Like, this should be merged, or this…
Felix (Geth):Is this, like, good now, or does it require further consensus from anyone, or…
Chase Wright:I mean, as far as I can tell, it's been implemented in most clients. I don't know if it's 100% of the clients, but it's most of them, and…
Chase Wright:Everyone seems on board, so I don't have a problem with it, but…
Felix (Geth):Yeah, I mean, definitely, okay, so basically it has here the storage requests, which is an array of…
Felix (Geth):the keys?
Felix (Geth):And…
Felix (Geth):Wait, is this schema actually correct?
Felix (Geth):Because…
Felix (Geth):Oh, I see. Yeah, it's okay, I, you're right. It has the additional properties, because each key in the object is… oh yeah, this is kind of fancy, we, yeah, okay, that makes sense.
Felix (Geth):The example is definitely required for this one, though, like, to really understand it. And then the return value is also like that, yeah?
Felix (Geth):Just, it gives the values, okay.
Felix (Geth):Yeah, well, that's nice. Oh, and empty request is not allowed?
Felix (Geth):Is that, like, a… Is that an expected…
Chase Wright:I mean, it is… those are generated from RPC TestGen.
Felix (Geth):I know, I know, I know, I'm just curious if this is… I mean, I guess Sina should now comment on this.
sina:Yeah, I mean, it's… it's not useful, for sure.
Felix (Geth):No, it's just more like the question, like, should it be an air war, or…
sina:I don't have a strong opinion on this, I… I figured that…
sina:I mean, I don't think anybody would want to do this, and if they did, it's a mistake, and they should kind of realize it, but…
Felix (Geth):Mmm, yeah, okay.
Felix (Geth):I can get by with this, but then anyway, we have to, at some point, document… I mean, one problem is that this is not a documented behavior in the spec.
Felix (Geth):And, I mean, yeah, there's a test for it, which is great, but it's.
sina:It is required, so the field is, I believe, marked as required.
sina:Doesn't that make it… And then the request…
Felix (Geth):That means that… that's a bit strange, like, you… you can't really, like, require…
Felix (Geth):it to be noted. Yeah, okay. Yeah, okay, I know.
sina:I don't know how I can express these semantics.
Felix (Geth):And you just have to put.
sina:in this… Gorgeous.
Felix (Geth):like, in the comment, it just has to say, like, this has… should not be empty, just so we have a reference of it in the spec. Because, I mean, yeah, we have the test, so that's good. The test kind of clarifies the semantics of it, but then we get into these kinds of debates again, like, oh yeah, Geth has it like this, so that's why we have to do it like this.
Felix (Geth):I don't… I don't like this. That's… that's the thing, we have to… it has to be more, like…
Felix (Geth):specified. Or maybe there is actually even a way in JSON schema to express this constraint.
Felix (Geth):Although, I don't know how to do that myself.
Felix (Geth):And seems the JSON schema experts are not on the call today.
Felix (Geth):So, yeah.
sina:I… I… I… yeah. I didn't give it too much thought, but I also didn't think of a better way to express this.
Felix (Geth):Yeah, somehow it would be nice to at least have some… some… something…
sina:Do you want me to add a comment?
Felix (Geth):I mean, as in, like, a comment, as in, like, text to the spec. Yeah, yeah, yeah.
Felix (Geth):Yeah.
Felix (Geth):I'm not sure… I think it will require some… I mean, I will merge this.
Felix (Geth):it looks okay to me, and it's, like, one of these things where we basically just have everything in one PR, which is pretty nice. We have the test generator, we have the test, we have the spec update, like, all in one PR. That's really nice, like, that's kind of how it's supposed to go now, but…
Felix (Geth):So I like this, but definitely we should be more precise in spec here.
Felix (Geth):Okay, let's go to the next one. We have allow zero safe…
Felix (Geth):block hash and finalized block. Oh yeah, this is…
Felix (Geth):I think kind of an important one.
Felix (Geth):The engine API people are still discussing this.
Felix (Geth):I would weakly prefer not to mess with the engine API semantics on this call, because the engine API is kind of a sensitive thing. Like, with the earlier PR, I agree, it was more like a deepfix and some old method, like…
Felix (Geth):I'm okay with that, but when it comes to these things, they need to figure it out on the consensus layer side first.
Felix (Geth):We cannot… we cannot preclude this decision here.
Felix (Geth):And either way, Mikhail is able to also merge it.
Felix (Geth):So they are able to just make this change if they require it.
Felix (Geth):This may be also a general thing for the future, that, like, when it comes to these engine API decisions, they are kind of more strictly bound to the ACD consensus than…
Felix (Geth):just RPC API changes.
Felix (Geth):ETH capabilities discovery, I think it's too big to just make a quick decision on this.
Felix (Geth):there is… some discussion has happened. Chase says he doesn't like it. Senor says… Tina seems to, at least…
Felix (Geth):Like, it somehow… The author is giving some… Compromises… Maybe…
sina:I may.
Felix (Geth):You can take it away and just talk a bit about it.
Chase Wright:So, I didn't like it originally because of the way that it exposed configurations of the nodes, and he's since broken it out into,
Chase Wright:two separate ideas. One is, like, hey, an admin namespace that might do that, and I said, okay, but good luck. This PR, as it stands right now, is focused almost entirely on the node responding with its pruning settings, basically. And so…
Chase Wright:I… I don't really have a problem with that. I think it's interesting, I think it could be useful for a lot of use cases, and
Chase Wright:this particular use case DRPC has is, like, a valid use case, but making a decision on whether or not it's good or not, I think
Chase Wright:like, Felix, you're a core dev for Geth, so, like, I would love to have your opinion on whether or not you think this is viable and doable. And then, Sina, I know you have comments as well, so go ahead.
Felix (Geth):I mean, it comes down to what I… we have discussed a couple times before, that
Felix (Geth):it's… I originally also had an idea to add an endpoint that would respond with the current… the node's current, sort of, like…
Felix (Geth):tasks.
Felix (Geth):which are a bit beyond just the syncing, because we have ETH syncing right now, which has a sort of unspecified response. Basically, it's just supposed to tell if the node is syncing at all, and then while it is syncing, it is supposed to report on the progress of that.
Felix (Geth):But how this progress is actually reported, like, what goes into the progress and what constitutes syncing is very hard to capture. So I was, at some point, hoping that we could add an endpoint that would
Felix (Geth):give information about what the node is currently doing, like, for example, if it's indexing the transactions.
Felix (Geth):the… some tool should be aware of that, like, it should know that, yeah, the currently transactions are not available from this node, because it is still, like.
Felix (Geth):doing something related to the transactions, sort of. But then.
Felix (Geth):we don't really have a good way of capturing this in the current API. I mean, another thing would be to make certain API methods unavailable until
Felix (Geth):The respective index is built, or things like that.
Felix (Geth):kind of goes back to these, like, for example, in HTTP, we have this, like, resource unavailable type of status codes, where
Felix (Geth):it's… You know, it might actually come back online later, for example.
Felix (Geth):Whereas it's not, like, it's different from not found. Like, if you now, for example, query a get node with getTransactionByHash.
Felix (Geth):and it returns null, you don't know, was this transaction pruned, or is it still, like, figuring out where this transaction is, or is it just, like, legitimately not existing in the world? You just cannot know these distinctions from this return value. And…
Felix (Geth):I think this method is a step in the right direction, but I think it warrants further discussion also among the clients, because when I proposed my method, everyone was saying, yeah, this is just way too deep, and, like, every client is totally different anyway, so…
Felix (Geth):how can we ever find any common ground on, like, how this can be documented? I do think that now that this approach is kind of better, because it gives
Felix (Geth):it kind of reports it from the API point of view. So, and this is… would be my input in this. It basically has to…
Felix (Geth):whatever is reported through this method has to be relatable to other methods in the API, so it somehow should say that, like, this node can currently serve
Felix (Geth):ETH get transaction by hash in this range, for example. And then that's useful from the API perspective, because you can know exactly, yeah, okay, I cannot call ETH getTransactionByHash right now on this endpoint, because it is not available.
Felix (Geth):And I think that's what they want, also. It's just that they encoded it here in this…
Felix (Geth):So we have to basically come to some kind of abstract model of the node here that works for everyone. And… I don't think we can just do that right now. But, so this is something that would have to be discussed in a wider call with other people. Here, they are… they have some kind of…
Felix (Geth):they are also talking about the deletion strategies and things like that. I think that's not…
Felix (Geth):Maybe not the right way to do it.
Chase Wright:Okay, but what they're trying to achieve is not what you were envisioning, and all the ETH syncing stuff that you just went into, is not their objective with this particular method.
Chase Wright:What their objective with this particular method is to determine
Chase Wright:the oldest data available on the node and its pruning strategy. That is their objective for this method.
Felix (Geth):Yeah, I understand it. My point is just that this kind of changes over time. Like, this is a…
Felix (Geth):this… it… it… even, like, whatever they come up with isn't… probably isn't gonna capture all the nuances of, like, the data being available or not available. It's not as simple in the notes as saying, like, yeah, we have it up to this block. Like, sometimes it is, but, like, sometimes it… also, it's not, so…
Felix (Geth):then it's, like, we have to find a model that really captures it, or we have to figure out, like, how we can relate it back to the… like, for example, what does it mean when it says TX?
Felix (Geth):Like, for example, here they have TX disabled, for example. What does that mean, for example?
Felix (Geth):Does that…
sina:And at least that means that it cannot serve getTransactionByHash.
Felix (Geth):So that's what this means, but we have to document that somehow, like, that is something that we have to talk about, like, what is the meaning of this, which operations are affected by this, when it comes… I mean, we are the definer of these API methods, so we have to make sure that there is some kind of… I mean, in our heads, I mean, it's perfectly clear that, yeah.
Felix (Geth):get transaction by hash requires an index, so you have to have that index, and if you don't have that index, then this method is somehow not operational. But this…
Felix (Geth):knowledge has to be surfaced somehow into the specification, and it's the same with the logs, for example. Like, the log indexing, it has more things than just, like, are the logs there or not? You can also have, like, the index goes only back that far, but you can still actually query it further in other methods and things like that. So, I would say that…
sina:I… can you… can you perhaps give a concrete example of
sina:Of how this model would not be sufficient.
Felix (Geth):I'm mostly the same.
sina:My understanding of it is that basically it defines these resources that are common between all the nodes, or all the different clients, and that you can get or access through the API, and because all the clients are…
sina:Moving towards partially keeping them, then it becomes kind of crucial for the users to find out
sina:what the node they're interacting with is storing in their database. And this is what we came to with regards to the list of all such resources. I couldn't think of anything
sina:any… any other resource here. And then, like, yeah, you have to cover different strategies, because, sometimes the notes
sina:the note is storing the full history. Sometimes they have it, let's say, till
sina:Like, let's say they have pre-merge data, in case of block and receipt.
sina:Or they have this window,
sina:Strategy, that they keep only the latest 90,000 blocks.
sina:But yeah, I think, like, one of the things that… I guess one of the assumptions here is that the node has to be synced, and any… any of this
sina:Any of these, these assumptions are kind of false if the node is still Doing the sync.
sina:But other than that…
Felix (Geth):I mean, I like the model where it's about the resources, but what I'm trying to say is that this requires then more… anyway… I mean, first of all, we have to document it way more. Obviously, it could also happen after merging the PR, but knowing ourselves, this is kind of a big effort that is, like.
Felix (Geth):coming up here. We would basically… there would have to be at least a document that explains why these resources are there, like, you know, we can add, like, a README or something. Nowadays, we actually have a capability of…
Felix (Geth):putting more text in the documentation site for these kinds of things. So there is actually the way now to,
Felix (Geth):Have here these dogs.
Felix (Geth):like, either here, or in the API, we have the methods, and inside of each method, we actually have this Markdown file that would explain more about the method, for example.
Felix (Geth):So, we would need some kind of document that specifies, okay, these are the resource types, and this is what this resource type represents in terms of the API, and I think that would be, like, for me, the minimum thing that really has to happen for this method is that
Felix (Geth):yes, it's good to have identified these abstract resources, but we have to specify the impact of these resources being available or not available on the API, and also maybe go more into detail about what, yeah, in general, like, what it means to have this resource available.
Felix (Geth):And then finally, I would say, with this deletion strategy, or this oldest block,
Felix (Geth):most resources in Ethereum, at least when it comes to the historical data, they are somehow related to,
Felix (Geth):to the block ranges. So, I think overall, it's a good idea to define the availability of these resources as a function of the chain history. But,
Felix (Geth):I mean, one of the things is also, for example, here's the state resource. That's a good question. Like, what does that actually mean? Like, probably this means get balance or something, yeah?
sina:It balance is called basis.
Felix (Geth):stop.
sina:Okay, so then, basically, it's like, for the… for getth, what we would return here is that…
Felix (Geth):the…
Felix (Geth):the state would be available for the last 128 blocks, so every time you query it, it would give you
Felix (Geth):the oldest block, which is, like, head minus 128, and then… or something like that, and then it would give deletion strategy window retention blocks 128, is that correct?
sina:Yep, exactly.
sina:Unless you're running an archive node, or you manually configured guest to…
Felix (Geth):For the tri notes, I mean, this is also kind of nice, basically, but this is already getting a bit… I wouldn't really call it trinotes, maybe you could call it, like, state proofs or something.
Felix (Geth):So that's, like, a resource. And yeah, you can have that in a different window now, and… but for some archive nodes, it's tied with the state, so it's like… I… I mean, I get the idea.
Felix (Geth):I do think that this, like, deletion strategy with the window and so on is a bit…
Felix (Geth):strange, we could just give, like, a list of block ranges, for example, and I think that would be enough.
Felix (Geth):Right? I mean…
Felix (Geth):If we… if we give away the strategy here, then it's a bit strange, because then we have to be able to capture any node configuration somehow by the strategy, and for example, in Geth.
Felix (Geth):For some of the things, like, for example, for the blocks, we can have kind of this, like, spotty history where, like, certain ranges are available and other ranges are not available. And this cannot be captured by any of the strategies here, right?
sina:Oh, if you have imported the error files.
Felix (Geth):For example, if you have…
sina:Some error files and some…
Felix (Geth):Yeah, so stuff like that. And then it already becomes a bit sketchy, and who knows what's gonna happen, like, you know, in the future. Maybe there's gonna be more things like that, where the protocol will require us to keep only, like, a sparse
Felix (Geth):amount of history for some reason, or they can… so, I think this is a bit, like, of a slippery slope with defining these strategies explicitly, and it would be better to keep it simple and just say we have, like, lists of ranges which we have currently available.
sina:I think the only issue… I get what you're, hinting at. I think the only issue I have with that is
sina:Let's say with date, you say, okay, we have the block range, N minus 128 to N.
sina:Then, this is a moving target, it's like, every block, it is updated.
Felix (Geth):Yeah, exactly. And it's… it's hard to capture that…
sina:in the result, unless you specify that it's a kind of window delete strategy.
Felix (Geth):I understand it's…
Felix (Geth):That was, like, the intention behind it anyway, because they can basically query it once, and then they will just apply, like, on the load balancer, they will take this definition, and then they will just apply it for themselves. Basically, they will have a corresponding model on the load balancer side that models the node's behavior given this strategy.
Felix (Geth):So, this is… I mean, this is coming from the load balancer author, so obviously they want to know, like, right away, for every request, is this request gonna be available on this node? They don't want to always call ETH capabilities before calling anything. I understand that. So, in that way.
Felix (Geth):It also kind of makes sense.
Felix (Geth):But then it's the question why the oldest block exists, like, I would say, because, I mean, if you just have the strategy, and you know we have always the latest, like, 128, you don't need to know the oldest block. You can just compute it yourself using the strategy.
sina:Yeah, yeah, I think then, you would need to also expose the head, and this is something that I've been thinking about. Like, it would be nice to also return the head block in this, in the result.
sina:And then, if you know the retention blocks and the window, then you can compute the oldest block available.
sina:But then the question is for other types of delete strategy, like in Geth, we have the pre-merge pruning.
sina:then… That's a question, like, how do you…
sina:How do you convey that result?
Felix (Geth):I mean, I think ultimately what… for the load balancers, the best solution would be one where you have this as, like, a subscription, where you access the node, you open the subscription, and whenever there's, like, availability of the resources changes, you get a notification about it.
Felix (Geth):And that way, whenever a new block comes, or, like, the indexing is updated.
Felix (Geth):It will tell you that, like, this resource hasn't changed availability now.
Felix (Geth):Like, we could even make it like that. We can give them, like, these, like, per-resource availability updates all the time, so that
Felix (Geth):when, for example, the change in TX indexing is requested, it will basically give it an up-to-date view all the time. And then the thing is, from the load balancer's point of view, it is acceptable for some requests to fail, especially since almost all requests
Felix (Geth):are anyways read requests, which do not have any kind of adverse effect if they fail. So, if they happen to query the wrong node, which has already moved on or deleted a resource after having delivered the
Felix (Geth):availability update, then, basically, they have to repeat the request with another node.
Felix (Geth):But that's… that's okay. But then we just have to make sure that the API is capable of distinguishing between these cases. For example, for transactions, instead of returning null, if the transaction falls out, it's like what's… that's kind of the issue. We cannot really…
Felix (Geth):Especially for transactions, we don't… we cannot distinguish ourself between, is this transaction truly unavailable, or was it just deleted from the index?
Felix (Geth):We just don't know that.
Felix (Geth):Basically. So…
Felix (Geth):That's the unfortunate thing, then, that, like, if they… if they happen to query the transaction at the wrong time, it may just have fallen out of the index.
sina:Right, with a transaction, it's hard for them to know which block it is in any way, right?
Felix (Geth):Yeah, it's kind of a special case, so we can just… I think we can ignore this problem for now. I would still say that, like, long-term, it would make more sense as a subscription, or, I mean, it does kind of… but I think the discussion is very valuable, and definitely I like it a lot better than my idea of
Felix (Geth):exposing the, like, processes that are going on in the node, and instead going via this route of modeling the abstract resources which are required to serve the API. I think this could actually lead to a very…
Felix (Geth):Viable thing that really helps The users to determine if these requests will be successful or not.
Felix (Geth):And, I mean, in general, we can only ever
Felix (Geth):define the resources which are needed to service the API. So, I mean, the question then becomes, like, is it possible for all the clients to give updates about the availability of these resources, or does it totally not match what other clients are doing? But I think it seems pretty obvious to me that, like, all of these things are basically
Felix (Geth):I mean, one thing that isn't here is the block headers, and I think that's a good thing, because with the block headers, it's always a bit special. Like, block headers don't really exist for the purpose of the RPC API.
Felix (Geth):But they do exist as a separate concept in the protocol, so it's kind of a good thing here that they don't…
Felix (Geth):it doesn't actually have that as a resource, for example. Because then it would be confusing, then we would have to define, yeah, what does it mean for the block headers to be in range, but the blocks are not in range, and all the clients would have to behave the same with that, so… I think it's good the way… like, the way this is defined is nice.
Felix (Geth):But we have to take it forward another time, I feel. This is not gonna just go in now.
Felix (Geth):Okay.
sina:As for… as for concrete feedback for what we can do, I think you suggest that,
sina:Renaming trinods to state proof.
sina:I think there was something else that I'm forgetting.
Felix (Geth):Yeah, well, I was more thinking that it would be nice… like, your idea was nice with, like, giving the head block, and also, having… and then I was saying, like, maybe it should be more like a subscription.
Felix (Geth):Because then, it's maybe more acceptable for the load balancer to also
Felix (Geth):Basically, always res… instead of receiving the strategy, just receiving, like, the up-to-date values from the node.
Felix (Geth):Because they would just, like, whenever it actually changes, they would get a notification. And then, yeah, there is still the possibility of some requests failing, but that will always exist, even if they simulate it on the client side.
sina:Okay.
sina:Yeah, we can, we can, I'm gonna write these on the…
sina:issue on the PR, and we can take it forward.
Felix (Geth):Yeah, thank you.
Felix (Geth):So…
Felix (Geth):This was it for the PRs. We have a lot of these outdated and stale PRs. I don't think we're gonna get to them.
Felix (Geth):To be honest.
Chase Wright:I just posted one in chat, it's… I think it can be merged, it's just one link.
Felix (Geth):That is easy, yeah.
Felix (Geth):Yeah, that's easy.
sina:I have another one that I think can also be merged.
Chase Wright:Yeah, I just posted…
sina:Yeah, this one, exactly.
Mercy Boma Naps-Nkari:Yeah, I also have another one, this one.
Felix (Geth):Oh!
Felix (Geth):Okay I mean, yeah, so this is fine, you know. I think…
Felix (Geth):Okay, so we got that one, so now what was the other one? Okay, so there was 7…
Felix (Geth):763, fill each simulate V1 test with max use gas.
sina:We already added this field to the spec, And… We didn't fill the tests.
Felix (Geth):Oh, so is it currently failing to fill, like, here on the… because I think it should now be filling the tests on the CI.
Felix (Geth):So it's a bit weird that it's not failing.
Felix (Geth):Because as far as I understand, it should…
sina:It's probably because the guest version is not updated.
Felix (Geth):Did you update it in this one?
sina:What? Not really, so… No.
Felix (Geth):This is a… this is a bit… I… I would…
sina:Also, I didn't add the… sorry, I think I also forgot to add the generator.
Felix (Geth):Yeah, but it's still… I mean, that's why, so… but no, is it adding new tests? No, no, no. No, no, it's… But that's a bit weird. I would say we have to investigate why is the test not… why is the CI not failing?
Felix (Geth):I mean, I think we are… basically, we are… we might not be actually filling the tests on the CI.
Felix (Geth):For sure. I think that was, like, supposed to be, like, a goal, but maybe we didn't actually end up implementing that.
Felix (Geth):So…
Chase Wright:I mean, I haven't… I haven't seen any CI… Updates the tests.
Chase Wright:When… at what point would the CI update the test during the PR? It's not about that.
Felix (Geth):detecting that this update modifies the tests in a way that isn't… like, basically, what we want is for the CI to tell us that you are modifying the tests, but the generator would overwrite your modification later. So, basically make…
Chase Wright:But I think the generator is updated, so I think… I think the generator is updated.
Felix (Geth):But not in this PR, no?
sina:I think it's possibly that the generator doesn't need to be.
Chase Wright:Yeah.
sina:Because it doesn't have the… return object.
Chase Wright:Yeah.
Felix (Geth):Yeah, okay, I understand it, but I mean, still, this is like, if I run the generator on the main branch, is it gonna produce this modification, and you are just giving this modification as a PR, or…
Felix (Geth):if I, if I wrote.
Chase Wright:That is my… that is my understanding.
sina:Like, if you have the latest version of Geth, and…
Felix (Geth):Yeah, but the latest version of Geth, this is something, the Geth version is…
Felix (Geth):Let me… let me see it.
Chase Wright:I mean, to answer your question, Geth is failing the JSON RPC compat tests in Hive. It's not 100%.
sina:Yes, yes.
Felix (Geth):Yeah, I understand that, but then… Okay.
Felix (Geth):I'm just filling the tests locally now and seeing if they change.
Felix (Geth):And on the main branch. So if they don't, then this PR requires a further change to make it actually, like, repeatable.
Felix (Geth):Yeah, I understand that Geth is failing him now, so basically that means…
Felix (Geth):I'm not sure, but let me, let me see. So the tests are outdated, is what you're saying?
Chase Wright:Yes.
Felix (Geth):Yeah. Well, I will verify it, yeah.
Chase Wright:Okay.
Felix (Geth):Okay.
Felix (Geth):And then, what was that one from Mercy? There was another one.
Mercy Boma Naps-Nkari:It is.
sina:75 eighths.
Mercy Boma Naps-Nkari:dates.
Felix (Geth):TX pool namespace spec and generator.
Felix (Geth):Yeah, okay.
Felix (Geth):I guess you guys…
Felix (Geth):Hmm.
Felix (Geth):Yeah, the textual summary, I think it's a bit weird.
Felix (Geth):To be honest, This… I… I…
Felix (Geth):I mean, do you really think we should specify this?
Felix (Geth):Especially if we have the other one.
Felix (Geth):Like, that's the thing, if we have, like, TX pool content, why would you need this TXPool inspect? I mean, this was, like, a hack added for Geth, like, a long time ago. I understand that maybe it's useful for some people to call this or so, but…
Felix (Geth):this should never have ended up in any kind of, like, public API, to be honest.
Felix (Geth):Like, this format is just… I don't think we should… we should… we should have that in spec.
Felix (Geth):And also here it says that the string is actually not standardized.
Felix (Geth):Yeah, I think this… we can't have the inspect, basically.
Felix (Geth):Because that's… that's just… this… We shouldn't standardize that one.
Mercy Boma Naps-Nkari:Okay, so I should get rid of that.
Felix (Geth):I think it's more the question of, like, what people get out of this. I mean, this…
Felix (Geth):This… this was added because…
Felix (Geth):basically, it gives the crucial information about the transaction, which is, for some people, this is genuinely what they need. So, we can talk about it here. I mean, we're a couple minutes over time, but I guess whoever is here doesn't really seem to mind that much. So.
Felix (Geth):we have TXPullStatus, which just gives the count. So you can call this, but the information value of this method is very…
Felix (Geth):low, I would say. I mean, yeah, it's useful to see if the transaction pool contains any transactions. Sometimes that's what you need to know.
Felix (Geth):But, yeah, most of the time, I mean, maybe you want to know the actual transactions here. So then…
Felix (Geth):You go in here and you get this, like, Huge…
Felix (Geth):value, so basically the amount of data you're gonna get from the TX pool content method is very large, and it's gonna give you all of this information, like, what is the
Felix (Geth):what's the gas limit of the transaction? Who is it from? What's the transaction hash? What's the input data, what's the non…
Chase Wright:We… we all… we all know this. I think the point here is documenting what all of the clients already do.
Chase Wright:The only one who says, like.
Chase Wright:had any questions is… is Besu, because, like… like, is the… is the point here to…
Chase Wright:re-implement the spec, or is the point to document what already exists, what clients are already doing, and what all the RPC providers already
Chase Wright:report back, and make sure that all the responses match, or… Yeah, but I mean, like, these responses…
Felix (Geth):never, like, I mean, this is just… we cannot even test these responses if it's a… if it's an implementation you find string.
Felix (Geth):I was just kind of trying to, like, lay out a little bit what's the reason why this method exists, like txpool inspect, compared to the txpool content. So I was gonna get there very soon, but, I mean, I know it was maybe a bit too lengthy, what I went into, but…
Felix (Geth):The… my point was more that, like.
Felix (Geth):there is some kind of spectrum of, like, verbosity of response, and, like, for TX pool content, the verbosity is very high, and then for, like, TXPullinspec, the verbosity, I would say, is, like, medium. Like, it gives you the hashes, and it gives you some amount of the information about each transaction, but it doesn't give you all.
Felix (Geth):Like, here, it only has the sender, and then it has a breakdown of the fees.
Felix (Geth):So…
Felix (Geth):this is… but this response is, like, specific to Geth, maybe. So, it's like, another client could return some other info here, so that makes it completely unusable, except for, like, you know, for debugging the client, which would put it more to the debug namespace or something. Like, it's not…
Felix (Geth):I don't think we should specify a method in this namespace that, like, you know, is only for debugging the clients and gives, like, a…
Felix (Geth):unreliable response.
Felix (Geth):So, in a way, I'm a bit…
Chase Wright:But, like, what would your proposal be, then?
Chase Wright:to… to just not document it, or to go into GoEthereum and be like, delete this method, because… I don't know what the alternative is.
Felix (Geth):I think the alternative is, like, this has always been our thing, is, like, we have to, for example, also with eSimulate and so on, just, like, we have to drive the process forward to the point where we… we are able to come up with a method definition that captures what users really want to do with these outputs.
Felix (Geth):And then we have to make everyone implement the, like, improved version of the method that actually does what people want to do, instead of, like, documenting hacks in Geth from, like.
Felix (Geth):10 years ago.
Felix (Geth):You know what I mean? Like, this is… this…
Mercy Boma Naps-Nkari:I understand what you're saying, but the problem is, trying to get, people that are not clients seems to actually, like, have an input on this. It's pretty, difficult.
Felix (Geth):Yeah, I mean, we can kind of, like, infer it a little bit, like, for example, like, I think the main thing is, if you have TX pool content, it's basically the same as having txpool inspect, you get more data from TX pool content, so if you have the content.
Felix (Geth):which has a structured output that gives you the… I don't really fully understand what is this with the strings here, like this…
Felix (Geth):Appears to be some kind of, like.
Felix (Geth):priority or something in the TX pool, or I don't know.
Mercy Boma Naps-Nkari:So, the…
Felix (Geth):Is it…
Mercy Boma Naps-Nkari:Strings are more like, they match what, GET has in, in its implementation, so…
Felix (Geth):Yeah, exactly, so that's what I meant. It's like, basically we're back to just, like, you know, replicating what Geth has. I understand that, like, yes, it can be valuable to, like, capture it in the spec somehow, so that there's at least a spec for it, but I think also have to… we have to see that, like, what we have in Geth isn't always, you know, like, the best thing in the world. It's just, like, honestly, sometimes it's just… nobody really…
Felix (Geth):like, from the perspective of having, like, a standardized API, this is never how these things were supposed to be used. It's like, sometimes, literally, these methods were added because someone was just in the middle of debugging something, so they just added a little method to, like…
Felix (Geth):print it out, and then, like, years later, people started using that method for, like, production purposes, and now we're in the current setup. That's not…
Felix (Geth):but I don't think then the spec process has to necessarily repeat that. I understand that
Felix (Geth):it feels like progress to just add the method to the spec, because then, you know, it's added and everyone's using it, but I also feel like we have a responsibility here to actually ensure the API is, like, sane, and we're not just specifying all this, like, weird stuff that we're gonna have a really hard time removing later.
Felix (Geth):Like, we're just cementing it in.
Tullio | Erigon:Felix, I agree with your take here, but then I would suggest maybe you could move
Tullio | Erigon:TEX pull inspect.
Tullio | Erigon:in a… in a GEF private namespace, something like GEF takes full inspect. We have some of them in Erigon, under Erigon namespace, and I think it makes it more clear that it's something specific of the node.
Felix (Geth):No, that's true, that's true. I also definitely think that, like, especially with TXBone spec, but also some of the debug methods, the stuff that has been added there over the years is not good, and it has led to this situation where, for example, it is technically totally unsafe to
Felix (Geth):enable the debug namespace to anything, but still people require certain functionality from it, so then they have to filter the methods and do all these things.
Felix (Geth):I understand that this is a thing that should be fixed.
Felix (Geth):For sure. So, but here, I am more arguing from the perspective of the spec.
Tullio | Erigon:Yeah, yeah, yeah, yeah, and I agree on that, 100%.
Felix (Geth):Yeah, so… I mean, definitely, this one is here giving,
Felix (Geth):Oh, so they have the nonce, yeah, okay, I understand.
Felix (Geth):Yeah, that's a bit crazy, actually.
Felix (Geth):So this… the whole thing is, like, this map is basically keyed by the… by the…
Felix (Geth):Sender address on the first level, and then by the nonce on the second level.
Felix (Geth):So you… if you have more than one transaction from the same sender, then instead of them being an array, you can directly access them by the nodes. I guess that kind of makes sense, like, in some ways.
Felix (Geth):I think we could… it's actually not just a priority, it's just, like, a… gives you all the… all the… it gives you, like, a…
Felix (Geth):direct access by nonsense, I think that's okay.
Felix (Geth):Like, the content method is probably okay.
Felix (Geth):Yeah, the pagination, I also agree that it's not really valuable to have the pagination.
Felix (Geth):Because we cannot freeze the TX pool content in a meaningful way, it's always gonna be a snapshot.
Felix (Geth):But yeah, I mean…
Felix (Geth):Can we just agree not to standardize the TX pool inspect? Like, is that a reasonable thing, or do you guys really wanna…
Tullio | Erigon:I agree with that, but then I would suggest to move it in another namespace, so it won't come back in the future.
Felix (Geth):Yeah, that'.
Tullio | Erigon:I mean…
Felix (Geth):That's true. I… this is… but this… this would be on us in Get, then, to, like, to do that. So that's… that's something…
Felix (Geth):For sure.
Chase Wright:Yeah, so, like, I could just speak, you know, from my experience at QuickNode RPC Provider, is, like, if guest supports something.
Chase Wright:then we have to support it, you know what I mean? And, like, if we have to support it, but then we want to run Erigon or whatever, then… and, like…
Chase Wright:we can't, right? Like, that's the situation that people find themselves in when they're running RPC services, is that if guest supports it, and the other guys don't, then it ties their hands, right? And so… Yeah.
Chase Wright:So that's where… that's where I'm coming from, is like, yeah, I… I fully agree with what Julio's saying, is like, if we're not gonna document it, then it needs to… then it needs to move.
Felix (Geth):I mean, I'm okay with moving it. I'm okay with breaking people's usage of TXPool Inspect. It is not… it is going to create some disruption, for sure. We will have to make sure that people have some kind of…
Felix (Geth):fallback, but the fallback is… I mean, TX pool content is, like, superior in many ways, and the only way where it's not superior is if the transaction pool has so many objects that
Felix (Geth):requesting them all through this API is too much. But then what we should have is, like, another version of TXPool content that just gives less data, which I think what people are using with TxPool Inspect
Felix (Geth):is it gives them a very quick way of seeing which transactions are the top-paying ones based on the fees. So it basically gives you an overview of
Felix (Geth):Transaction hashes, they're… the sender, the nonce, and the fees, right? Like, that's…
Felix (Geth):I think what this is about.
Felix (Geth):Or is that even… does it even contain… I'm not sure what it contains. Anyway, I think it… it… it just…
Felix (Geth):we have to, unfortunately, I think, defer it. The points were very good, and I mean, I'm totally on board with adding this specification for this namespace.
Felix (Geth):just with this inspect method, I think it's kind of bad.
Felix (Geth):And it will be bad in the testing as well, because then we always have to resort back to the spec-only tests, which… I mean, in this case, the spec-only tests will be kind of perfect, but…
Felix (Geth):It will basically just say, yeah, it's a string, and that's it. We don't actually know what's in it.
Felix (Geth):So here, it would have to say… it would have to say spec only, because then it doesn't check the actual text.
Felix (Geth):Okay Right. Yeah, thank you. We will take care of the remaining PRs. It wasn't, that many.
Felix (Geth):So, yeah, okay, I think we should end the call now.
Mercy Boma Naps-Nkari:Yeah, thank you very much, have a nice day.
Chase Wright:Thank you, Bar.
Tullio | Erigon:Thank you, bye.
Chat Logs
00:03:34
lightclient:hehe
00:06:28
Mercy Boma Naps-Nkari:return nil, fmt.Errorf("error-groups[%d]: %w", i, err)
00:07:37
Mercy Boma Naps-Nkari:return nil, fmt.Errorf("failed to parse error groups: %v", err)
00:08:14
Mercy Boma Naps-Nkari:https://github.com/ethereum/execution-apis/pull/650
00:10:25
Mercy Boma Naps-Nkari:https://github.com/ethereum/execution-apis/pull/761
00:11:21
Mercy Boma Naps-Nkari:https://github.com/ethereum/execution-apis/pull/767
00:12:08
Mercy Boma Naps-Nkari:Hello @lightclient
00:13:06
Chase Wright:https://github.com/ethereum/execution-apis/pull/762
00:18:24
Felix (Geth):sorry I didn't see the call is on!
00:19:08
Mercy Boma Naps-Nkari:https://github.com/ethereum/pm/issues/1958
01:03:26
Mercy Boma Naps-Nkari:Maybe we can bring it up to ACDE?
01:03:33
Chase Wright:headBlock
01:04:26
Chase Wright:https://github.com/ethereum/execution-apis/pull/767
01:04:51
Chase Wright:https://github.com/ethereum/execution-apis/pull/763
01:04:58
Mercy Boma Naps-Nkari:https://github.com/ethereum/execution-apis/pull/758
01:08:59
Chase Wright:https://hive.ethpandaops.io/#/test/generic/1773035165-50a9106b64596957d3f4256d192c71ae?testnumber=112
01:09:09
Simsonraj Easvarasakthi:gotta drop, thanks everyone
Summary
8 highlights
· 4 action itemsExperimental
Summary
8 highlights · 4 action itemsExperimentalerror codes
open prs
- PR #761 (fork choice error code) approved; requires coordinated Hive merge00:23:52
- eth_getStorageValues implemented in Geth, Erigon, Reth; tests regenerated00:37:00
- eth_capabilities needs abstract resource model; subscription approach preferred over strategies00:46:46
- txpool namespace: inspect method not standardizable due to unstandardized string format01:10:39
versioning discussion
- Versioning deferred; focus shifted to GitHub release (V1 or alpha)00:17:32
engine api
- Engine API PRs require consensus layer approval; not decided on RPC call00:43:41
Decisions
Action Items
- Simsonraj: Address error wrapping syntax and group collision validation00:04:47
- Felix: Felix to review error codes PR output after call00:08:34
- Sina: Add non-empty requirement comment to eth_getStorageValues spec00:42:08
- Sina: Document eth_capabilities resource model; consider subscription approach01:00:48