fix(genvm): restore legacy v0.2 contract compatibility - #1762
Conversation
Select the retained v0.2 executor from the first-line source version for ordinary deployments, schema extraction and fee-estimate simulations. Persist the selection and honor existing explicit pins. Use the matching legacy code-storage slot when extracting schemas/code, bootstrapping finalized state and upgrading code; the modern slot aliases the legacy lock list. Validated with 1617 backend unit tests, pinned Ruff/Black checks, and the official GenVM runtime: unchanged legacy deployment, persisted snapshot, schema, read, write and read. Current v0.3 schema remains valid. Full RPC/consensus integration is left to E2E.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
/run-e2e v0.6 all |
|
E2E status was updated. Follow the current E2E and merge checks on this PR. Detailed diagnostics are available internally. |
|
/merge |
|
The request is recorded and waiting for processing. Follow the E2E and merge checks for progress. Do not post a duplicate command. |
|
The merge request cannot proceed. Check reviews, required CI and the selected landing cut. Related changes may require action by their owners; internal details are available to the team. |
2 similar comments
|
The merge request cannot proceed. Check reviews, required CI and the selected landing cut. Related changes may require action by their owners; internal details are available to the team. |
|
The merge request cannot proceed. Check reviews, required CI and the selected landing cut. Related changes may require action by their owners; internal details are available to the team. |
|
Automatic landing has stopped. Earlier merges are not undone. Inspect the current E2E checks, resolve the blocker, then request /merge again. |
|
/run-e2e v0.6 all Resuming the authorized compatibility release to Studio Next/Dev only. Frozen landing cut: #1762 alone, head |
|
E2E status was updated. Follow the current E2E and merge checks on this PR. Detailed diagnostics are available internally. |
|
The new E2E plan resolved the current release branch more freshly than the initial PR metadata: #1750 has already landed, so the tested base is Run 35199189091 tests candidate |
|
/merge Authorized landing of the frozen single-PR cut after full E2E success: https://github.com/genlayerlabs/genlayer-e2e/actions/runs/35199189091 (v0.6, scope=all, stack=all; 174 passed, 0 failed; 107/107 features covered). Head: After landing, release the next unused v0.123 preview version to Studio Next/Dev only. No stable production or staging promotion. |
|
The request is recorded and waiting for processing. Follow the E2E and merge checks for progress. Do not post a duplicate command. |
Delivery context
Target:
v0.123-dev. This is an urgent, independently releasable compatibility fix for the Studio Next / Studio Dev preview deployment. It does not promote the standing stable-release gate #1670 and has no cross-repository dependency.Landing cut: this PR only, head
7c0bc132dbee0ee0731ebb2a872519303f2d6847overv0.123-dev@9d414f99ee69b2de414a3014dea49e62f20382de. The named fee-bucket work in #1750 / genvm-manager#31 is deliberately excluded: it is a separate protocol change and is not needed for this fix. Keep this cut frozen during E2E.What
sim_config.gen_calland fee-estimate simulations agree with consensus.Why
Studio's default major-0 selection chooses the current v0.3 executor, but retained v0.2 contracts use a different runner format. Their unchanged, stable runner hashes therefore fail before contract execution.
Routing alone is insufficient: v0.2 stores CODE at root offset 1 and LOCKED_SLOTS at 2, whereas v0.3 stores CODE at 2. Putting schema code into the modern slot makes the legacy executor interpret the code-length prefix as a lock-list count. Code reads and finalized bootstrap also need to use the legacy layout.
Testing done
test_rpc_endpoint_manager.pyexclusion; one existing websockets deprecation warning).pre-commit run --all-filesin an isolated checkout: all general/backend hooks passed; frontend ESLint/Prettier could not start because frontend dependencies are not installed in that scratch checkout. No frontend files changed.tests/integration/test_deploy_reroute_to.py; full E2E is the remaining landing gate.Decisions made
Checks
Reviewing tips
The first-line selector is in
backend/node/genvm/executor_selection.py. Review it together with the ABI-specific code-slot handling and the accepted-state registration regression, since a routing-only fix still fails.User-facing release notes
Restores schema extraction and ordinary deployment of unchanged legacy v0.2 contracts on Studio preview, and retains the correct executor/storage layout for later reads and writes.