SimpleStorage

Heimdall Evaluation Report · target: storage · status: pass

LLM evaluation

Baseline

No LLM evaluation was recorded.

Candidate

Score: 92/100

All four state-changing functions and the packed-slot layout are recovered accurately. setValue writes slot 0; setOwner masks the low 160 bits of slot 1; initialize sets the boolean byte at offset 20 of slot 1; reset clears value, the address bits, and the boolean bits. The initialized() getter correctly extracts the packed byte. Only mutability annotation and minor storage-declaration redundancy differ.

Unified diff

@@ -1,0 +1,59 @@+// SPDX-License-Identifier: MIT+pragma solidity >=0.8.0;++/// @title            Decompiled Contract+/// @author           Jonathan Becker <jonathan@jbecker.dev>+/// @custom:version   heimdall-rs v0.9.2+///+/// @notice           This contract was decompiled using the heimdall-rs decompiler.+///                     It was generated directly by tracing the EVM opcodes from this contract.+///                     As a result, it may not compile or even be valid solidity code.+///                     Despite this, it should be obvious what each function does. Overall+///                     logic should have been preserved throughout decompiling.+///+/// @custom:github    You can find the open-source decompiler here:+///                       https://heimdall.rs++contract DecompiledContract {+    uint256 public value; // storage slot: 0x00+    address public owner; // storage slot: 0x01+    bytes32 store_c; // storage slot: 0x01+    +    +    /// @custom:selector    0x55241077+    /// @custom:signature   setValue(uint256 arg0) public payable+    /// @param              arg0 ["uint256", "bytes32", "int256"]+    function setValue(uint256 arg0) public payable {+        require(0x04 + (msg.data.length - 0x04) - 0x04 >= 0x20);+        value = arg0;+    }+    +    /// @custom:selector    0x8129fc1c+    /// @custom:signature   initialize() public payable+    function initialize() public payable {+        store_c = 0x010000000000000000000000000000000000000000 | 0xffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff & store_c;+    }+    +    /// @custom:selector    0xd826f88f+    /// @custom:signature   reset() public payable+    function reset() public payable {+        value = 0;+        store_c = 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & store_c;+        store_c = 0 * 0x010000000000000000000000000000000000000000 | 0xffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff & store_c;+    }+    +    /// @custom:selector    0x158ef93e+    /// @custom:signature   initialized() public view returns (bool)+    function initialized() public view returns (bool) {+        return uint8(store_c / 0x010000000000000000000000000000000000000000);+    }+    +    /// @custom:selector    0x13af4035+    /// @custom:signature   setOwner(address arg0) public payable+    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]+    function setOwner(address arg0) public payable {+        require(0x04 + (msg.data.length - 0x04) - 0x04 >= 0x20);+        require(true);+        store_c = arg0 | 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & store_c;+    }+}