eth_multicall Meeting, Mar 17, 2025

eth_multicall and eth_simulate Meetings · 17 Mar 2025 · 19:41

A meeting of the developers working on eth_multicall and its successor eth_simulate, held on 17 March 2025. Client and tooling teams compare implementations and work on the specification for simulating transactions.

Topics

From eth_multicall and eth_simulate Meetings, hosted by Ethereum Foundation.

Transcript

hello yeah hi hey anyway it simulate updates I was on holiday last week so I don't have any updates no update from me a few updates from side uh we have implemented two dressing end points U par style and g style also uh I was looking through this has mismatch issue today I have found out that NE mind does not has does not incorporate request has where get does so that might be a problem so very quickly I'll check it other than that everything matching so we are not matching request hash Nei

mind response there is no request whether from while in get response it has empty request okay okay yeah we should probably look at this um if you can send me some details I'll be happy to check it where can I find the the Deb or the tracing endpoint andless there some kind of specification for it on what what is the input and what is the output of both of those methods yeah okay uh these are the outputs and inputs the pr is not merged yet but anyway I can paste the output and input here yeah I'm doing a small review on

this PR so I think it will be approved today so we can merge it soon is this before merging I think you should approve that Cena should approve that it looks kind of the same that he would implement it or is there anything anything that we need to change with par I don't know would we have somebody else who could check it unless CA has been working par the tracing as well are there other not are supporting par tracing like red or I think M

exactly so I have tested the outputs yeah just looking at them I guess you look at those yet uh I'm looking now slightly confused I I mean I don't see uh TR it says if you scroll down there's huge amount of blocks and only after that there start to be yeah last can see when stroke logs there up codes yeah this are

really oh I see so we have added stru logs to the call object yeah okay is that through LS same that de has like this what is the PC well that's the number of the up code I guess I haven't been using the debug Trace before so I'm not familiar with this syntax uh yeah I mean the the format looks the same so PC up code gas as call steps I guess the PC is just incremental

number yeah PC is um program counter program counter that's the number instruction that that you are executing M yeah okay um so yeah I mean I guess the question for me is um what about the other types of Tracer like if user wants to do pre-state then where do we return this dataa I mean in the same place what do you mean can you can you say I didn't get that sorry let's say the user wants to do a

pre-state Trace um I'm just pre before the block it yeah exactly it tells you which parts of State you need to execute this transaction um and the values before the block before the is executed so um yeah my question is where do you guys see adding this result um same thing right so for us it's internally you create a different Tracer and they have different kind of results that are basically Json blobs in the end so you will get the same thing as you

would run the pre-state Tracer on a single transaction just now in on multiple transactions in this blocked form yeah okay so basically what you're doing is like you have the calls we have the calls object in the response and you replace that with with the Val with the trace value exactly and it's array because there can be multiple in the same block yeah yeah I mean I think on a high level I'm yeah I think it's it's actually okay yeah is there any extra parameters that we need to pass or is there any settings

for the that we need for the Deb tracing or is it the input is always the same oh uh yeah so we will need some configuration objects like this is what we have in gu we allow you to set a specific Tracer yeah the options objects yeah we added it as a optional parameter same as with the standard tracing M yeah cool I guess in this example that it's not enabled yeah yeah yeah yeah it's not yeah tracing is complicated but we generally have the the same um interface for tracing so there's optional result uh in parity tracing

it's somewhat similar that you have but it's the options are not uh are not uh and complicated object Json object but it's a simple Flags uh and like different flags that you can that you can set what kind of tracing do you want and there's a trace VM Trace State diff something else I think and at the moment this method is called it simulate V1 so we probably to rename this something else and probably maybe the under debug we discussed about this before oh oh no sorry I said theut

should be D and Trace what is the metod name okay let me check simulate V1 and Trace simulate V1 okay there are different name spaces uh which correlate to their output styling yeah so Cena do you think this looks okay and it's something that you would want to imp well uh yeah I think it looks okay I mean I will just check it against the choice block by hash because I think we might return some extra data like

transaction hash as well and just want to make sure we are compatible with that and might be true there yeah okay yeah apart from that like I guess one general question is if we all agree on on basically returning the whole result like a simulate result plus traces I feel we should return both because then otherwise you might need to do both calls and then it's harder to kind of get those two match now you know exactly that it was

run against that but yeah this going to be really heavy method and it's both probably going to be disabled in many of the nodes I wouldn't think that any of the public end points are have enabled any of the debug or tracing methods anyway actually that's not true I think some of the providers have okay like yeah I think Alchemy for example is there chance that they hit payout limits with this this I this are huge outputs yes yes you can hit uh payload limit with with tracing even on one block or one transaction even at some point depend on

limits can the limit be different for different methods uh not really I guess the challenge with this that with the debug Tracer I think you are just tracing one transaction and here you can trace like 100 transactions and that's good could be huge yes could be but you could if you really wanted it's for example local node you can just change the limits and do it if you really want it right y yeah yeah Al just wondering for the RPC providers that that they could also yeah it depends on the Tracer because if you're like using

a more concrete traces which I'll built in or just like like uh preate Tracer uh you can just run that and that's generally not that huge so potentially like you're even tracing 20 transactions and each of them like modifies only few storage slots that's the the diff wouldn't be that big so it is useful it just has limits of its usefulness yeah should we have test cases for this as well do do we expect the these these are matching each other I wouldn't do too much because tracing

is like huge in itself so there might be it might be good to have a like a smoke test case right that's like the simplest uh things Works uh more or less as expected but I wouldn't like have a deep cases that uh go deeply into the tracing structure yeah but I guess if you're still having some hash differences or other issues then this is probably very good way to debug those while the hashes are different um might be but it doesn't have to be depends on on why we have the has

differences so it's actually quite complicated think to answer yeah and then what do you do with the par [Music] tracing I guess g will never Implement that no no so it's it's it's depends it's be between other clients than G to be honest so it's there so I think it would be good to ask feedback from some other Glide about it yeah I think Rev Run has it I'm not sure if bezu has it or not yeah and I guess we don't have red red

here Gabriel was from Red yeah Gabriel from B yeah I from B yeah yeah so I mean two concrete feedbacks from me one was the making sure it aligns with Trace block methods and I think we might have to just add a TX has in there and the other thing is whether the field like calls is I I would push back a bit on that on the naming of the field like I would tend to go for a different field name than what we return in if simulate uh so that there's no type

Collision um maybe or something oh you mean it's called called calls near yeah in E simulate as well as debug simulate I mean you want to change the E simulate spec one once again no no no I I would change the debug simulate specs when there is one and so just to replace in the result of a debug simulate then we have the block fields and then we have the calls which has the actual traces I would just rename this field to maybe traces or something else I don't know oh yeah I can see that I'm fine with

traces the fields are standard the gas failed return value and the Str locks those are standard the gas for example for me is bit confusing because we otherwise we use gas used and gas limit are separate and I guess that is gas used yeah I'm never offend of gas because it's ambiguous that is in the C there there's gas and then inside the St LS there's also gas there's gas and gas cost no that's unfortunate I would imagine the Str loocks changing that that is bit

difficult if if that's the standard format but I don't think above there Al the gas if you can that rename would be better but if if that's also something that is standard in the get tracing then I wouldn't change it I sh in the those fields that I'm talking about you're talking about renaming the the traces Fields I think are those both of the tracing that Str Lo is Trac and and that is inside the calls and that gas field is that's also part of the trace yeah the gas failed return value they

are all part of the trace okay yeah then okay then I wouldn't touch them even touch unfortunate yeah and the error is also null in almost those I would also remove it if it exist but I guess that's also it has to be null if if there's no error I think we don't emit null if it's empty so then that's maybe different in the neet I didn't get stack and storage and those are also IM minut if they are empty um yeah we were doing some potential changes to the traces to be

more in line in G uh but uh yeah then probably not everything is you uh yet aligned but I would I would treat it outside of the scope of this otherwise we will just increase the scope indefinitely I mean I I would keep them as as they are in the standard I'm just wondering if the standard is like that or or not but I guess there's no good definition of what is the standard in know yeah I mean now there's a new initiative

from Dan to standardize tracing so let's see where that goes and there's somebody working on it and it's just not just an idea I think so I think they they plan to do it for E of at least you mean for E all the RPC methods or just the E of stuff I think the E is is very of consensus critical go I would imagine that so it concretely it's a standardizing traces of an e of execution

okay I guess things to do would be that then to get to start implementing this this tracing method and then I would like to get somebody else to review the parity tracing there somebody comments on that I can ask Gabriel about it can you share the P request I think you have shared it before but I don't have it now then we also had discussing about that those gas things and I guess we still don't have any feedback from the node providers so then I would just go ahead and Implement either of those options with the gas estimation stuff for the it simul V2

yeah sounds good to me I guess we we didn't have agreement or consensus on which one we should go with I should we tackle one at a time so if you're now doing tracing then uh focus on that and we can do that I don't know which is more important I thought the simulating or the yeah stuff was high priority least that is yeah that is how I feel too but I mean now that uh we have one tracing implementation I

think can also do the other one yeah sure but I mean yeah it probably doesn't take you long to do it maybe one week and then you have it yeah I hope so now we can then delay that for one week do anything else to discuss I guess not so see you next victim