-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Bug] snarkVM fails to find transaction ID when executing programs with complex call graph #2570
Comments
Thank you for filing this issue @HarukaMa! Fundamentally, while the call graph is constructed correctly, it is used in an unsound way to find the transition ID that corresponds to The current implementation has the following issues:
There are a number of possible ways this could be addressed:
Some points that the solution should address are:
|
Amazing find and analysis so far! Starting to wrap my head around this and have some questions, hope it helps to nail down the right solution:
Can you explain what you mean with this, with an example? Are you referring to potential programs which are deployed which encounter this specific call graph issue?
In your prototype, is the returned child_transition_id actually a child? If not, should we consider renaming? Would using the existing Also, is this comment in the wrong conditional? |
I think it should be mostly fine for existing programs, as:
|
At a high level, we'd want to determine which programs have been impacted and offer users a path for migration if relevant.
They are not and we could definitely rename for more clarity.
The existing
All instances of
Good catch, will clean that up. |
🐛 Bug Report
When trying to figure out the transition ordering rule, I tried to write some programs with a fairly complex call graph, but the test execution on my local network was rejected by snarkVM with reason
Child transition ID not found.
https://github.com/AleoNet/snarkVM/blob/bdfc0c43975df5832c44e3184f3b4a245880a1aa/synthesizer/process/src/finalize.rs#L266-L275
Steps to Reproduce
The program used:
outer.aleo
mid.aleo
inner.aleo
nofin.aleo
Call graph:
outer.aleo/call_mid
calls will be rejected by snarkVM.Additional test case: switch the order of the two await commands in
outer.aleo
.Expected Behavior
The program should execute without being rejected.
Your Environment
The text was updated successfully, but these errors were encountered: