/Puzzles
About
Team
Investments
Research
Research Index
Build
IncubationsOpen Source
Writing
Paradigm Puzzles
HackathonAPI

Terms, Disclosures, Privacy

LinkedIn, Twitter, Contact

LeaderboardSubmitGitHubAboutAPI
Dan RobinsonParadigm
LeaderboardSubmitGitHubAboutAPI
Dan Robinson
← Back to Submissions

fixed mapping struct bytes copy

Credited

Genuine, unique divergence — fixed in the engine and merged. +1 on the leaderboard.

Details

Nested storage-path materialization handled dynamic arrays but not bytes/string fields inside aggregates containing mappings. Bytes and string members reached through a nonempty storage path now materialize directly without attempting to load the enclosing unmappable struct.

manual-static-and-source-review

Author
@cameronspirals
Points
1
Verdict
SOUNDNESS_GAP
Resolution
Valid gap — fixed in the engine
Submitted
Aug 24, 2026, 03:33 AM
Reviewed
Sep 30, 2026, 10:46 PM

This divergence was root-caused and fixed in the engine. Fixed in PR #104 →

Root cause

Nested storage-path materialization handled dynamic arrays but not bytes/string fields inside aggregates containing mappings. Bytes and string members reached through a nonempty storage path now materialize directly without attempting to load the enclosing unmappable struct.

Source

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.35;

/* ===ARENA-MANIFEST===
{"deploy":{"contract":"C","args":[],"value":0},"entry":{"function":"run","args":[],"value":0},"lane":"S","feature":"fixed-mapping-struct-bytes-copy"}
===END-ARENA-MANIFEST=== */

struct Box {
    bytes data;
    mapping(uint256 => uint256) other;
}

contract C {
    Box[1] boxes;

    function run() external returns (uint256) {
        boxes[0].data = hex"1234";
        bytes memory copied = boxes[0].data;
        return copied.length * 100 + uint8(copied[1]);
    }
}