matter-labs / foundry-zksync

Fork of Foundry tailored for zkSync environment
Apache License 2.0
291 stars 125 forks source link

fix: add solc artifacts to known contracts for traces #572

Closed nbaztec closed 2 weeks ago

nbaztec commented 2 weeks ago

Motivation

In zksync context, the traces cannot decode contracts via EVM bytecode as we only pass zksolc artifacts to known_contracts.

Traces:
  [1120167] 0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496::testFoo()
    ├─ [0] VM::zkVmSkip()
    │   └─ ← [Return] 

Additionally, invariant tests do not work with testContract as during the test, they perform the lookup on the target address and try to match it with a known contract to obtain the ABI for invariant testing. This being an EVM bytecode, the test always fails as we do not know of any solc artifacts within known_contracts.

Solution

Append solc artifacts to known_contracts. This is supported by the argument that in zksync context we are always aware of solc artifacts as we use them to translate bytecodes between VMs.

This therefore fixes the decode problem:

Traces:
  [1120167] FooTest::testFoo()
    ├─ [0] VM::zkVmSkip()
    │   └─ ← [Return]