Change:
<!-- Note that these are hard requirements --<!-- You can use the "Go to file" functionality on GitHub to find the package Then you can go to the history for this package Find the latest "packagename: oldversion -newversion" commit The "newversion" is the current version of the package --- <!-- Type the name of your package and try to find an open pull request for the package If you find an open pull request, you can review it! There's a high chance that you'll have the new version right away while helping the community! --- name: <!-- The current version can be found easily with the same process as above for checking the master branch If an open PR is present for the package, take this version as the current one and link to the PR --current version: 1.7.3 desired version: 2.0.2 <!-- Search your package here: If no maintainer is listed for your package, tag the person that last updated the package --maintainers: Please tag this issue in your PR.
waiting for 0.50.0 release of
I fixed echidna.
Lovely. Thanks you so much for you effort.

Discussion:
- heterogeneous-list-literals - hetris - heukarya <del> - hevm </del> - HExcel - hexchat - hexif

''; }) super.haskell-language-server; <ins> # NOTE: this patch updates the hevm code to work with the latest packages that broke the build # it's temporary until hevm version 0.50.0 is released - https://github.com/ethereum/hevm/milestone/1 </ins> # tests depend on a specific version of solc <del> hevm = dontCheck (doJailbreak super.hevm); </del> <ins> hevm = dontCheck (appendPatch ./patches/hevm-update-deps.patch super.hevm); </ins> # hadolint enables static linking by default in the cabal file, so we have to explicitly disable it. # https://github.com/hadolint/hadolint/commit/e1305042c62d52c2af4d77cdce5d62f6a0a3ce7b

<ins> diff --git a/hevm.cabal b/hevm.cabal index cf36961e..3b31f595 100644 --- a/hevm.cabal +++ b/hevm.cabal @@ -71,6 +71,10 @@ library -Wall -Wno-deprecations extra-libraries: secp256k1, ff +  if os(darwin) +     extra-libraries: c++ +  else +     extra-libraries: stdc++ c-sources: ethjet/tinykeccak.c, ethjet/ethjet.c cxx-sources: @@ -88,7 +92,7 @@ library transformers                      >= 0.5.6 && < 0.6, tree-view                         >= 0.5 && < 0.6, abstract-par                      >= 0.3.3 && < 0.4, -    aeson                             >= 1.5.6 && < 1.6, +    aeson                             >= 2.0 && < 2.1, bytestring                        >= 0.10.8 && < 0.11, scientific                        >= 0.3.6 && < 0.4, binary                            >= 0.8.6 && < 0.9, @@ -97,7 +101,7 @@ library vector                            >= 0.12.1 && < 0.13, ansi-wl-pprint                    >= 0.6.9 && < 0.7, base16-bytestring                 >= 1.0.0 && < 2.0, -    brick                             >= 0.58 && < 0.63, +    brick                             >= 0.58 && < 0.69, megaparsec                        >= 9.0.0 && < 10.0, mtl                               >= 2.2.2 && < 2.3, directory                         >= 1.3.3 && < 1.4, @@ -105,13 +109,13 @@ library vty                               >= 5.25.1 && < 5.34, cereal                            >= 0.5.8 && < 0.6, cryptonite                        >= 0.27 && <= 0.29, -    memory                            >= 0.14.18 && < 0.16, +    memory                            >= 0.14.18 && < 0.20, data-dword                        >= 0.3.1 && < 0.4, fgl                               >= 5.7.0 && < 5.8, free                              >= 5.1.3 && < 5.2, haskeline                         >= 0.8.0 && < 0.9, process                           >= 1.6.5 && < 1.7, -    lens                              >= 4.17.1 && < 4.20, +    lens                              >= 4.17.1 && < 5.1, lens-aeson                        >= 1.0.2 && < 1.2, monad-par                         >= 0.3.5 && < 0.4, multiset                          >= 0.3.4 && < 0.4, @@ -124,7 +128,6 @@ library sbv                               >= 8.9, semver-range                      >= 0.2.7 && < 0.3, temporary                         >= 1.3 && < 1.4, -    text-format                       >= 0.3.2 && < 0.4, witherable                        >= 0.3.5 && < 0.5, wreq                              >= 0.5.3 && < 0.6, regex-tdfa                        >= 1.2.3 && < 1.4, @@ -190,7 +193,6 @@ executable hevm sbv, temporary, text, -    text-format, unordered-containers, vector, vty diff --git a/src/EVM/Solidity.hs b/src/EVM/Solidity.hs index b7d0f36b..4e9d6892 100644 --- a/src/EVM/Solidity.hs +++ b/src/EVM/Solidity.hs @@ -70,6 +70,7 @@ import Control.Monad import Control.Lens         hiding (Indexed, (.=)) import qualified Data.String.Here as Here import Data.Aeson hiding (json) +import qualified Data.Aeson.KeyMap as KeyMap import Data.Aeson.Types import Data.Aeson.Lens import Data.Scientific @@ -714,8 +715,8 @@ astIdMap = foldMap f f :: Value -> Map Int Value f (Array x) = foldMap f x f v@(Object x) = -      let t = foldMap f (HMap.elems x) -      in case HMap.lookup "id" x of +      let t = foldMap f (KeyMap.elems x) +      in case KeyMap.lookup "id" x of Nothing         -> t Just (Number i) -> t <> Map.singleton (round i) v Just _          -> t diff --git a/src/EVM/SymExec.hs b/src/EVM/SymExec.hs index 5bbf1c03..b828098e 100644 --- a/src/EVM/SymExec.hs +++ b/src/EVM/SymExec.hs @@ -40,8 +40,8 @@ type EquivalenceResult = ProofResult ([VM], [VM]) VM () -- | Convenience functions for generating large symbolic byte strings sbytes32, sbytes128, sbytes256, sbytes512, sbytes1024 :: Query ([SWord 8]) -sbytes32 = toBytes <$> freshVar_ @ (WordN 256) -sbytes128 = toBytes <$> freshVar_ @ (WordN 1024) +sbytes32 = toBytes <$> freshVar_ @(WordN 256) +sbytes128 = toBytes <$> freshVar_ @(WordN 1024) sbytes256 = liftA2 (++) sbytes128 sbytes128 sbytes512 = liftA2 (++) sbytes256 sbytes256 sbytes1024 = liftA2 (++) sbytes512 sbytes512 diff --git a/src/EVM/Types.hs b/src/EVM/Types.hs index fdd2368d..1dc29e83 100644 --- a/src/EVM/Types.hs +++ b/src/EVM/Types.hs @@ -434,17 +434,17 @@ readN s = fromIntegral (read s :: Integer) readNull :: Read a => a -> String -> a readNull x = fromMaybe x . Text.Read.readMaybe -wordField :: JSON.Object -> Text -> JSON.Parser W256 +wordField :: JSON.Object -> Key -> JSON.Parser W256 wordField x f = ((readNull 0) . Text.unpack) <$> (x .: f) -addrField :: JSON.Object -> Text -> JSON.Parser Addr +addrField :: JSON.Object -> Key -> JSON.Parser Addr addrField x f = (read . Text.unpack) <$> (x .: f) -addrFieldMaybe :: JSON.Object -> Text -> JSON.Parser (Maybe Addr) +addrFieldMaybe :: JSON.Object -> Key -> JSON.Parser (Maybe Addr) addrFieldMaybe x f = (Text.Read.readMaybe . Text.unpack) <$> (x .: f) -dataField :: JSON.Object -> Text -> JSON.Parser ByteString +dataField :: JSON.Object -> Key -> JSON.Parser ByteString dataField x f = hexText <$> (x .: f) toWord512 :: W256 -> Word512 </ins>

{ lib <del> , fetchpatch </del> , fetchFromGitHub # Haskell deps , mkDerivation, aeson, ansi-terminal, base, base16-bytestring, binary, brick

, MonadRandom, mtl, optparse-applicative, process, random, stm, tasty , tasty-hunit, tasty-quickcheck, temporary, text, transformers , unix, unliftio , unliftio-core, unordered-containers, vector, vector-instances, vty <del> , wl-pprint-annotated, word8, yaml , extra, ListLike, semver </del> <ins> , wl-pprint-annotated, word8, yaml, extra, ListLike, semver </ins> }: mkDerivation rec { pname = "echidna"; <del> version = "1.7.3"; </del> <ins> version = "2.0.2"; </ins> src = fetchFromGitHub { owner = "crytic"; repo = "echidna"; rev = "v${version}"; <del> sha256 = "sha256-NkAAXYa1bbCNUO0eDM7LQbyC3//RRFAKmEHGH2Dhl/M="; </del> <ins> sha256 = "sha256-WmlQWgn4qfRmx3PdzY7wzT9AyU7Re2T1CWJ7yGjcVac="; </ins> }; <ins> # NOTE: echidna is behind with aeson because of hevm, this patch updates # the code to work with the major aeson update that broke the build # it's temporary until hevm version 0.50.0 is released - https://github.com/ethereum/hevm/milestone/1 patches = [ ./echidna-update-aeson.patch ]; </ins> isLibrary = true; isExecutable = true; libraryHaskellDepends = [

license = lib.licenses.agpl3Plus; maintainers = with lib.maintainers; [ arturcygan ]; platforms = lib.platforms.unix; <ins> mainProgram = "echidna-test"; </ins> }

<ins> diff --git a/lib/Echidna/Config.hs b/lib/Echidna/Config.hs index f8d5777..3d761fe 100644 --- a/lib/Echidna/Config.hs +++ b/lib/Echidna/Config.hs @@ -13,8 +13,8 @@ import Control.Monad.State (StateT(..), runStateT) import Control.Monad.Trans (lift) import Data.Bool (bool) import Data.Aeson +import Data.Aeson.KeyMap (keys) import Data.Has (Has(..)) -import Data.HashMap.Strict (keys) import Data.HashSet (fromList, insert, difference) import Data.Maybe (fromMaybe) import Data.Text (isPrefixOf) @@ -23,11 +23,13 @@ import EVM.Types (w256) import qualified Control.Monad.Fail as M (MonadFail(..)) import qualified Data.ByteString as BS +import qualified Data.Aeson.Key as Key +import qualified Data.HashSet as HS import qualified Data.List.NonEmpty as NE import qualified Data.Yaml as Y import Echidna.Test -import Echidna.Types.Campaign +import Echidna.Types.Campaign import Echidna.Mutator.Corpus (defaultMutationConsts) import Echidna.Types.Config (EConfigWithUsage(..), EConfig(..)) import Echidna.Types.Solidity @@ -52,7 +54,7 @@ instance FromJSON EConfigWithUsage where _        -> mempty (c, ks) <- runStateT (parser v') $ fromList [] let found = fromList (keys v') -    return $ EConfigWithUsage c (found `difference` ks) (ks `difference` found) +    return $ EConfigWithUsage c (HS.map Key.toText $ found `difference` ks) (HS.map Key.toText $ ks `difference` found) -- this parser runs in StateT and comes equipped with the following -- equivalent unary operators: -- x .:? k (Parser) <==> x ..:? k (StateT) </ins>