upstream: [execution] Port unbounded system object size changes (#10836) - #12672
Open
lollobene wants to merge 3 commits into
Open
Conversation
## Description Allows objects created/mutated by system transactions to not be bounded by normal limits and brings it in-line with the rest of the way we treat system transactions and limit interactions. ## Test plan CI Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
## Description Forgot to add in the protocol gating when switching from a larger bound to a feature flag. This adds in the proper protocol gating. This is a reverse cherry pick so this has already landed in the release branch. ## Test plan CI Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
lollobene
marked this pull request as draft
August 14, 2026 11:29
lollobene
marked this pull request as ready for review
August 14, 2026 12:26
bingyanglin
approved these changes
Aug 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description of change
Ports the upstream removal of object size bounds on objects created or mutated by system transactions, plus its protocol gating. Objects written by the
GenesisandSystemexecution modes are no longer capped atmax_move_object_size; exceeding it logs adebug_fatal!instead of failing the transaction. Same treatment for the safe-mode system-state update. Gated behind the newallow_unbounded_system_objectsfeature flag, enabled at protocol version 33.6eefe1e0c03d528288478d5492ba2c30c2ba46e40886cb100d7567a4ee6c8a121c6d688ee7c2715fSkipped upstream files
crates/iota-indexer-alt/src/handlers/coin_balance_buckets.rsiota-indexer-altcrate in IOTAcrates/iota-open-rpc/spec/openrpc.jsoniota-execution/{v0,v1,v2}/…/context.rsiota-execution/latestDownstream adaptations
object.rsimpl MoveObjectMoveStructfromiota-sdk-typesbehind the sealedMoveStructExttrait — both trait declaration and impl updatednew_from_executionsignature(type_, has_public_transfer, …)(tag, …)— nohas_public_transferMoveObject::id_opt(&contents)contents.get(..ObjectId::LENGTH).and_then(|id| ObjectId::from_bytes(id).ok())— noid_optdownstream;getrather than indexing so a shortcontentsyieldsNoneinstead of panicking on the oversized-object pathMoveObjectTooBigObjectTooBigupdate_contents_advance_epoch_safe_modepub(crate)create_written_objectunsafe fnfn— nohas_public_transferinvariant to upholdiota-typesdependenciesiota-commonandiota-metricsalready presentiota-commonadded;iota-metricsadded undercfg(not(target_arch = "wasm32")), becausedebug_fatal!expands toiota_metrics::get_metrics()on non-wasm targets andiota-typesalso builds for wasm32system_mutation: falseLinks to any relevant issues
Closes #10836
How the change has been tested
Basic tests (linting, compilation, formatting, unit/integration tests)
Patch-specific tests (correctness, functionality coverage)
I have added tests that prove my fix is effective or that my feature works
I have checked that new and existing unit tests pass locally with my changes
cargo ci-clippy(--all-targets --all-features -D warnings),cargo ci-license,cargo machete,cargo +nightly fmt --all— all clean.cargo nextest run -p iota-types -p iota-protocol-config -p iota-json-rpc-types --lib— 224 passed.cargo simtest -p iota-e2e-tests safe_mode— 3 passed (test_safe_mode_recovery,safe_mode_reconfig_test,epoch_info_verifies_safe_mode_boundary), covering the safe-mode epoch-advancement path this change touches.Protocol-config snapshots regenerated; the only change is
allow_unbounded_system_objects: trueon the three v33 snapshots (default, Mainnet, Testnet).No tests were added: both upstream commits ship without tests, and the new behaviour is only observable on a system transaction that writes an over-limit object.
Release Notes
allow_unbounded_system_objectsfeature flag (enabled at protocol version 33).