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
- Unexpected Symbolic Arguments to Opcode
msg: "trying to access a symbolic address that isn't already present in storage"
opcode: CALL
program counter: 524
arguments:
(SymAddr "caller")
Due to payment transfer, which actually calls the contract, and may execute the receive() function -- which may lead to reentrancy. So the warning is valid. There are two ways to go around this:
set the state fully Abstract. This is a huge over-approximation, and may lead to a lot of false positives. But it works
as above, but ONLY set the parts abstract that can actually change, given the current state. This requires the current state being executed with an abstract calldata, checking all observed potential state changes, and making those values abstract. This can be quite refined (down to bits) or quite coarse (entire blocks of memory & state).
I think we should start with (1) and then move slowly towards (2), as time permits.
--
Side-note: due to dynamic jumps, the above code is actually kinda tricky to execute, but the dynamic jump issues have been resolved thanks to #643 and #652 So funnily enough, they are not a problem at all.
The text was updated successfully, but these errors were encountered:
#658 will hopefully "fix" this to the point where we at least approximate with the restriction of "no reentrancy guaranteed". Proper analysis andsetting of (some parts of the) state to symbolic is needed to do this properly. It will also need an explanation as per #666
When executing an equivalence check against
We get:
Due to payment transfer, which actually calls the contract, and may execute the
receive()
function -- which may lead to reentrancy. So the warning is valid. There are two ways to go around this:I think we should start with (1) and then move slowly towards (2), as time permits.
--
Side-note: due to dynamic jumps, the above code is actually kinda tricky to execute, but the dynamic jump issues have been resolved thanks to #643 and #652 So funnily enough, they are not a problem at all.
The text was updated successfully, but these errors were encountered: