You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
All contracts relevant to a CSE execution need to be present in the storage explicitly, and their storage layout needs to be made explicit as well. Consider the (contrived, but representative) example from #356 of Double.applyOp:
which holds an instance of an Identity contract in its storage and calls the applyOp function from it. There are two issues with the current generality of the CSE initial state:
The <accessedStorage> cell is fully symbolic, resulting in branching on whether or not various slots of various contracts have previously been accessed, together with an infinite branching similar to that reported in this KEVM issue due to the lack of full coverage of the <accessedStorage> update rules. This can be seen, for example, in nodes 4, 5, and 6, of the attached KCFG, which, respectively have the path conditions:
The storage is fully symbolic, meaning that the knowledge that iv is an Identity contract is lost, and the execution cannot figure out which function corresponds to applyOp.
The KCFG can be obtained by running
kontrol build --require src/cse/lemmas.k --module-import CSETest:CSE-LEMMAS --verbose --regen --rekompile
kontrol prove --verbose --match-test 'Double.applyOp'
from the src/tests/integration/test-data/foundry folder of Kontrol using the petar/cse-exploration branch of PR #355.
All contracts relevant to a CSE execution need to be present in the storage explicitly, and their storage layout needs to be made explicit as well. Consider the (contrived, but representative) example from #356 of
Double.applyOp
:which holds an instance of an
Identity
contract in its storage and calls theapplyOp
function from it. There are two issues with the current generality of the CSE initial state:<accessedStorage>
cell is fully symbolic, resulting in branching on whether or not various slots of various contracts have previously been accessed, together with an infinite branching similar to that reported in this KEVM issue due to the lack of full coverage of the<accessedStorage>
update rules. This can be seen, for example, in nodes 4, 5, and 6, of the attached KCFG, which, respectively have the path conditions:and
and
iv
is anIdentity
contract is lost, and the execution cannot figure out which function corresponds toapplyOp
.The KCFG can be obtained by running
from the
src/tests/integration/test-data/foundry
folder of Kontrol using thepetar/cse-exploration
branch of PR #355.Double.applyOp.txt
The text was updated successfully, but these errors were encountered: