1{ lib
2, fetchpatch
3, fetchFromGitHub
4# Haskell deps
5, mkDerivation, aeson, ansi-terminal, base, base16-bytestring, binary, brick
6, bytestring, cborg, containers, data-dword, data-has, deepseq, directory
7, exceptions, filepath, hashable, hevm, hpack, lens, lens-aeson, megaparsec
8, MonadRandom, mtl, optparse-applicative, process, random, stm, tasty
9, tasty-hunit, tasty-quickcheck, temporary, text, transformers , unix, unliftio
10, unliftio-core, unordered-containers, vector, vector-instances, vty
11, wl-pprint-annotated, word8, yaml , extra, ListLike, semver
12}:
13mkDerivation rec {
14 pname = "echidna";
15 version = "1.7.2";
16
17 src = fetchFromGitHub {
18 owner = "crytic";
19 repo = "echidna";
20 rev = "v${version}";
21 sha256 = "sha256-eFhL8Zn8204JRrF69ibPtd7VpFW63i1iVXoGwXHlqps=";
22 };
23
24 patches = [
25 (fetchpatch {
26 name = "update-hevm-to-0.47.0.patch";
27 url = "https://github.com/crytic/echidna/commit/25dfdad93d0e0dd822f22a1c1e63a0ecf2b22a23.patch";
28 sha256 = "sha256-dj3Ie+Z4zE1fgROE/KuWZXaH9knsXJi1ai3gu5zyw/E=";
29 })
30 ];
31
32 isLibrary = true;
33 isExecutable = true;
34 libraryHaskellDepends = [
35 aeson ansi-terminal base base16-bytestring binary brick bytestring cborg
36 containers data-dword data-has deepseq directory exceptions filepath
37 hashable hevm lens lens-aeson megaparsec MonadRandom mtl
38 optparse-applicative process random stm temporary text transformers unix
39 unliftio unliftio-core unordered-containers vector vector-instances vty
40 wl-pprint-annotated word8 yaml extra ListLike semver
41 ];
42 libraryToolDepends = [ hpack ];
43 executableHaskellDepends = libraryHaskellDepends;
44 testHaskellDepends = [
45 tasty tasty-hunit tasty-quickcheck
46 ];
47 preConfigure = ''
48 hpack
49 # re-enable dynamic build for Linux
50 sed -i -e 's/os(linux)/false/' echidna.cabal
51 '';
52 shellHook = "hpack";
53 doHaddock = false;
54 # tests depend on a specific version of solc
55 doCheck = false;
56
57 description = "Ethereum smart contract fuzzer";
58 homepage = "https://github.com/crytic/echidna";
59 license = lib.licenses.agpl3Plus;
60 maintainers = with lib.maintainers; [ arturcygan ];
61 platforms = lib.platforms.unix;
62}