packages feed

hevm-0.51.2: hevm.cabal

cabal-version: 3.0
name:
  hevm
version:
  0.51.2
synopsis:
  Ethereum virtual machine evaluator
description:
  Hevm implements the Ethereum virtual machine semantics.
  .
  It can be used as a library, and it also comes with an executable
  that can run unit test suites, optionally with a visual TTY debugger.
homepage:
  https://github.com/dapphub/dapptools
license:
  AGPL-3.0-only
author:
  Mikael Brockman, Martin Lundfall, dxo
maintainer:
  mikael@brockman.se, martin.lundfall@gmail.com, git@d-xo.org
category:
  Ethereum
build-type:
  Simple
extra-source-files:
  CHANGELOG.md
  bench/contracts/erc20.sol
  test/contracts/lib/test.sol
  test/contracts/lib/erc20.sol
  test/contracts/pass/trivial.sol
  test/contracts/pass/abstract.sol
  test/contracts/pass/cheatCodes.sol
  test/contracts/pass/constantinople.sol
  test/contracts/pass/dsProvePass.sol
  test/contracts/pass/invariants.sol
  test/contracts/pass/libraries.sol
  test/contracts/pass/loops.sol
  test/contracts/pass/rpc.sol
  test/contracts/fail/trivial.sol
  test/contracts/fail/cheatCodes.sol
  test/contracts/fail/dsProveFail.sol
  test/contracts/fail/invariantFail.sol
  test/scripts/convert_trace_to_json.sh

flag ci
  description: Sets flags for compilation in CI
  default:     False
  manual:      True

flag devel
  description: Sets flag for compilation during development
  default:     False
  manual:      True

source-repository head
  type:     git
  location: https://github.com/ethereum/hevm.git

common shared
  if flag(ci)
    ghc-options: -Werror
  if flag(devel)
    ghc-options: -j
  ghc-options:
    -Wall
    -Wno-unticked-promoted-constructors
    -Wno-orphans
    -Wno-ambiguous-fields
  default-language: GHC2021
  default-extensions:
    DuplicateRecordFields
    LambdaCase
    NoFieldSelectors
    OverloadedRecordDot
    OverloadedStrings
    OverloadedLabels
    RecordWildCards
    TypeFamilies
    ViewPatterns

library
  import: shared
  exposed-modules:
    EVM,
    EVM.ABI,
    EVM.Assembler,
    EVM.Concrete,
    EVM.Dapp,
    EVM.Debug,
    EVM.Dev,
    EVM.Expr,
    EVM.SMT,
    EVM.Solvers,
    EVM.Exec,
    EVM.Facts,
    EVM.Facts.Git,
    EVM.Format,
    EVM.Fetch,
    EVM.FeeSchedule,
    EVM.Hexdump,
    EVM.Op,
    EVM.Patricia,
    EVM.Precompiled,
    EVM.RLP,
    EVM.Solidity,
    EVM.Stepper,
    EVM.StorageLayout,
    EVM.SymExec,
    EVM.Traversals,
    EVM.CSE,
    EVM.Keccak,
    EVM.Transaction,
    EVM.Types,
    EVM.UnitTest,
    EVM.Sign,
  if !os(windows)
    exposed-modules:
      EVM.TTY,
      EVM.TTYCenteredList
  other-modules:
    Paths_hevm
  autogen-modules:
    Paths_hevm
  if os(linux) || os(windows)
    extra-libraries: stdc++
  extra-libraries:
    secp256k1, ff, gmp
  c-sources:
    ethjet/tinykeccak.c, ethjet/ethjet.c
  cxx-sources:
    ethjet/ethjet-ff.cc, ethjet/blake2.cc
  cxx-options:
    -std=c++0x
  install-includes:
    ethjet/tinykeccak.h, ethjet/ethjet.h, ethjet/ethjet-ff.h, ethjet/blake2.h
  build-depends:
    QuickCheck                        >= 2.13.2 && < 2.15,
    Decimal                           >= 0.5.1 && < 0.6,
    containers                        >= 0.6.0 && < 0.7,
    deepseq                           >= 1.4.4 && < 1.5,
    time                              >= 1.11.1.1 && < 1.12,
    transformers                      >= 0.5.6 && < 0.6,
    tree-view                         >= 0.5 && < 0.6,
    abstract-par                      >= 0.3.3 && < 0.4,
    aeson                             >= 2.0.0 && < 2.1,
    bytestring                        >= 0.11.3.1 && < 0.12,
    scientific                        >= 0.3.6 && < 0.4,
    binary                            >= 0.8.6 && < 0.9,
    text                              >= 1.2.3 && < 1.3,
    unordered-containers              >= 0.2.10 && < 0.3,
    vector                            >= 0.12.1 && < 0.13,
    ansi-wl-pprint                    >= 0.6.9 && < 0.7,
    base16                            >= 0.3.2.0 && < 0.3.3.0,
    megaparsec                        >= 9.0.0 && < 10.0,
    mtl                               >= 2.2.2 && < 2.3,
    directory                         >= 1.3.3 && < 1.4,
    filepath                          >= 1.4.2 && < 1.5,
    cereal                            >= 0.5.8 && < 0.6,
    cryptonite                        >= 0.30 && < 0.31,
    memory                            >= 0.16.0 && < 0.20,
    data-dword                        >= 0.3.1 && < 0.4,
    free                              >= 5.1.3 && < 5.2,
    haskeline                         >= 0.8.0 && < 0.9,
    process                           >= 1.6.5 && < 1.7,
    optics-core                       >= 0.4.1 && < 0.5,
    optics-extra                      >= 0.4.2.1 && < 0.5,
    optics-th                         >= 0.4.1 && < 0.5,
    aeson-optics                      >= 1.2.0.1 && < 1.3,
    monad-par                         >= 0.3.5 && < 0.4,
    async                             >= 2.2.4 && < 2.3,
    multiset                          >= 0.3.4 && < 0.4,
    operational                       >= 0.2.3 && < 0.3,
    optparse-generic                  >= 1.3.1 && < 1.5,
    quickcheck-text                   >= 0.1.2 && < 0.2,
    restless-git                      >= 0.7 && < 0.8,
    rosezipper                        >= 0.2 && < 0.3,
    temporary                         >= 1.3 && < 1.4,
    witherable                        >= 0.3.5 && < 0.5,
    wreq                              >= 0.5.3 && < 0.6,
    regex-tdfa                        >= 1.2.3 && < 1.4,
    base                              >= 4.9 && < 5,
    here                              >= 1.2.13 && < 1.3,
    tuple                             >= 0.3.0.2 && < 0.4,
    smt2-parser                       >= 0.1.0.1,
    word-wrap                         >= 0.5 && < 0.6,
    spool                             >= 0.1 && < 0.2,
    stm                               >= 2.5.0 && < 2.6.0,
    spawn                             >= 0.3 && < 0.4,
    filepattern                       >= 0.1.2 && < 0.2,
    witch                             >= 1.1 && < 1.3
  if !os(windows)
    build-depends:
      brick                           >= 1.4 && < 1.5,
      vty                             >= 5.37 && < 5.38
  hs-source-dirs:
    src

executable hevm
  import: shared
  hs-source-dirs:
    hevm-cli
  main-is:
    hevm-cli.hs
  ghc-options: -threaded -with-rtsopts=-N
  other-modules:
    Paths_hevm
  if os(darwin)
    extra-libraries: c++
    ld-options: -Wl,-keep_dwarf_unwind
    ghc-options: -fcompact-unwind
  else
    extra-libraries: stdc++
  build-depends:
    QuickCheck,
    aeson,
    ansi-wl-pprint,
    async,
    base,
    base16,
    binary,
    brick,
    bytestring,
    containers,
    cryptonite,
    data-dword,
    deepseq,
    directory,
    filepath,
    free,
    hevm,
    memory,
    mtl,
    optparse-generic,
    operational,
    process,
    quickcheck-text,
    regex-tdfa,
    temporary,
    text,
    unordered-containers,
    vector,
    vty,
    stm,
    spawn,
    optics-core,
    githash                       >= 0.1.6 && < 0.2,
    witch
  if os(windows)
    buildable: False

--- Test Helpers ---

common test-base
  import: shared
  hs-source-dirs:
    test
  extra-libraries:
    secp256k1
  other-modules:
    Paths_hevm
  autogen-modules:
    Paths_hevm
  build-depends:
    HUnit >= 1.6,
    QuickCheck,
    quickcheck-instances,
    aeson,
    base,
    base16,
    binary,
    containers,
    directory,
    bytestring,
    filemanip,
    filepath,
    here,
    hevm,
    mtl,
    data-dword,
    process,
    tasty >= 1.0,
    tasty-hunit >= 0.10,
    tasty-quickcheck >= 0.9,
    tasty-expected-failure >= 0.12,
    temporary,
    text,
    regex-tdfa,
    regex,
    time,
    array,
    vector,
    tasty-bench,
    stm >= 2.5.0,
    spawn >= 0.3,
    witherable,
    smt2-parser >= 0.1.0.1,
    operational,
    optics-core,
    optics-extra,
    witch

library test-utils
  import:
    test-base
  exposed-modules:
    EVM.Test.Utils
    EVM.Test.Tracing
    EVM.Test.BlockchainTests
  if os(windows)
    buildable: False

common test-common
  import:
    test-base
  if flag(devel)
    ghc-options: -threaded -with-rtsopts=-N
  build-depends:
    test-utils
  other-modules:
    EVM.Test.Utils
    EVM.Test.Tracing
    EVM.Test.BlockchainTests
  if os(windows)
    buildable: False
  if os(darwin)
    extra-libraries: c++
    -- https://gitlab.haskell.org/ghc/ghc/-/issues/11829
    ld-options: -Wl,-keep_dwarf_unwind
    ghc-options: -fcompact-unwind
  else
    extra-libraries: stdc++

--- Test Suites ---

test-suite test
  import:
    test-common
  type:
    exitcode-stdio-1.0
  main-is:
    test.hs

-- these tests require network access so we split them into a seperate test
-- suite to make it easy to skip them when running nix-build
test-suite rpc-tests
  import:
    test-common
  type:
    exitcode-stdio-1.0
  main-is:
    rpc.hs

test-suite ethereum-tests
  import:
    test-common
  type:
    exitcode-stdio-1.0
  main-is:
    BlockchainTests.hs

--- Benchmarks ---

benchmark bench
  import: shared
  type:
    exitcode-stdio-1.0
  main-is:
    bench.hs
  hs-source-dirs:
    bench
  ghc-options:
    -O2
  if os(darwin)
     extra-libraries: c++
  else
     extra-libraries: stdc++
  other-modules:
    Paths_hevm
  autogen-modules:
    Paths_hevm
  build-depends:
    base,
    tasty-bench,
    tasty,
    bytestring,
    text,
    hevm,
    here,
    test-utils,
    filemanip,
    filepath,
    containers,
    mtl