KEVM currently doesn't handle constructor calls with symbolic parameters.
The problem is that the parameters are appended to the init code, and #computeValidJumpDests will start branching on them to collect all JUMPDEST locations. The branching leads to a path-explosion problem and eventually produces the following error message: Error internalising cterm: [PredicateExpected ....
Notice that the parameters are just data and not executable bytecode.
The init code will utilize a CODECOPY operation to copy the data from the init code to the memory.
Hence, looking for JUMPDESTS in this data is not needed.
KEVM currently doesn't handle constructor calls with symbolic parameters. The problem is that the parameters are appended to the init code, and
#computeValidJumpDests
will start branching on them to collect all JUMPDEST locations. The branching leads to a path-explosion problem and eventually produces the following error message:Error internalising cterm: [PredicateExpected ...
.Notice that the parameters are just data and not executable bytecode. The init code will utilize a CODECOPY operation to copy the data from the init code to the memory. Hence, looking for JUMPDESTS in this data is not needed.
We solved this issue by replacing the ahead-of-time computation of the valid jump destinations with a just-in-time algorithm. See: https://github.com/runtimeverification/evm-semantics/pull/2112
We also needed the following lemma to lookup opcodes in partially symbolic init code: