/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

Regression: stored internal function value uses an abstract dispatch ID

Disqualified

A cheat — a harness artifact, not real EVM behavior. No engine change.

Details

Out-of-scope representation-only finding, not evidence of malicious intent. Both engines call the stored internal function and return 8 with identical raw return bytes and no events; only slot 0 differs (legacy solc bytecode jump offset 163 versus SolidCore abstract dispatch ID 1). docs/solc-function-types-review.md explicitly excludes the compilation-dependent numeric representation of internal function pointers. The harness exposes this opaque word through its whole-storage comparison; hardening that comparison is a separate maintainer decision, and no harness or contest rule was changed here.

manual-static-and-source-review

Author
@rappie_eth
Points
0
Verdict
SOUNDNESS_GAP
Resolution
Cheat — disqualified
Submitted
Oct 4, 2026, 01:51 PM
Reviewed
Oct 4, 2026, 10:31 PM

Root cause

Out-of-scope representation-only finding, not evidence of malicious intent. Both engines call the stored internal function and return 8 with identical raw return bytes and no events; only slot 0 differs (legacy solc bytecode jump offset 163 versus SolidCore abstract dispatch ID 1). docs/solc-function-types-review.md explicitly excludes the compilation-dependent numeric representation of internal function pointers. The harness exposes this opaque word through its whole-storage comparison; hardening that comparison is a separate maintainer decision, and no harness or contest rule was changed here.

Source

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

/* ===ARENA-MANIFEST===
{
  "deploy": {
    "contract": "C",
    "args": [],
    "value": 0
  },
  "entry": {
    "function": "run",
    "args": [],
    "value": 0
  },
  "feature": "stored-internal-function-value-representation",
  "note": "Both engines invoke the stored function and return 8, but their final storage differs. solc 0.8.35 stores the internal function's concrete bytecode entry offset (163 for this exact program) in slot 0, whereas Solidity-Lean stores its abstract dispatch ID 1. Internal function values are excluded only from entry return/revert channels; this successful uint256-returning call exposes the discrepancy through the contest's whole-storage-map observable."
}
===END-ARENA-MANIFEST=== */

contract C {
    function(uint256) internal pure returns (uint256) stored;

    function add(uint256 x) internal pure returns (uint256) {
        return x + 3;
    }

    function run() external returns (uint256) {
        stored = add;
        return stored(5);
    }
}