Events

Heimdall Evaluation Report · target: events · status: pass

LLM evaluation

Baseline

No LLM evaluation was recorded.

Candidate

Score: 62/100

All 7 external functions are recovered with correct argument shapes and calldata bounds checks, and 5 of them reproduce their event emissions faithfully (Deposit, Withdrawal, Log(string), LogBytes(bytes), and the three-event emitMultiple including the correct inline string literal "Multiple events emitted"). However, the two three-argument functions (emitTransfer and emitApproval) decompile to nothing but calldata-length requires — their sole behavior, the LOG emission, is entirely missing, and the Approval event does not appear anywhere in the output.

Unified diff

@@ -1,0 +1,95 @@+// 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 {+    event Log(string);+    event Withdrawal(address, uint256);+    event Deposit(address, uint256);+    event LogBytes(bytes);+    event Transfer(address, address, uint256);+    +    /// @custom:selector    0x5687f2b8+    /// @custom:signature   Unresolved_5687f2b8(address arg0) public pure+    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]+    function Unresolved_5687f2b8(address arg0) public pure {+        require(0x04 + (msg.data.length - 0x04) - 0x04 >= 0x60);+        require(true);+    }+    +    /// @custom:selector    0xd0062fbb+    /// @custom:signature   Unresolved_d0062fbb(uint256 arg0) public pure+    /// @param              arg0 ["uint256", "bytes32", "int256"]+    function Unresolved_d0062fbb(uint256 arg0) public pure {+        require(0x04 + (msg.data.length - 0x04) - 0x04 >= 0x20);+        require(arg0 <= 0xffffffffffffffff);+        require(0x04 + arg0 + 0x1f < 0x04 + (msg.data.length - 0x04));+        require(msg.data[0x04 + arg0] <= 0xffffffffffffffff);+        require(0x04 + arg0 + 0x20 + msg.data[0x04 + arg0] <= 0x04 + (msg.data.length - 0x04));+        emit LogBytes(var_b + 0x20 - var_b, msg.data[0x04 + arg0]);+    }+    +    /// @custom:selector    0x28ba84ca+    /// @custom:signature   emitDeposit(address arg0, uint256 arg1) public pure+    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]+    /// @param              arg1 ["uint256", "bytes32", "int256"]+    function emitDeposit(address arg0, uint256 arg1) public pure {+        require(0x04 + (msg.data.length - 0x04) - 0x04 >= 0x40);+        require(true);+        emit Deposit(arg0, arg1);+    }+    +    /// @custom:selector    0x23de6651+    /// @custom:signature   Unresolved_23de6651(address arg0) public pure+    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]+    function Unresolved_23de6651(address arg0) public pure {+        require(0x04 + (msg.data.length - 0x04) - 0x04 >= 0x60);+        require(true);+    }+    +    /// @custom:selector    0xfc4ae4ba+    /// @custom:signature   Unresolved_fc4ae4ba(address arg0, uint256 arg1) public pure+    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]+    /// @param              arg1 ["uint256", "bytes32", "int256"]+    function Unresolved_fc4ae4ba(address arg0, uint256 arg1) public pure {+        require(0x04 + (msg.data.length - 0x04) - 0x04 >= 0x40);+        require(true);+        emit Withdrawal(arg0, arg1);+    }+    +    /// @custom:selector    0xe3a379c5+    /// @custom:signature   Unresolved_e3a379c5(address arg0, uint256 arg1) public pure+    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]+    /// @param              arg1 ["uint256", "bytes32", "int256"]+    function Unresolved_e3a379c5(address arg0, uint256 arg1) public pure {+        require(0x04 + (msg.data.length - 0x04) - 0x04 >= 0x40);+        require(true);+        emit Deposit(arg0, arg1);+        emit Transfer(0, arg0, arg1);+        emit Log(var_b + 0x20 - var_b, 0x17, 0x4d756c7469706c65206576656e747320656d6974746564000000000000000000);+    }+    +    /// @custom:selector    0x2e3c2a4d+    /// @custom:signature   Unresolved_2e3c2a4d(uint256 arg0) public pure+    /// @param              arg0 ["uint256", "bytes32", "int256"]+    function Unresolved_2e3c2a4d(uint256 arg0) public pure {+        require(0x04 + (msg.data.length - 0x04) - 0x04 >= 0x20);+        require(arg0 <= 0xffffffffffffffff);+        require(0x04 + arg0 + 0x1f < 0x04 + (msg.data.length - 0x04));+        require(msg.data[0x04 + arg0] <= 0xffffffffffffffff);+        require(0x04 + arg0 + 0x20 + msg.data[0x04 + arg0] <= 0x04 + (msg.data.length - 0x04));+        emit Log(var_b + 0x20 - var_b, msg.data[0x04 + arg0]);+    }+}