/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

Submission b8cef96f

Credited

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

Details

Storage-reference tuple declarations required every position to be a named storage pointer, so harmless declaration holes caused fallback to incorrect value lowering. Holes paired with literals or source tuple holes are now skipped while named positions retain strict storage-pointer checks.

manual-static-and-source-review

Author
@0xalpharush
Points
1
Verdict
SOUNDNESS_GAP
Resolution
Valid gap — fixed in the engine
Submitted
Aug 10, 2026, 09:37 PM
Reviewed
Sep 30, 2026, 10:46 PM

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

Root cause

Storage-reference tuple declarations required every position to be a named storage pointer, so harmless declaration holes caused fallback to incorrect value lowering. Holes paired with literals or source tuple holes are now skipped while named positions retain strict storage-pointer checks.

Source

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

/* ===ARENA-MANIFEST===
{
  "deploy": { "contract": "T", "args": [] },
  "entry": { "function": "run", "args": [] },
  "feature": "tuple-hole-storage-pointer-declaration",
  "note": "solc+EVM returns success|w:12 and writes x.a=1,y.a=2; solidity-lean returns success|w:34 with x.a=3,y.a=4. The differing component is wrong-value and state."
}
===END-ARENA-MANIFEST=== */
contract T {
    struct S { uint256 a; }

    S x;
    S y;

    function run() public returns (uint256) {
        x.a = 3;
        y.a = 4;
        (S storage p, , S storage q) = (x, 0, y);
        p.a = 1;
        q.a = 2;
        return x.a * 10 + y.a;
    }
}