about summary refs log tree commit diff
path: root/pkgs/tools/security/echidna
diff options
context:
space:
mode:
authorArtur Cygan <arczicygan@gmail.com>2022-09-07 16:41:48 +0200
committerArtur Cygan <arczicygan@gmail.com>2022-09-08 23:02:35 +0200
commit6cabaded4ac05466c3837dfb9c359a32928d8b25 (patch)
tree744147df0320584c0a66f6a32adbe6ce9104926a /pkgs/tools/security/echidna
parenteded7b8a2387e8c10aa45b951f47a13ca28def38 (diff)
echidna: 1.7.3 -> 2.0.2
Diffstat (limited to 'pkgs/tools/security/echidna')
-rw-r--r--pkgs/tools/security/echidna/default.nix13
-rw-r--r--pkgs/tools/security/echidna/echidna-update-aeson.patch38
2 files changed, 47 insertions, 4 deletions
diff --git a/pkgs/tools/security/echidna/default.nix b/pkgs/tools/security/echidna/default.nix
index 88deac03a8f73..f6f1426ad5713 100644
--- a/pkgs/tools/security/echidna/default.nix
+++ b/pkgs/tools/security/echidna/default.nix
@@ -1,5 +1,4 @@
 { lib
-, fetchpatch
 , fetchFromGitHub
 # Haskell deps
 , mkDerivation, aeson, ansi-terminal, base, base16-bytestring, binary, brick
@@ -8,19 +7,24 @@
 , 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
-, wl-pprint-annotated, word8, yaml , extra, ListLike, semver
+, wl-pprint-annotated, word8, yaml, extra, ListLike, semver
 }:
 mkDerivation rec {
   pname = "echidna";
-  version = "1.7.3";
+  version = "2.0.2";
 
   src = fetchFromGitHub {
     owner = "crytic";
     repo = "echidna";
     rev = "v${version}";
-    sha256 = "sha256-NkAAXYa1bbCNUO0eDM7LQbyC3//RRFAKmEHGH2Dhl/M=";
+    sha256 = "sha256-WmlQWgn4qfRmx3PdzY7wzT9AyU7Re2T1CWJ7yGjcVac=";
   };
 
+  # 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 ];
+
   isLibrary = true;
   isExecutable = true;
   libraryHaskellDepends = [
@@ -51,4 +55,5 @@ mkDerivation rec {
   license = lib.licenses.agpl3Plus;
   maintainers = with lib.maintainers; [ arturcygan ];
   platforms = lib.platforms.unix;
+  mainProgram = "echidna-test";
 }
diff --git a/pkgs/tools/security/echidna/echidna-update-aeson.patch b/pkgs/tools/security/echidna/echidna-update-aeson.patch
new file mode 100644
index 0000000000000..a8c1b8f700c51
--- /dev/null
+++ b/pkgs/tools/security/echidna/echidna-update-aeson.patch
@@ -0,0 +1,38 @@
+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)