feat(l1,l2): make tuple encoders single-pass to avoid double-encoding #5319
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.
This change replaces the tuple RLP encoders in crates/common/rlp/encode.rs to use structs::Encoder instead of summing element lengths via .length() and then re-encoding each element, which previously caused every tuple element to be encoded into a temporary Vec just to determine its size and then encoded again into the output buffer. The new approach pre-encodes all tuple elements into a single temporary buffer and writes the list prefix and payload once, matching the pattern already used by Vec::encode and structs::Encoder elsewhere in the codebase. This removes avoidable allocations and CPU overhead while preserving identical RLP output and API behavior.