Dapp, Seth, Hevm, and more

Overview

Dapp tools by DappHub Chat

Hello!

dapptools is a suite of Ethereum focused CLI tools following the Unix design philosophy, favoring composability, configurability and extensibility.

This repository contains the source code for several programs hand-crafted and maintained by DappHub, along with dependency management, courtesy of Nix.

  • dapp - All you need Ethereum development tool. Build, test, fuzz, formally verify, debug & deploy solidity contracts.
  • seth - Ethereum CLI. Query contracts, send transactions, follow logs, slice & dice data.
  • hevm - Testing oriented EVM implementation. Debug, fuzz, or symbolically execute code against local or mainnet state.
  • ethsign - Sign Ethereum transactions from a local keystore or hardware wallet.

Installation

Install Nix if you haven't already:

# user must be in sudoers
curl -L https://nixos.org/nix/install | sh

# Run this or login again to use Nix
. "$HOME/.nix-profile/etc/profile.d/nix.sh"

Then install dapptools:

curl https://dapp.tools/install | sh

This configures the dapphub binary cache and installs the dapp, solc, seth and hevm executables.

NOTE: Arm support in the GHC haskell compiiler is still fairly bleeding edge, until this situation stabilises, users of M1 macs must run dapptools (and the installer!) under rosetta 2 (i.e. as an emulated x86 program). Make sure /etc/nix/nix.conf contains system = x86_64-darwin.

You can also install an individual tool with

nix-env -iA <tool> -f $(curl -sS https://api.github.com/repos/dapphub/dapptools/releases/latest | jq -r .tarball_url)

If you instead want to build from master, change the url to https://github.com/dapphub/dapptools/archive/master.tar.gz.

Prebuilt hevm binary

Static binaries for linux and macos of hevm are available for each release at https://github.com/dapphub/dapptools/releases.

Most functionality is available out of the box, but for symbolic execution you will need solc and (z3 or cvc4 (or both)).

Getting started

For more information about the tools, consult the individual README pages:

or use the --help flag for any tool.

We're also happy to answer any questions at https://dapphub.chat/.

Examples

Deploy a 'Hello World' contract and call it:

export ETH_RPC_URL=https://mainnet.infura.io/v3/$YOUR_API_KEY
export ETH_FROM=$YOUR_ADDRESS
echo 'contract Hello { function hi() public pure returns(string memory) {return "Hello, World!";}}' | solc --bin -o . --overwrite -
HELLO=$(seth send --create $(<Hello.bin))
seth call $HELLO "hi()(string)"

Debug the first transaction of the latest block in the interactive debugger:

export ETH_RPC_URL=https://mainnet.infura.io/v3/$YOUR_API_KEY
seth run-tx $(seth block latest transactions | jq .'[0]' -r) --debug

If Vitalik's next transaction were a contract deployment, calculate the address it would be deployed at:

export ETH_RPC_URL=https://mainnet.infura.io/v3/$YOUR_API_KEY
dapp address 0xab5801a7d398351b8be11c439e05c5b3259aec9b $(seth nonce 0xab5801a7d398351b8be11c439e05c5b3259aec9b)

Symbolically explore the possible execution paths of a call to dai.transfer(address,uint):

seth bundle-source 0x6b175474e89094c44da98b954eedeac495271d0f > daisrc.json && \
hevm symbolic --address 0x6b175474e89094c44da98b954eedeac495271d0f --rpc $ETH_RPC_URL  --debug --sig "transfer(address,uint256)" --json-file daisrc.json

Contributing

Contributions are always welcome! You may be interested in the architecture of this repository.

built with nix

Issues
  • Symbolic execution for HEVM; `hevm symbolic` and `hevm equivalence`

    Symbolic execution for HEVM; `hevm symbolic` and `hevm equivalence`

    This draft PR is ~a WIP~ extends hevm with symbolic execution capabilities, allowing it to be used as a proving engine for formal verification, as well as admitting more intelligent fuzzing strategies.

    ~It's not particularly close to being ready for merging yet, but I would like to share my progress to get some early feedback and discuss some of my findings so far.~ It is now ready for review!

    On a high level, here's what's going on:

    Most of the magic here comes from the SMT-based verification library sbv, which provides symbolic variants of common basetypes like booleans, words and integers. These variants are strict generalizations of their concrete counterparts and functions over them will just evaluate normally when given concrete arguments. Using these we can generalize various parts of the EVM:

    • The EVM stack is changed from a list of words, [Word 256], to a list of symbolic words, [SWord 256], and stack operations are adapted accordingly.
    • The buffers memory, returndata and calldata are changed from ByteString to [SWord 8]. This is a (concrete) list of symbolic values, not a symbolic list, which means that while reads and writes can refer to symbolic values, they must always happen at concrete locations. This restriction means that we are unable to deal with dynamic data types for the moment. More on this later.

    ~The main part of symbolic execution is handled by the function symExec, which executes the EVM with symbolic values while keeping track of an accumulated list of constraints (path conditions), until reaching a JUMPI opcode. At this point, it invokes z3 to check which branches are possible, and recurses with the path condition updated accordingly until reaching a list of possible final VM states. The resulting VM states can be checked against a post condition.~

    EDIT (04/07/2020):

    Symbolic execution is now done with the "operational monad pattern" as seen in TTY, VMTests Dev, etc. Similarly to how instances of SLOAD or CALL causes the execution to end with a Query error, JUMPI introduces a new type of query (PleaseAskSMT), which will need to be performed in an IO context. The actual smt query is performed in a new fetcher, which is used in TTY.interpret (which (as before) only keeps track of one VM at a time) and the new SymExec.interpret, which is essentially a function VM -> [VM], but crucially does the necessary lifting in case we encounter any blocking queries.

    Some example proofs are given in test.hs.

    While defining arbitrary post conditions is probably better handled with something like act, this PR provides an easy way to check for asserts (executions ending with an INVALID opcode (0xfe)) using the cli endpoint hevm symbolic.

    Example usage:

    echo "pragma solidity >=0.5.15; 
               contract A {
                   function factor(uint x, uint y) public pure {
                       require(1 < x && x < 973013 && 1 < y && y < 973013);
                       assert(x*y != 973013);}
    }" \
    | solc --combined-json=bin-runtime - \
    | jq '."contracts"."<stdin>:A"."bin-runtime"' \
    | tr -d '"' > fun.txt
    
    hevm symbolic --code $(<fun.txt) --abi $(seth --abi-function-json "factor(uint256,uint256)")
    "Assertion violation:"
    (1021, 953)
    

    Obvious TODOs

    • [x] Allow storage to be symbolic as well.

    • [x] Ensure that the conversion did not mess up any of the general state tests. The semantics for concrete execution should remain unchanged after this.

    More interesting TODOs:

    • [x] EVM words are a little too large for z3 to be good at dealing with them. As a result, it hangs on some simple proofs like this tautological SafeAdd proof. This has also been noted as a problem for @leonardoalt, which recommended to use unbounded integers instead. This would require adapting all arithmetic opcodes to operate modulo 2^256 instead. But there also might be other solvers than z3 that are better at dealing with large bitvectors.

    EDIT 08 June: There is now support for cvc4 as well, which in certain situations deals a lot better with large bitvectors. Large bitvectors seems preferable to modulo integer arithmetic, especially since most contracts use quite a lot of bitvector operations to do masking and other encoding gymnastics.

    • [x] It should be possible to generalize byte buffers like memory and calldata to deal with symbolic locations. SBV offers two options here, SArray which translates directly to an smt array, and SFunArray, which is "implemented internally, without translating to SMT-Lib functions". I'm guessing the latter option is preferable.

    EDIT 08 June: I have generalized calldata slightly with a slight of hand: calldata is now a tuple (SWord 32, [SWord 8]), where the first argument is understood as the calldata length. Since EVM just returns zeros when reading out of bounds calldata, this allows us to fully abstract calldata without having to deal with arrays.

    • [x] The Show instance for symbolic values, is quite boring as it just displays <symbolic> for symbolic variables. For a more insightful hevm --debug experience, we might want to accompany symbolic words with a pretty-print string, at least when function ABIs are available. Opcodes would need be adapted to update the pretty-print string as well as updating the values.

    EDIT 13 July: Basic scaffolding for displaying symbolic values with a richer AST is given, but the full implementation is decided to be out of scope of this first PR.

    • [x] Quite understandably, the current execution strategy fails miserably when dealing with loops whose condition depends on a symbolic value. Depending on the setting, one could go in several directions to account for this:
    1. Keep track of which pc values have been visited, and restrict the number of times we are allowed to return to a particular pc value, aka "bounded model checking".
    2. Maintain a set of "trusted specs", i.e. VM -> VM functions that can only be applied under certain conditions. These "trusted specs" can themselves be proven by symbolic execution and coinduction.
    3. Try to infer loop invariants automagically using some CHC style solution or whatever Data.SBV.Tools.Induction uses. I'm doubtful this would work, but it's worth exploring.

    EDIT 08 June:

    1. is now implemented, and the number of times revisiting the same branching point is allowed can be configured using the flag --max-iterations. 2 can be done once better act integration is here, and 3 remains interesting to explore in the future.

    This type of symbolic execution would probably be able to generate a lot more interesting test cases for tools like Echidna. Do you guys (@japesinator, @incertia) have any specific requests for functions that would allow you to incorporate this into your workflow?

    What are the effects on performance for concrete execution? Hopefully it does not change drastically, but I think a slight performance decrease would still be acceptable.

    EDIT: July 13 Performance is actually better on this PR than on master, see the measurements done by @xwvvvvwx further down this thread.

    opened by MrChico 32
  • include solc static builds in overlay

    include solc static builds in overlay

    For now we download the builds directly from the foundation. Later we can make our own static builds.

    Install all versions with

    nix-env -f . -iA solc-static-versions
    

    Install a specific version with e.g.

    nix-env -f . -iA solc-static-versions.solc_0_4_12
    

    solc binaries are then available in your path as e.g. solc-0.4.12

    The static binaries are currently ~10MB each for linux and ~30MB each for MacOS, making it feasible to install all versions.

    Sizes: https://gist.github.com/rainbreak/3f2dd60faca44c644f2bc00b79b7a0b0

    opened by rainbreak 29
  • Remove submodules and simplify installation

    Remove submodules and simplify installation

    The install script is kind of magical and has a non trivial support burden. This PR adopts the suggestion from @asymmetric in https://github.com/dapphub/dapptools/issues/376#issuecomment-634312047 and:

    1. removes the maker specific submodules
    2. adopts a pure nix based approach for the recommended install procedure

    Still TODO:

    • [x] deprecate dapp-pkg
    • [x] update dapp-nix-run to remove its reliance on the git repo at $DAPPTOOLS
    • [x] deal with submodules in ds-test #409
    • [x] implement migration paths for users who installed dapptools using the install script
    • [ ] update dapp CHANGELOG

    on dapp-tools

    Closes #376. Closes #123. Closes #94.

    opened by d-xo 27
  • hevm gst compliance

    hevm gst compliance

    call has different write semantics to other operations, which generally pad with zeros up to any excess of size + offset over the data length. With call, writeMemorywas erroneously truncating memory in the case of calls where the bytes to write were shorter than the memory size given. We fix this with a special write method for call.

    A number of other memory writing issues were fixed:

    • correct zero padding of non-call memory operations
    • returndatacopy is meant to fail if reading from beyond what has been written.
    • memory offset calculations are not modulo-256 in some cases

    Lastly, test failures due solely to incorrect nonce or storage were separated and counted.

    Previously:

    passed: 5868
    bad-balance: 3948
    bad-nonce: 0
    bad-storage: 0
    failed: 245
    skipped: 1923
    

    Now (up to 5e67834c798a813f2b987be6bf955080977208d5):

    passed: 5887
    bad-balance: 3944
    bad-nonce: 16
    bad-storage: 14
    failed: 200
    skipped: 1923
    

    The run-blockchain-testwas modified, with --test and --skip arguments implemented for finer control over tests that are run. This is used here for modexp, which typically goes out of memory.

    -BlockchainTests/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3_d0g0v0.json callcodeOutput3_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3_d0g0v0.json callcodeOutput3_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3partial_d0g0v0.json callcodeOutput3partial_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3partial_d0g0v0.json callcodeOutput3partial_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stCallCreateCallCodeTest/callOutput3_d0g0v0.json callOutput3_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCallCreateCallCodeTest/callOutput3_d0g0v0.json callOutput3_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stCallCreateCallCodeTest/callOutput3partial_d0g0v0.json callOutput3partial_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCallCreateCallCodeTest/callOutput3partial_d0g0v0.json callOutput3partial_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPreStore1NotEnoughGas_d0g0v0.json createNameRegistratorPreStore1NotEnoughGas_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPreStore1NotEnoughGas_d0g0v0.json createNameRegistratorPreStore1NotEnoughGas_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stCreate2/Create2OnDepth1024_d0g0v0.json Create2OnDepth1024_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCreate2/Create2OnDepth1024_d0g0v0.json Create2OnDepth1024_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata_d0g1v0.json Create2OOGafterInitCodeReturndata_d0g1v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata_d0g1v0.json Create2OOGafterInitCodeReturndata_d0g1v0_ConstantinopleFix bad-balance
    
    -BlockchainTests/GeneralStateTests/stCreate2/returndatacopy_afterFailing_create_d0g0v0.json returndatacopy_afterFailing_create_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCreate2/returndatacopy_afterFailing_create_d0g0v0.json returndatacopy_afterFailing_create_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stCreate2/returndatacopy_following_create_d1g0v0.json returndatacopy_following_create_d1g0v0_ConstantinopleFix bad-balance
    -BlockchainTests/GeneralStateTests/stCreate2/returndatacopy_following_revert_in_create_d0g0v0.json returndatacopy_following_revert_in_create_d0g0v0_ConstantinopleFix bad-state
    -BlockchainTests/GeneralStateTests/stCreate2/returndatacopy_following_successful_create_d0g0v0.json returndatacopy_following_successful_create_d0g0v0_ConstantinopleFix bad-balance
    +BlockchainTests/GeneralStateTests/stCreate2/returndatacopy_following_create_d1g0v0.json returndatacopy_following_create_d1g0v0_ConstantinopleFix ok
    +BlockchainTests/GeneralStateTests/stCreate2/returndatacopy_following_revert_in_create_d0g0v0.json returndatacopy_following_revert_in_create_d0g0v0_ConstantinopleFix bad-nonce
    +BlockchainTests/GeneralStateTests/stCreate2/returndatacopy_following_successful_create_d0g0v0.json returndatacopy_following_successful_create_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stCreate2/RevertOpcodeCreate_d0g0v0.json RevertOpcodeCreate_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCreate2/RevertOpcodeCreate_d0g0v0.json RevertOpcodeCreate_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stCreate2/RevertOpcodeInCreateReturnsCreate2_d0g0v0.json RevertOpcodeInCreateReturnsCreate2_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCreate2/RevertOpcodeInCreateReturnsCreate2_d0g0v0.json RevertOpcodeInCreateReturnsCreate2_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata_d0g1v0.json CreateOOGafterInitCodeReturndata_d0g1v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata_d0g1v0.json CreateOOGafterInitCodeReturndata_d0g1v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3_d0g0v0.json callcodeOutput3_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3_d0g0v0.json callcodeOutput3_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stDelegatecallTestHomestead/callOutput3_d0g0v0.json callOutput3_d0g0v0_ConstantinopleFix bad-state
    -BlockchainTests/GeneralStateTests/stDelegatecallTestHomestead/callOutput3partial_d0g0v0.json callOutput3partial_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stDelegatecallTestHomestead/callOutput3_d0g0v0.json callOutput3_d0g0v0_ConstantinopleFix ok
    +BlockchainTests/GeneralStateTests/stDelegatecallTestHomestead/callOutput3partial_d0g0v0.json callOutput3partial_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasMemoryAsk_d0g0v0.json RawCallCodeGasMemoryAsk_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasMemoryAsk_d0g0v0.json RawCallCodeGasMemoryAsk_d0g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemoryAsk_d0g0v0.json RawCallCodeGasValueTransferMemoryAsk_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemoryAsk_d0g0v0.json RawCallCodeGasValueTransferMemoryAsk_d0g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemoryAsk_d0g0v0.json RawCallGasValueTransferMemoryAsk_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemoryAsk_d0g0v0.json RawCallGasValueTransferMemoryAsk_d0g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallMemoryGasAsk_d0g0v0.json RawCallMemoryGasAsk_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallMemoryGasAsk_d0g0v0.json RawCallMemoryGasAsk_d0g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemoryAsk_d0g0v0.json RawDelegateCallGasMemoryAsk_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemoryAsk_d0g0v0.json RawDelegateCallGasMemoryAsk_d0g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContract_d0g0v0.json contractCreationOOGdontLeaveEmptyContract_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContract_d0g0v0.json contractCreationOOGdontLeaveEmptyContract_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stHomesteadSpecific/createContractViaContractOOGInitCode_d0g0v0.json createContractViaContractOOGInitCode_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stHomesteadSpecific/createContractViaContractOOGInitCode_d0g0v0.json createContractViaContractOOGInitCode_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0.json CallRecursiveContract_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stInitCodeTest/CallRecursiveContract_d0g0v0.json CallRecursiveContract_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stInitCodeTest/OutOfGasPrefundedContractCreation_d0g3v0.json OutOfGasPrefundedContractCreation_d0g3v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stInitCodeTest/OutOfGasPrefundedContractCreation_d0g3v0.json OutOfGasPrefundedContractCreation_d0g3v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stMemExpandingEIP150Calls/CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCalls_d0g0v0.json CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCalls_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stMemExpandingEIP150Calls/CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCalls_d0g0v0.json CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCalls_d0g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stQuadraticComplexityTest/Return50000_2_d0g1v0.json Return50000_2_d0g1v0_ConstantinopleFix bad-balance
    +BlockchainTests/GeneralStateTests/stQuadraticComplexityTest/Return50000_2_d0g1v0.json Return50000_2_d0g1v0_ConstantinopleFix timeout
    
    -BlockchainTests/GeneralStateTests/stRandom/randomStatetest85_d0g0v0.json randomStatetest85_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stRandom/randomStatetest85_d0g0v0.json randomStatetest85_d0g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stRecursiveCreate/recursiveCreate_d0g0v0.json recursiveCreate_d0g0v0_ConstantinopleFix bad-state
    -BlockchainTests/GeneralStateTests/stRecursiveCreate/recursiveCreateReturnValue_d0g0v0.json recursiveCreateReturnValue_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stRecursiveCreate/recursiveCreate_d0g0v0.json recursiveCreate_d0g0v0_ConstantinopleFix bad-nonce
    +BlockchainTests/GeneralStateTests/stRecursiveCreate/recursiveCreateReturnValue_d0g0v0.json recursiveCreateReturnValue_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_callcode_d0g0v0.json returndatacopy_after_failing_callcode_d0g0v0_ConstantinopleFix bad-state
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_afterFailing_create_d0g0v0.json returndatacopy_afterFailing_create_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_callcode_d0g0v0.json returndatacopy_after_failing_callcode_d0g0v0_ConstantinopleFix ok
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_afterFailing_create_d0g0v0.json returndatacopy_afterFailing_create_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_staticcall_d0g0v0.json returndatacopy_after_failing_staticcall_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_staticcall_d0g0v0.json returndatacopy_after_failing_staticcall_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_following_create_d0g0v0.json returndatacopy_following_create_d0g0v0_ConstantinopleFix bad-balance
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_following_failing_call_d0g0v0.json returndatacopy_following_failing_call_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_following_create_d0g0v0.json returndatacopy_following_create_d0g0v0_ConstantinopleFix ok
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_following_failing_call_d0g0v0.json returndatacopy_following_failing_call_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_following_revert_in_create_d0g0v0.json returndatacopy_following_revert_in_create_d0g0v0_ConstantinopleFix bad-state
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_following_successful_create_d0g0v0.json returndatacopy_following_successful_create_d0g0v0_ConstantinopleFix bad-balance
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_following_too_big_transfer_d0g0v0.json returndatacopy_following_too_big_transfer_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_following_revert_in_create_d0g0v0.json returndatacopy_following_revert_in_create_d0g0v0_ConstantinopleFix bad-nonce
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_following_successful_create_d0g0v0.json returndatacopy_following_successful_create_d0g0v0_ConstantinopleFix ok
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_following_too_big_transfer_d0g0v0.json returndatacopy_following_too_big_transfer_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_initial_256_d2g0v0.json returndatacopy_initial_256_d2g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_initial_256_d2g0v0.json returndatacopy_initial_256_d2g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_initial_d0g0v0.json returndatacopy_initial_d0g0v0_ConstantinopleFix bad-state
    -BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_overrun_d0g0v0.json returndatacopy_overrun_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_initial_d0g0v0.json returndatacopy_initial_d0g0v0_ConstantinopleFix ok
    +BlockchainTests/GeneralStateTests/stReturnDataTest/returndatacopy_overrun_d0g0v0.json returndatacopy_overrun_d0g0v0_ConstantinopleFix ok
    
    -BlockchainTests/GeneralStateTests/stRevertTest/RevertOpcodeCreate_d0g0v0.json RevertOpcodeCreate_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stRevertTest/RevertOpcodeCreate_d0g0v0.json RevertOpcodeCreate_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stRevertTest/RevertOpcodeInCreateReturns_d0g0v0.json RevertOpcodeInCreateReturns_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stRevertTest/RevertOpcodeInCreateReturns_d0g0v0.json RevertOpcodeInCreateReturns_d0g0v0_ConstantinopleFix bad-nonce
    
    -BlockchainTests/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_storage_d0g0v0.json RevertPrecompiledTouch_storage_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_storage_d0g0v0.json RevertPrecompiledTouch_storage_d0g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_storage_d3g0v0.json RevertPrecompiledTouch_storage_d3g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_storage_d3g0v0.json RevertPrecompiledTouch_storage_d3g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stSpecialTest/FailedCreateRevertsDeletion_d0g0v0.json FailedCreateRevertsDeletion_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stSpecialTest/FailedCreateRevertsDeletion_d0g0v0.json FailedCreateRevertsDeletion_d0g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stSStoreTest/InitCollision_d1g0v0.json InitCollision_d1g0v0_ConstantinopleFix bad-state
    -BlockchainTests/GeneralStateTests/stSStoreTest/InitCollision_d2g0v0.json InitCollision_d2g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stSStoreTest/InitCollision_d1g0v0.json InitCollision_d1g0v0_ConstantinopleFix bad-storage
    +BlockchainTests/GeneralStateTests/stSStoreTest/InitCollision_d2g0v0.json InitCollision_d2g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToOneStorageKey_d0g0v0.json ZeroValue_TransactionCALL_ToOneStorageKey_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToOneStorageKey_d0g0v0.json ZeroValue_TransactionCALL_ToOneStorageKey_d0g0v0_ConstantinopleFix bad-storage
    
    -BlockchainTests/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToOneStorageKey_d0g0v0.json ZeroValue_TransactionCALLwithData_ToOneStorageKey_d0g0v0_ConstantinopleFix bad-state
    +BlockchainTests/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToOneStorageKey_d0g0v0.json ZeroValue_TransactionCALLwithData_ToOneStorageKey_d0g0v0_ConstantinopleFix bad-storage
    
    -passed: 5868
    -bad-balance: 3948
    -bad-nonce: 0
    -bad-storage: 0
    -failed: 245
    +passed: 5887
    +bad-balance: 3944
    +bad-nonce: 16
    +bad-storage: 14
    +failed: 200
    
    opened by rainbreak 17
  • ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

    I installed dapp using the instructions found in the readme. However, any usage shows lots of errors like this one. Example:

    dapp build
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    + dapp clean
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    + rm -rf out
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    + solc --overwrite ds-test/=lib/ds-test/src/ ds-test=lib/ds-test/src/index.sol --combined-json=abi,bin,bin-runtime,srcmap,srcmap-runtime,ast,metadata,storage-layout /=/ src/Dapps.t.sol src/Dapps.sol
    ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
    

    I am running Ubuntu 20.04.1 LTS. The package containing that library is also installed:

    dpkg -L libgtk3-nocsd0:amd64
    /.
    /usr
    /usr/lib
    /usr/lib/x86_64-linux-gnu
    /usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0
    /usr/share
    /usr/share/doc
    /usr/share/doc/libgtk3-nocsd0
    /usr/share/doc/libgtk3-nocsd0/changelog.Debian.gz
    /usr/share/doc/libgtk3-nocsd0/copyright
    /usr/share/lintian
    /usr/share/lintian/overrides
    /usr/share/lintian/overrides/libgtk3-nocsd0
    
    opened by Marenz 16
  • dapp: faster builds with single solc pass

    dapp: faster builds with single solc pass

    N.B. breaking change as .abi .bin and .bin-runtime artefacts are no longer generated.

    Pass all of the source files to solc at once for much faster compilation. Previously we iterated through each file, which isn't necessary with the solc json output.

    A positive side effect is no more test duplication in dapp test, which can occur with more complex projects (see e.g. https://github.com/makerdao/dss).

    TODO:

    • [x] fix shellcheck issue
    • [x] if needed, extract .abi .bin .bin-runtime from the json
    • [x] ~decide on --legacy vs --fast flag~ --extract as optional
    • [x] update dapp debug
    opened by rainbreak 16
  • hevm: add SHA256, RIPEMD, IDENTITY, MODEXP, ECADD, ECMUL, ECPAIRING precompiles

    hevm: add SHA256, RIPEMD, IDENTITY, MODEXP, ECADD, ECMUL, ECPAIRING precompiles

    and also fixes some precompile-related bugs, refactors precompile handling.

    GeneralStateTests status: 6015 passed, 3782 bad-balance, 815 failed.

    Thanks @cmditch 😊. This is now ready to merge IMO.

    opened by livnev 14
  • hevm: invalid character at offset

    hevm: invalid character at offset

    Hiya, I'm just giving dapptools a try, I wrote a basic contract and some tests. I have my nix shell pinned at the hevm/0.48.1 tag.

    I'm getting a difficult-to-understand/debug error, is this something I'm doing wrong?

    hevm: invalid character at offset: 4908
    CallStack (from HasCallStack):
      error, called at src/EVM/Solidity.hs:538:13 in hevm-0.48.1-KdjyJ1kXYK7IQeiBwTCoFo:EVM.Solidity
    

    I'm guessing this is some problem with my code [edit: though the offset doesn't seem to change if I add more code to the contract/tests], so I guess this is a request to produce a more actionable error if possible. :)

    Would also appreciate any tips for how to debug this productively.

    Versions:

      /nix/store/6hf8z25vi0h0k8biswmbh5x0c4xwj1d6-hevm-0.48.1.drv
      /nix/store/gi39gmmjhb5q3dk3gp70fn606vw7r4ql-ethsign-0.17.0-go-modules.drv
      /nix/store/h1z3nhhxkaaq452zz5d72g6xyw6bw0f7-ethsign-0.17.0.drv
      /nix/store/31bw7f8bj8ivj6wh48dkngmv1yrvsz54-seth-0.10.1.drv
      /nix/store/1z25gzb3i71hvmr8pq50kn2piljgdgnq-dapp-0.34.0.drv
    

    Full output:

    $ make test
    dapp test # --ffi # enable if you need the `ffi` cheat code on HEVM
    + dapp clean
    + rm -rf out
    hevm: invalid character at offset: 4908
    CallStack (from HasCallStack):
      error, called at src/EVM/Solidity.hs:538:13 in hevm-0.48.1-KdjyJ1kXYK7IQeiBwTCoFo:EVM.Solidity
    make: *** [Makefile:20: test] Error 1
    
    opened by shazow 13
  • hevm: Segmentation fault when running tests with dapptools 0.48.0 and master

    hevm: Segmentation fault when running tests with dapptools 0.48.0 and master

    When running tests with either the last dapptools version 0.48.0 or master (via duppgrade), I get the following using an alchemy rpc url:

    Running 17 tests for src/DssSpell.t.sol:DssSpellTest
    /nix/store/bknss8mgr3g292xlj73ncwxkjdn07cbm-dapp-0.34.0/libexec/dapp/dapp-test: line 59: 105432 Segmentation fault      (core dumped) hevm dapp-test --dapp-root="${DAPP_ROOT}" --json-file="${DAPP_JSON}" ${opts[@]}
    make: *** [Makefile:6: test] Error 139
    

    Switching to 0.46.0 works

    opened by naszam 13
  • having trouble installing custom solc

    having trouble installing custom solc

    I'm trying to install solc v0.6.12, but keep running into issues (I'm on a Mac).

    ➜  contracts git:(master) nix-env -iA solc-versions.solc_0_6_12 \
      -if https://github.com/dapphub/dapptools/tarball/master
    unpacking 'https://github.com/dapphub/dapptools/tarball/master'...
    error: attribute 'solc_0_6_12' in selection path 'solc-versions.solc_0_6_12' not found
    
    ➜  contracts git:(master) nix-env -iA solc-versions.x86_64-linux.solc_0_6_12 \
      -if https://github.com/dapphub/dapptools/tarball/master
    error: attribute 'x86_64-linux' in selection path 'solc-versions.x86_64-linux.solc_0_6_12' not found
    
    ➜  contracts git:(master) nix-env -iA solc-versions.solc_0_6_12 \
      -if https://github.com/dapphub/dapptools/tarball/master
    error: attribute 'solc_0_6_12' in selection path 'solc-versions.solc_0_6_12' not found
    
    ➜  contracts git:(master) nix-env -iA solc-versions.solc_0_6_12 \
      -if https://github.com/dapphub/dapptools/tarball/master
    error: attribute 'solc_0_6_12' in selection path 'solc-versions.solc_0_6_12' not found
    
    ➜  contracts git:(master) nix-env -iA solc-versions.unreleased.solc_0_6_12 \
      -if https://github.com/dapphub/dapptools/tarball/master
    error: attribute 'unreleased' in selection path 'solc-versions.unreleased.solc_0_6_12' not found
    
    ➜  contracts git:(master) nix-env -iA solc-versions.unreleased_x86_64-linux .solc_0_6_12 \
      -if https://github.com/dapphub/dapptools/tarball/master
    error: attribute 'unreleased_x86_64-linux' in selection path 'solc-versions.unreleased_x86_64-linux' not found
    
    ➜  contracts git:(master) nix-env -iA solc-versions.unreleased_x86_64-linux.solc_0_6_12 \
      -if https://github.com/dapphub/dapptools/tarball/master
    error: attribute 'unreleased_x86_64-linux' in selection path 'solc-versions.unreleased_x86_64-linux.solc_0_6_12' not found
    

    You can see the various commands I tried above. Not sure what I'm doing wrong, I'm just following what the README says.

    opened by adrianmcli 13
  • No ethabi

    No ethabi

    Reimplements seth calldata, seth --abi-decode and seth --decode-event to use ethers.js instead of ethabi, removing the ethabi dependency completely. solves https://github.com/dapphub/dapptools/issues/298

    opened by MrChico 12
  • stuck installing

    stuck installing "EVM.FeeSchedule" on OSX at 100% CPU

    Preprocessing library for hevm-0.49.0..
    Building library for hevm-0.49.0..
    [ 1 of 32] Compiling EVM.Demand       ( src/EVM/Demand.hs, dist/build/EVM/Demand.o, dist/build/EVM/Demand.dyn_o )
    [ 2 of 32] Compiling EVM.FeeSchedule  ( src/EVM/FeeSchedule.hs, dist/build/EVM/FeeSchedule.o, dist/build/EVM/FeeSchedule.dyn_o )
    
    opened by msmyers 0
  • error: Please run this script as a regular user when installing in an Image via Dockerfile

    error: Please run this script as a regular user when installing in an Image via Dockerfile

    I wrote a docker file to create an Image with NixOS to run dapptools, the dockerfile as below: Screenshot 2022-07-25 at 23 46 55

    But docker build results turned to be an error: Screenshot 2022-07-25 at 23 52 12

    How to prevent this error?

    opened by ssghost 0
  • build(deps): bump github.com/ethereum/go-ethereum from 1.10.6 to 1.10.17 in /src/ethsign

    build(deps): bump github.com/ethereum/go-ethereum from 1.10.6 to 1.10.17 in /src/ethsign

    Bumps github.com/ethereum/go-ethereum from 1.10.6 to 1.10.17.

    Release notes

    Sourced from github.com/ethereum/go-ethereum's releases.

    Ploitari (v1.10.17)

    This is a maintenance release. This release contains a lot of work in preparation for The Merge, and work for an upcoming change to the way state is stored in go-ethereum.

    This release also adds a new tool to convert 'legacy' receipts into a newer format. During startup, geth will check the database and tell you if you need to perform the conversion. Converting receipts is only needed if geth's ancients database has not been resynced from scratch during the last couple of years. It is recommended to back-up your receipts freezer table (ancients/receipts*) before performing the conversion.

    Compatibility note about core/types: For optimization purposes, types.Header and other types in this package now implement the rlp.Encoder interface. This change can cause incompatibilities because the new method is implemented with pointer receiver. Attempting to RLP-encode unadressable (i.e. non-pointer) values of type Header does not work anymore and will result in an error.

    Change Log

    For a full rundown of the changes please consult the Geth 1.10.17 release milestone.


    As with all our previous releases, you can find the:

    Osun (v1.10.16)

    The focus of this release is bugfixes.

    Bugfixes

    • Block tracing via debug.traceBlockByHash has sometimes produced inconsistent/corrupt results. Fixed via (#24286).
    • The --whitelist CLI parameter functionality was broken in v1.10.14, and is fixed in this release (#24210).
    • A bug was introduced, and subsequently fixed, which could cause data corruption during mining (#24349).
    • When signing complex datatypes in EIP712-type data, the signing-hash was incorrect. Fixed via (#24220).
    • Evm execution times exported via metrics, were sometimes incorrect. Fixed in (#24304).
    • Range prover edgecases found and fixed (#24266, #24257).
    • Fix an error related to HTTP2 handling (#24292).
    • A lot of spleling-mistkaes and issues related to correctness were fixed (#24194, #24196, #24198, #24205, #24207, #24244, #24270, #24271, #24224, #24372, #24323, #24289, #24263 and #24211).

    New features

    • Work on The Merge includes support for RANDOM opcode (#24141) and various other internal refactorings (#24328, #24280, #24236, #23256).
    • The devp2p binary now supports doing snap/v1 protocol testing against a remote node, which can be used for Hive-testing (#24276).
    • New diagnostic command to show database metadata (#23900)
    • ethclient support for CallContractAtHash (#24355).

    ... (truncated)

    Commits
    • 25c9b49 params: go-ethereum v1.10.17 stable
    • de6a113 eth/catalyst: only apply block if we actually have the state (#24598)
    • b502b6a cmd/geth: change to non-fatal error message when legacy receipt storage is no...
    • 1027cb5 Merge pull request #24605 from karalabe/revert-setting-ttd
    • b06e8c4 core/vm: fix sstore gas comment type (#24583)
    • b45d82e core: set ttd override on all chain variations
    • 0fffd3a build: close sftp connection when done (#24593)
    • eb3ebce internal/build: exit sftp upload (#24590)
    • d1c243f internal/build: prevent travis timeout during ppa upload (#24589)
    • 19b9cf7 internal/build: show ppa upload process stdout on stdout (#24588)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • hevm: XXXX: openBinaryFile: does not exist (No such file or directory)

    hevm: XXXX: openBinaryFile: does not exist (No such file or directory)

    After upgrading solc by doing

    nix-env -f https://github.com/dapphub/dapptools/archive/master.tar.gz -iA solc-static-versions.solc_0_8_13
    

    seth call stopped working with the following error:

    hevm: /contracts/LDRToken.sol: openBinaryFile: does not exist (No such file or directory)
    

    But I can see that the temporary directory has the contract:

    $ cd seth.debug.DMza
    $ find
    .
    ./contracts
    ./contracts/LDRToken.sol
    ./standard.json
    ./@openzeppelin
    ./@openzeppelin/contracts
    ./@openzeppelin/contracts/utils
    ./@openzeppelin/contracts/utils/introspection
    ./@openzeppelin/contracts/utils/introspection/IERC165.sol
    ./@openzeppelin/contracts/utils/introspection/ERC165.sol
    ./@openzeppelin/contracts/utils/cryptography
    ./@openzeppelin/contracts/utils/cryptography/ECDSA.sol
    ./@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol
    ./@openzeppelin/contracts/utils/Address.sol
    ./@openzeppelin/contracts/utils/Strings.sol
    ./@openzeppelin/contracts/utils/Context.sol
    ./@openzeppelin/contracts/interfaces
    ./@openzeppelin/contracts/interfaces/IERC1271.sol
    ./@openzeppelin/contracts/access
    ./@openzeppelin/contracts/access/IAccessControl.sol
    ./@openzeppelin/contracts/access/AccessControl.sol
    ./@openzeppelin/contracts/token
    ./@openzeppelin/contracts/token/ERC1155
    ./@openzeppelin/contracts/token/ERC1155/extensions
    ./@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol
    ./@openzeppelin/contracts/token/ERC1155/IERC1155.sol
    ./@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol
    ./@openzeppelin/contracts/token/ERC1155/ERC1155.sol
    ./@openzeppelin/contracts/security
    ./@openzeppelin/contracts/security/ReentrancyGuard.sol
    ./@openzeppelin/contracts/security/Pausable.sol
    

    I think the problem is that standard.json has paths that are not referenced from the correct working directory

    seth.debug.DMza$ head standard.json

    {
      "contracts": {
        "/contracts/LDRToken.sol": {
          "LDRToken": {
            "abi": [
        ...
    

    I noticed that hevm has --json-file parameter but also --dapp-root . In my experiments this is not set, maybe it should be.

    Anyways, I added -x parameter to several of the nix wrappers and re-execute the command, I hope all this information helps to solve the problem.

    $ seth call  0xfd43d1da000558473822302e1d44d81da2e4cc0d 0xa3cba09a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000011c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041c8ed0f84d50b9ff29fac24cf364f4a3eff0c3c16bf329270aec884c008dfb39b1d3348aa9248e8c69db15647d1c217123e15443a1c749059397016f2e67dcd021c00000000000000000000000000000000000000000000000000000000000000 --debug
    + export PATH=/nix/store/2243wkkr3gfmbis4hhirck2kp001xp7s-bc-1.07.1/bin:/nix/store/a4v1akahda85rl9gfphb07zzw79z8pb1-coreutils-8.32/bin:/nix/store/g8w72aanshmw5gxi02ril1qlb427rjzy-curl-7.76.1-bin/bin:/nix/store/yd814n9d2yn15q2h36ganscijq1vvgix-ethsign-0.17.1/bin:/nix/store/bm33rsl98p27wpx1ad4r2h78lnmzndz7-git-2.31.1/bin:/nix/store/g34ldykl1cal5b9ir3xinnq70m52fcnq-gnused-4.8/bin:/nix/store/f1aq2j7v51w4i7z7h05lij3ri7k4mw46-nix-2.3.12/bin:/nix/store/bjc2qj4ln6b23s6sszs0pdzf5ngbc7c8-jq-1.6-bin/bin:/nix/store/iaarwd2xdrcgypnkngvbcs8y2mg2bkgb-hevm-0.49.0/bin:/nix/store/wi1s2nf3gvwdzhm7hz1smr5xn02mj2fw-jays-1.20171121/bin:/nix/store/cdalbhzm3z4gz07wyg89maprdbjc4yah-nodejs-14.17.0/bin:/nix/store/59f0zqdnb0vmj1bqadxkrsvxc454fmm2-tre-0.8.0/bin:/nix/store/07j6d0lr6p1gjxi2qhf6wn88nl81x5jj-perl-5.32.1/bin:/nix/store/7b6wpnj9i7b6crz6l4hfn9jb04rv946a-solc/bin:/nix/store/7n3yzh9wza4bdqc04v01xddnfhkrwk2a-gnugrep-3.6/bin:/home/nico/.nix-profile/bin:/home/nico/go/bin:/home/nico/.local/bin:/home/nico/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
    + PATH=/nix/store/2243wkkr3gfmbis4hhirck2kp001xp7s-bc-1.07.1/bin:/nix/store/a4v1akahda85rl9gfphb07zzw79z8pb1-coreutils-8.32/bin:/nix/store/g8w72aanshmw5gxi02ril1qlb427rjzy-curl-7.76.1-bin/bin:/nix/store/yd814n9d2yn15q2h36ganscijq1vvgix-ethsign-0.17.1/bin:/nix/store/bm33rsl98p27wpx1ad4r2h78lnmzndz7-git-2.31.1/bin:/nix/store/g34ldykl1cal5b9ir3xinnq70m52fcnq-gnused-4.8/bin:/nix/store/f1aq2j7v51w4i7z7h05lij3ri7k4mw46-nix-2.3.12/bin:/nix/store/bjc2qj4ln6b23s6sszs0pdzf5ngbc7c8-jq-1.6-bin/bin:/nix/store/iaarwd2xdrcgypnkngvbcs8y2mg2bkgb-hevm-0.49.0/bin:/nix/store/wi1s2nf3gvwdzhm7hz1smr5xn02mj2fw-jays-1.20171121/bin:/nix/store/cdalbhzm3z4gz07wyg89maprdbjc4yah-nodejs-14.17.0/bin:/nix/store/59f0zqdnb0vmj1bqadxkrsvxc454fmm2-tre-0.8.0/bin:/nix/store/07j6d0lr6p1gjxi2qhf6wn88nl81x5jj-perl-5.32.1/bin:/nix/store/7b6wpnj9i7b6crz6l4hfn9jb04rv946a-solc/bin:/nix/store/7n3yzh9wza4bdqc04v01xddnfhkrwk2a-gnugrep-3.6/bin:/home/nico/.nix-profile/bin:/home/nico/go/bin:/home/nico/.local/bin:/home/nico/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
    + export DAPPTOOLS=/nix/store/0s0wjq9lzgw3kq52x2ckbr0jvikl15xa-dapptools-src
    + DAPPTOOLS=/nix/store/0s0wjq9lzgw3kq52x2ckbr0jvikl15xa-dapptools-src
    + export LOCALE_ARCHIVE=/nix/store/in621vh2kj0ayqa6qc9pqnjvx6hzj5h5-glibc-locales-2.32-46/lib/locale/locale-archive
    + LOCALE_ARCHIVE=/nix/store/in621vh2kj0ayqa6qc9pqnjvx6hzj5h5-glibc-locales-2.32-46/lib/locale/locale-archive
    + exec -a /home/nico/.nix-profile/bin/seth /nix/store/5sk0yp9x2qfv7chjvfpsir2fm9zrypp0-seth-0.12.0/bin/.seth-wrapped call 0xfd43d1da000558473822302e1d44d81da2e4cc0d 0xa3cba09a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000011c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041c8ed0f84d50b9ff29fac24cf364f4a3eff0c3c16bf329270aec884c008dfb39b1d3348aa9248e8c69db15647d1c217123e15443a1c749059397016f2e67dcd021c00000000000000000000000000000000000000000000000000000000000000 --debug
    seth-call: info: fetching contract source from etherscan...
    + export LD_LIBRARY_PATH=/nix/store/zi9cn3q9ak0c6xqvy38l0cbi4rbkws3z-z3-4.8.10/lib
    + LD_LIBRARY_PATH=/nix/store/zi9cn3q9ak0c6xqvy38l0cbi4rbkws3z-z3-4.8.10/lib
    + exec -a /nix/store/sbqnchkdyidcxnk3jl7gvdkfj03is5kb-solc-static-0.8.13/bin/solc-0.8.13 /nix/store/sbqnchkdyidcxnk3jl7gvdkfj03is5kb-solc-static-0.8.13/bin/.solc-0.8.13-wrapped --standard-json --allow-paths /home/nico/lab/brink.trade/seth.debug.pVgA
    + export PATH=/nix/store/kxj6cblcsd1qcbbxlmbswwrn89zcmgd6-bash-4.4-p23/bin:/nix/store/a4v1akahda85rl9gfphb07zzw79z8pb1-coreutils-8.32/bin:/nix/store/bm33rsl98p27wpx1ad4r2h78lnmzndz7-git-2.31.1/bin:/nix/store/7b6wpnj9i7b6crz6l4hfn9jb04rv946a-solc/bin:/nix/store/5sk0yp9x2qfv7chjvfpsir2fm9zrypp0-seth-0.12.0/libexec/seth:/nix/store/2243wkkr3gfmbis4hhirck2kp001xp7s-bc-1.07.1/bin:/nix/store/a4v1akahda85rl9gfphb07zzw79z8pb1-coreutils-8.32/bin:/nix/store/g8w72aanshmw5gxi02ril1qlb427rjzy-curl-7.76.1-bin/bin:/nix/store/yd814n9d2yn15q2h36ganscijq1vvgix-ethsign-0.17.1/bin:/nix/store/bm33rsl98p27wpx1ad4r2h78lnmzndz7-git-2.31.1/bin:/nix/store/g34ldykl1cal5b9ir3xinnq70m52fcnq-gnused-4.8/bin:/nix/store/f1aq2j7v51w4i7z7h05lij3ri7k4mw46-nix-2.3.12/bin:/nix/store/bjc2qj4ln6b23s6sszs0pdzf5ngbc7c8-jq-1.6-bin/bin:/nix/store/iaarwd2xdrcgypnkngvbcs8y2mg2bkgb-hevm-0.49.0/bin:/nix/store/wi1s2nf3gvwdzhm7hz1smr5xn02mj2fw-jays-1.20171121/bin:/nix/store/cdalbhzm3z4gz07wyg89maprdbjc4yah-nodejs-14.17.0/bin:/nix/store/59f0zqdnb0vmj1bqadxkrsvxc454fmm2-tre-0.8.0/bin:/nix/store/07j6d0lr6p1gjxi2qhf6wn88nl81x5jj-perl-5.32.1/bin:/nix/store/7b6wpnj9i7b6crz6l4hfn9jb04rv946a-solc/bin:/nix/store/7n3yzh9wza4bdqc04v01xddnfhkrwk2a-gnugrep-3.6/bin:/home/nico/.nix-profile/bin:/home/nico/go/bin:/home/nico/.local/bin:/home/nico/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
    + PATH=/nix/store/kxj6cblcsd1qcbbxlmbswwrn89zcmgd6-bash-4.4-p23/bin:/nix/store/a4v1akahda85rl9gfphb07zzw79z8pb1-coreutils-8.32/bin:/nix/store/bm33rsl98p27wpx1ad4r2h78lnmzndz7-git-2.31.1/bin:/nix/store/7b6wpnj9i7b6crz6l4hfn9jb04rv946a-solc/bin:/nix/store/5sk0yp9x2qfv7chjvfpsir2fm9zrypp0-seth-0.12.0/libexec/seth:/nix/store/2243wkkr3gfmbis4hhirck2kp001xp7s-bc-1.07.1/bin:/nix/store/a4v1akahda85rl9gfphb07zzw79z8pb1-coreutils-8.32/bin:/nix/store/g8w72aanshmw5gxi02ril1qlb427rjzy-curl-7.76.1-bin/bin:/nix/store/yd814n9d2yn15q2h36ganscijq1vvgix-ethsign-0.17.1/bin:/nix/store/bm33rsl98p27wpx1ad4r2h78lnmzndz7-git-2.31.1/bin:/nix/store/g34ldykl1cal5b9ir3xinnq70m52fcnq-gnused-4.8/bin:/nix/store/f1aq2j7v51w4i7z7h05lij3ri7k4mw46-nix-2.3.12/bin:/nix/store/bjc2qj4ln6b23s6sszs0pdzf5ngbc7c8-jq-1.6-bin/bin:/nix/store/iaarwd2xdrcgypnkngvbcs8y2mg2bkgb-hevm-0.49.0/bin:/nix/store/wi1s2nf3gvwdzhm7hz1smr5xn02mj2fw-jays-1.20171121/bin:/nix/store/cdalbhzm3z4gz07wyg89maprdbjc4yah-nodejs-14.17.0/bin:/nix/store/59f0zqdnb0vmj1bqadxkrsvxc454fmm2-tre-0.8.0/bin:/nix/store/07j6d0lr6p1gjxi2qhf6wn88nl81x5jj-perl-5.32.1/bin:/nix/store/7b6wpnj9i7b6crz6l4hfn9jb04rv946a-solc/bin:/nix/store/7n3yzh9wza4bdqc04v01xddnfhkrwk2a-gnugrep-3.6/bin:/home/nico/.nix-profile/bin:/home/nico/go/bin:/home/nico/.local/bin:/home/nico/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
    + exec -a /nix/store/iaarwd2xdrcgypnkngvbcs8y2mg2bkgb-hevm-0.49.0/bin/hevm /nix/store/iaarwd2xdrcgypnkngvbcs8y2mg2bkgb-hevm-0.49.0/bin/.hevm-wrapped exec --debug --rpc http://127.0.0.1:8545 --caller 0xa450cc0a298d99c2794b2f26b9f8e4302a8fe5e1 --value 0 --nonce 88 --origin 0xa450cc0a298d99c2794b2f26b9f8e4302a8fe5e1 --gas 200000 --gasprice 2000000000 --gaslimit 30000000 --block 14836976 --number 14836976 --timestamp 1653413514 --chainid 4919 --address 0xFD43D1dA000558473822302e1d44D81dA2e4cC0d --calldata 0xa3cba09a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000011c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041c8ed0f84d50b9ff29fac24cf364f4a3eff0c3c16bf329270aec884c008dfb39b1d3348aa9248e8c69db15647d1c217123e15443a1c749059397016f2e67dcd021c00000000000000000000000000000000000000000000000000000000000000 --json-file seth.debug.pVgA/standard.json
    hevm: /contracts/LDRToken.sol: openBinaryFile: does not exist (No such file or directory)
    
    opened by nicocesar 0
  • Bump nixpkgs and hevm dependencies

    Bump nixpkgs and hevm dependencies

    Description

    hevm is currently broken in nixpkgs because text-format doesn't support the new GHC that was bumped in this PR (https://github.com/NixOS/nixpkgs/pull/160733). Fortunately, hevm appears to not use text-format so it can be removed from dependencies. To make hevm compatible with the upcoming 22.05 release of nixpkgs, I bumped nixpkgs to the latest unstable (it will branch off to become 22.05 soon https://github.com/NixOS/nixpkgs/issues/165792) and updated the code to work with the newer version of GHC and dependencies (aeson in particular).

    Checklist

    • [x] tested locally
    • [ ] added automated tests
    • [ ] updated the docs
    • [ ] updated the changelog
    opened by arcz 6
  • contract not found

    contract not found

    I am trying to debug the transaction below on Fuse network, that uses open-ethereum 3.2.6, The transaction is in the explorer and the 'contract not found' that is shown in the output error, is in fact there also.

    seth run-tx 0x83daef68855b01cc70af7976d83ceaa150336e215efa78e4ed0d2922a4817b5a
    hevm: contract not found: 0x349Bc296D9945b1D4004d6De029BeAB33A78DEdc
    CallStack (from HasCallStack):
      error, called at hevm-cli/hevm-cli.hs:757:11 in main:Main
    
    

    The rpc is : https://rpc.fuse.io

    opened by henry-hz 1
Releases(hevm/0.49.0)
  • hevm/0.49.0(Nov 15, 2021)

    What's Changed

    • Release by @d-xo in https://github.com/dapphub/dapptools/pull/780
    • dapp: Minor comment fix by @transmissions11 in https://github.com/dapphub/dapptools/pull/779
    • seth: add Optimistic Ethereum and Arbitrum Support by @rajivpo in https://github.com/dapphub/dapptools/pull/781
    • github: add pr template by @d-xo in https://github.com/dapphub/dapptools/pull/784
    • use eth instead of wei as default for seth --to-wei by @endophysics in https://github.com/dapphub/dapptools/pull/782
    • seth: add function selector and calldata encoding/decoding helpers by @mds1 in https://github.com/dapphub/dapptools/pull/757
    • dapp: Ignore non-directories in dapp-remappings by @transmissions11 in https://github.com/dapphub/dapptools/pull/778
    • Revert "use eth instead of wei as default for seth --to-wei" by @d-xo in https://github.com/dapphub/dapptools/pull/791
    • seth (docs): fix lookup-address docs by @mds1 in https://github.com/dapphub/dapptools/pull/792
    • hevm: skip unit test contracts with no code by @d-xo in https://github.com/dapphub/dapptools/pull/785
    • hevm: no whitespace in invariant replay data by @d-xo in https://github.com/dapphub/dapptools/pull/786
    • Add example to dapp verify-contract by @odyslam in https://github.com/dapphub/dapptools/pull/798
    • seth: non checksum addresses supported in ETH_FROM by @d-xo in https://github.com/dapphub/dapptools/pull/796
    • Add --from-fix command by @mds1 in https://github.com/dapphub/dapptools/pull/787
    • fix create with 1559 bug by @MrChico in https://github.com/dapphub/dapptools/pull/799
    • seth: Use raw jq output in 4byte by @transmissions11 in https://github.com/dapphub/dapptools/pull/788
    • dapp: fix library linking on solc 0.7+ by @d-xo in https://github.com/dapphub/dapptools/pull/804
    • dapp-tests: use bash_unit as a test runner by @d-xo in https://github.com/dapphub/dapptools/pull/797
    • seth: Docs fix by @transmissions11 in https://github.com/dapphub/dapptools/pull/811
    • clearer output for the invalid opcode by @d-xo in https://github.com/dapphub/dapptools/pull/814
    • dapp: build: strip escape chars and colorize output by @d-xo in https://github.com/dapphub/dapptools/pull/805
    • run-tx bundles source by default by @d-xo in https://github.com/dapphub/dapptools/pull/808
    • Fix example in Readme by @julianmrodri in https://github.com/dapphub/dapptools/pull/831
    • seth: debug: fix by @d-xo in https://github.com/dapphub/dapptools/pull/812
    • hevm: nicer error message when trying to deploy unlinked bytecode by @d-xo in https://github.com/dapphub/dapptools/pull/816
    • hevm/dapp: solc 0.8.9/0.8.8 support by @transmissions11 in https://github.com/dapphub/dapptools/pull/827
    • hevm: Normalize changelog by @transmissions11 in https://github.com/dapphub/dapptools/pull/835
    • Document dapp uninstall <lib> by @TimDaub in https://github.com/dapphub/dapptools/pull/837
    • Add Polygon Support by @ncitron in https://github.com/dapphub/dapptools/pull/853
    • add event parameter name by @MrChico in https://github.com/dapphub/dapptools/pull/848
    • Cachixbump by @MrChico in https://github.com/dapphub/dapptools/pull/856
    • dapp: Gas snapshotting by @transmissions11 in https://github.com/dapphub/dapptools/pull/850
    • hevm/dapp: solc 0.8.10 support by @cleanunicorn in https://github.com/dapphub/dapptools/pull/857
    • seth: update optimism genesis blockhashes by @tynes in https://github.com/dapphub/dapptools/pull/862
    • Fix seth sig by @d-xo in https://github.com/dapphub/dapptools/pull/818
    • Release candidate by @jennypollack in https://github.com/dapphub/dapptools/pull/860
    • cachixbump release.yml by @jennypollack in https://github.com/dapphub/dapptools/pull/865

    New Contributors

    • @rajivpo made their first contribution in https://github.com/dapphub/dapptools/pull/781
    • @endophysics made their first contribution in https://github.com/dapphub/dapptools/pull/782
    • @odyslam made their first contribution in https://github.com/dapphub/dapptools/pull/798
    • @julianmrodri made their first contribution in https://github.com/dapphub/dapptools/pull/831
    • @TimDaub made their first contribution in https://github.com/dapphub/dapptools/pull/837
    • @ncitron made their first contribution in https://github.com/dapphub/dapptools/pull/853
    • @cleanunicorn made their first contribution in https://github.com/dapphub/dapptools/pull/857
    • @tynes made their first contribution in https://github.com/dapphub/dapptools/pull/862

    Full Changelog: https://github.com/dapphub/dapptools/compare/seth/0.11.0...hevm/0.49.0

    Source code(tar.gz)
    Source code(zip)
  • seth/0.11.0(Sep 9, 2021)

    Added

    • seth basefee command returns basefee for the latest block, or any block with [blocknumber] parameter
    • seth namehash <name> to get the ENS namehash of a name
    • seth resolve-name <name> to resolve an ENS name to an address
    • seth lookup-address <address> to lookup the ENS name an address reverse resolves to
    • Dynamic transaction fee format transactions (EIP-1559) supported by introducing the flag --prio-fee and corresponding environment variable ETH_PRIO_FEE to seth and ethsign. If --prio-fee is provided (or ETH_PRIO_FEE) is set, 1559 transaction will be used and --gas-price will reflect the maximum gas price, rather than the absolute gas price.
    • If ETH_RPC_ACCOUNTS is set and the account corresponding to ETH_FROM exists in the keystore, Seth will sign the transaction locally and then publish it signed (previously it'd always send it to the node)

    Changed

    • --gas-price will be used as max-fee when --prio-fee is set
    • [BREAKING] seth will no longer search Parity / OpenEthereum related keystores by default. These keystores can still be searched by setting the ETH_KEYSTORE environment variable.

    Fixed

    • Fix --use bug
    • seth bundle-source writes the contents of standard-json to the current directory to enable better sourcemaps for multi-file etherscan source code.
    • seth estimate no longer sets a gas limit when estimating gas
    Source code(tar.gz)
    Source code(zip)
    hevm(26.55 MB)
    hevm-macOS.tar.gz(6.18 MB)
  • hevm/0.48.1(Sep 9, 2021)

  • ethsign/0.17.0(Sep 9, 2021)

    Changed

    • Makes --keystore argument to ethsign import no longer mandatory, defaulting to systems paths or to the value of the ETH_KEYSTORE environment variable.
    • ethsign import --keystore was changed to ethsign import --key-store for consistency with other commands.
    • [BREAKING] removes Parity / OpenEthereum related default keystores
    Source code(tar.gz)
    Source code(zip)
    hevm(26.55 MB)
    hevm-macOS.tar.gz(6.18 MB)
  • dapp/0.34.1(Sep 9, 2021)

    Added

    • DAPP_TEST_DEPTH env var to control --depth
    • --coverage flag for dapp test to generate coverage via hevm
    • dapp debug respects the DAPP_LINK_TEST_LIBRARIES environment variable.
    • dapp install accepts URLs with git tags, branches or revs specified as <url>@<tag>

    Changed

    • Dapp debug respects DAPP_LINK_TEST_LIBRARIES

    Fixed

    • Fix quotation bug in dapp replay
    Source code(tar.gz)
    Source code(zip)
    hevm(26.55 MB)
    hevm-macOS.tar.gz(6.18 MB)
  • hevm/0.48.0(Aug 5, 2021)

    Changed

    • Updated to London hard fork!
    • The configuration variable DAPP_TEST_BALANCE_CREATE has been renamed to DAPP_TEST_BALANCE
    • Default smttimeout has been increased to 1 minute.
    • A new flag has been added to hevm (--ask-smt-iterations) that controls the number of iterations at which the symbolic execution engine will stop eager evaluation and begin to query the smt solver whether a given branch is reachable or not.
    • Contract fetching now happens asynchronously.
    • Fixed no contract definition crashes
    • Removed NoSuchContract failures
    Source code(tar.gz)
    Source code(zip)
    hevm(26.52 MB)
  • hevm/0.47.0(Jul 1, 2021)

    Added

    • A new test runner for checking invariants against random reachable contract states.
    • hevm symbolic can search for solc 0.8 style assertion violations, and a new --assertions flag has been added allowing users to customize which assertions should be reported
    • A new cheatcode ffi(string[]) that executes an arbitrary command in the system shell

    Changed

    • Z3 is once again the default smt solver
    • Updated nixpkgs to the 21.05 channel

    Fixed

    • Sourcemaps for contracts containing immutable are now shown in the debug view.
    Source code(tar.gz)
    Source code(zip)
    hevm(24.81 MB)
  • dapp/0.33.0(Jul 1, 2021)

    Added

    • A new type of test has been added: invariant testing, which runs a test function against a random reachable contract state. More information in the README
    • A new flag for dapp test, --ffi allows users to enable the ffi() cheatcode in their tests

    Changed

    • solc 0.8.6 is now the default compiler version
    • updated nixpkgs to the 21.05 channel
    Source code(tar.gz)
    Source code(zip)
    hevm(24.81 MB)
  • hevm/0.46.0(Apr 29, 2021)

    Added

    • Updated to Berlin! Conformant with GeneralStateTests at commit hash 644967e345bbc6642fab613e1b1737abbe131f78.

    Fixed

    • ADDMOD and MULMOD by zero yields zero.
    • Address calculation for newly created contracts.
    • Accomodated for the notorious "anomolies on the main network" (see yellow paper Appendix K for trivia)
    • A hevm crash when debugging a SELFDESTRUCT contract.
    Source code(tar.gz)
    Source code(zip)
  • hevm/0.45.0(Mar 23, 2021)

    hevm [0.45.0]

    Added

    • Two new cheatcodes were added: sign(uint sk, bytes message) and addr(uint sk). Taken together these should allow for much more ergonomic testing of code that handles signed messages.
    • Symbolic execution can deal with partially symbolic bytecode, allowing for symbolic constructor arguments to be given in tests.

    Fixed

    • Fixed a bug in the abiencoding.
    • Fixed the range being generated by ints.
    • hevm flatten combines the SPDX license identifiers of all source files.

    Changed

    • updated nixpkgs to the 20.09 channel
    • Arbitrary instance of AbiType can no longer generate a tuple

    dapp [0.32.2]

    Changed

    • updated nixpkgs to the 20.09 channel

    seth [0.10.1]

    Added

    • Thanks to an upgrade in ethsign, seth is more likely to find your ledger live account without having to set ETH_HDPATH.

    Changed

    • updated nixpkgs to the 20.09 channel

    Fixed

    • seth calldata returns correct abiencoding
    Source code(tar.gz)
    Source code(zip)
  • hevm/0.44.1(Feb 2, 2021)

  • dapp/0.32.1(Feb 2, 2021)

    dapp 0.32.1

    Fixed

    • dapp init works with the new standard-json architecture
    • dapp verify-contract works with the new standard-json architecture

    hevm 0.44.1

    Changed

    • hevm cheatcodes now accept symbolic arguments, allowing e.g. symbolic jumps in time in unit tests
    • More efficient arithmetic overflow checks by translating queries to a more intelligent form.
    Source code(tar.gz)
    Source code(zip)
  • hevm/0.44.0(Jan 26, 2021)

    hevm

    0.44.0 - 2020-01-26

    Added

    • hevm now accepts solidity json output built via --standard-json as well as --combined-json.
    • addresses in the trace output are prefixed with [email protected] if there is a corresponding contract and @0x... otherwise.

    Fixed

    • If the --address flag is present in hevm exec or hevm symbolic, it overrides the contract address at which a contract will be created.
    • Address pretty printing
    • Updated sbv to 8.9.5 to fix "non-const in array declaration" cvc4 issue with ds-test.

    dapp

    [0.32.0] - 2021-01-26

    Changed

    • dapp build, dapp test, dapp --make-library-state, dapp create now use solidity output generated via --standard-json instead of --combined-json. Building via the old format is still possible via dapp build --legacy, but is considered deprecated and will be removed in future releases.

    The standard json used by dapp build can be set using the environment variable: DAPP_STANDARD_JSON, and defaults to the result of dapp mk-standard-json.

    • dapp --find-libraries no longer requires --extract: libraries do not need to be built to be found.

    Added

    • dapp mk-standard-json command to generate a standard json for setting Solidity compiler options. The settings can be tweaked using the following environment variables:
      • DAPP_REMAPPINGS (defaults to the result of dapp remappings)
      • DAPP_LIBRARIES (defaults to the result of dapp --find-libraries)
      • DAPP_BUILD_OPTIMIZE (defaults to false)

    Removed

    • SOLC_FLAGS. To modify the compiler settings, use a custom standard json and set the filename as argument to DAPP_STANDARD_JSON.

    Fixed

    • dapp create <contract> --verify now passes the qualified path to dapp verify-contract, as expected.

    seth

    [0.10.0] - 2021-01-26

    Changed

    • seth combined-json was renamed to seth-solc and invokes solc using the --standard-json input.
    • seth bundle-source correctly interprets etherscan sources using standard json
    • the --gas-price argument can optionally accept a gwei suffix i.e. seth call --gas-price 100gwei ...
    Source code(tar.gz)
    Source code(zip)
  • hevm/0.43.2(Dec 11, 2020)

  • seth/0.9.4(Dec 10, 2020)

    [0.9.4] - 2020-12-10

    Added

    • seth --use can find solc versions in the nix store even if they are not present on PATH

    Fixed

    • Correct help text for seth --use
    Source code(tar.gz)
    Source code(zip)
  • hevm/0.43.1(Dec 10, 2020)

    0.43.1 - 2020-12-10

    Changed

    • Counterexamples from symbolic tests now show clearer failure reasons

    Fixed

    • Symbolic tests now work with RPC
    • Branch selection is working again in the interactive debugger
    Source code(tar.gz)
    Source code(zip)
  • dapp/0.31.1(Dec 10, 2020)

    [0.31.1] - 2020-12-10

    Added

    • dapp --use can find solc versions in the nix store even if they are not present on PATH

    Fixed

    • Corrected help text for solc version installation
    Source code(tar.gz)
    Source code(zip)
  • seth/0.9.3(Nov 29, 2020)

    [0.9.3] - 2020-11-29

    • seth --use searches directly for binaries in your path, rather than using nix run, giving a significant speed boost.
    Source code(tar.gz)
    Source code(zip)
  • hevm/0.43.0(Nov 29, 2020)

    0.43.0 - 2020-11-29

    Added

    • A --show-tree option to hevm symbolic which prints the execution tree explored.
    • Some symbolic terms are displayed with richer semantic information, instead of the black box <symbolic>.
    • hevm dapp-test now supports symbolic execution of test methods that are prefixed with prove or proveFail
    • The hevm interactive alias has been removed, as it is equivalent to hevm dapp-test --debug
    • hevm dapp-test --match now matches on contract name and file path, as well as test name
    • Step through the callstack in debug mode using the arrow keys

    Changed

    • dapp-test trace output now detects ds-note events and shows LogNote
    • create addresses are shown with @<address> in the trace
    • DSTest.setUp() is only run if it exists, rather than failing
    • support new ds-test log_named_x(string, x) (previously bytes32 keys)
    • return arguments are fully displayed in the trace (previously only a single word)
    • return/revert trace will now show the correct source position
    Source code(tar.gz)
    Source code(zip)
  • dapp/0.31.0(Nov 29, 2020)

    [0.31.0] - 2020-11-29

    Changed

    • dapp test --match now matches on file path and contract name, as well as test name
    • dapp --use searches directly for binaries in your path, rather than using nix run, giving a significant speed boost.
    Source code(tar.gz)
    Source code(zip)
  • hevm/0.42.0(Oct 31, 2020)

    hevm 0.42.0 - 2020-10-31

    Changed

    • z3 updated to 4.8.8
    • optimize SMT queries
    • More useful trace output for unknown calls
    • Default to on chain values for coinbase, timestamp, difficulty, blocknumber when rpc is provided
    • Perform tx initialization (gas payment, value transfer) in hevm exec, hevm symbolic and hevm dapp-test.

    Added

    • TTY commands P and c-p for taking larger steps backwards in the debuger.
    • --cache flag for dapp-test, exec, symbolic, interactive, enabling caching of contracts received by rpc.
    • load(address,bytes32) cheat code allowing storage reads from arbitrary contracts.

    dapp 0.30.0 - 2020-10-31

    Added

    • Support for solc 0.6.8
    • Support for setting solc by path. Use DAPP_SOLC=/path/to/bin or dapp --use /path/to/solc ... to use a custom solc.
    • dapp test --cache for RPC caching, via hevm.
    Source code(tar.gz)
    Source code(zip)
  • hevm/0.41.0(Aug 19, 2020)

    hevm-0.41.0

    Changed

    • Switched to PVP for version control, starting now at 0.41.0 (MAJOR.MAJOR.MINOR).
    • z3 updated to 4.8.7
    • Generate more interesting values in property based testing, and implement proper shrinking for all abi values.
    • Fixed soundness bug when using KECCAK or SHA256 opcode/precompile
    • Fixed an issue in debug mode where backstepping could cause path information to be forgotten
    • Ensure that pathconditions are consistent when branching, and end the execution with VMFailure: DeadPath if this is not the case
    • Fixed a soundness bug where nonzero jumpconditions were assumed to equal one.
    • default --smttimeout changed from unlimited to 20 seconds
    • hevm symbolic --debug now respects --max-iterations

    Added

    • hevm exec --trace flag to dump a trace
    • Faster backstepping in interactive mode by saving multiple snapshot states.
    • Support for symbolic storage for multiple contracts

    dapp-0.29.0

    Added

    • Support for solc 0.6.12 for linux

    Fixed

    • Support for libraries. To test a project which includes libraries you need to use:
    DAPP_BUILD_EXTRACT=1 dapp test
    

    seth-0.9.1

    Added

    • New commands:

      • seth source <address> fetches the contract source from etherscan
      • seth bundle-source <address> fetches contract source and compiles to combined json
      • seth run-tx <tx-hash> [--debug, --source <file>, --state <repository>], set hevm options according to the options given and hevm exec
      • seth debug <tx-hash> [--no-src] downloads etherscan source, executes previous txs in block and enters into an hevm interactive session for the given tx. --no-src skips the first step.
      • seth --{max-uint,max-int,min-int} print the largest numbers (in hex) of a given bitsize
      • seth call --hevm executes a call via hevm, rather than the RPC
      • seth call --debug executes a call interactively via hevm
      • seth --verbose prints some seth debugging information to stderr
    • seth block can now be passed the --full option, which returns the full block.

    • hexdata can be concatenated with :, e.g. '0xaa:0xbb' will be read as '0xaabb'.

    Changed

    • seth --to-{hex,wei,word,address,dec,int256,ascii,fix,uint256} and seth --from-{ascii,wei} can now read values from stdin.
    • seth call now accepts empty calldata and also create transactions via --create.
    • seth --abi-function-json no longer returns a singleton list, but rather the JSON object it contained.
    • Updated hevm to 0.41.0
    Source code(tar.gz)
    Source code(zip)
  • hevm/0.40.0(Jul 22, 2020)

    This release makes hevm capable of symbolic execution, and exposes the new hevm symbolic or hevm equivalence.

    For more details, check out the announcing post https://fv.ethereum.org/2020/07/28/symbolic-hevm-release/ or consult the README for usage options.

    Install as always using nix. Check out installation instructions or in brief:

    curl -L https://nixos.org/nix/install | sh
    . "$HOME/.nix-profile/etc/profile.d/nix.sh"
    curl https://dapp.tools/install | sh
    

    Full changelog:

    0.40 - 2020-07-22

    • hevm is now capable of symbolic execution!

    Changed

    As a result, the types of several registers of the EVM have changed to admit symbolic values as well as concrete ones.

    • state.stack: Word -> SymWord.

    • state.memory: ByteString -> [SWord 8].

    • state.callvalue: W256 -> SymWord.

    • state.caller: Addr -> SAddr.

    • state.returndata: ByteString -> [SWord 8].

    • state.calldata: ByteString -> ([SWord 8], (SWord 32)). The first element is a list of symbolic bytes, the second is the length of calldata. We have fst calldata !! i .== 0 for all snd calldata < i.

    • tx.value: W256 -> SymWord.

    • contract.storage: Map Word Word -> Storage, defined as:

    data Storage
      = Concrete (Map Word SymWord)
      | Symbolic (SArray (WordN 256) (WordN 256))
      deriving (Show)
    

    Added

    New cli commands:

    • hevm symbolic: search for assertion violations, or step through a symbolic execution in debug mode.
    • hevm equivalence: compare two programs for equivalence.

    See the README for details on usage.

    The new module EVM.SymExec exposes several library functions dealing with symbolic execution. In particular,

    • SymExec.interpret: implements an operational monad script similar to TTY.interpret and Stepper.interpret, but returns a list of final VM states rather than a single VM.
    • SymExec.verify: takes a prestate and a postcondition, symbolically executes the prestate and checks that all final states matches the postcondition.

    Removed

    The concrete versions of a lot of arithmetic operations, replaced with their more general symbolic counterpart.

    Source code(tar.gz)
    Source code(zip)
  • hevm/0.39.0(Jul 13, 2020)

  • dapp/0.28.0(Jul 13, 2020)

  • ethsign/0.15.0(Jul 8, 2020)

Owner
DappHub
Free stuff for dapp devs
DappHub
Phan Sang 8 Jul 30, 2022
3D scanning is becoming more and more ubiquitous.

Welcome to the MeshLib! 3D scanning is becoming more and more ubiquitous. Robotic automation, self-driving cars and multitude of other industrial, med

null 41 Jul 23, 2022
Hobbyist Operating System targeting x86_64 systems. Includes userspace, Virtual File System, An InitFS (tarfs), Lua port, easy porting, a decent LibC and LibM, and a shell that supports: piping, file redirection, and more.

SynnixOS Epic Hobby OS targeting x86_64 CPUs, it includes some hacked together functionality for most essential OSs although, with interactivity via Q

RaidTheWeb 41 Jul 30, 2022
Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more

EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++. Among others, it's used in Minecraft by

Michele Caini 7k Aug 6, 2022
C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and more

Archived cquery is no longer under development. clangd and ccls are both good replacements. cquery cquery is a highly-scalable, low-latency language s

Jacob Dufault 2.3k Jul 27, 2022
EyeLog Can Record And Steal Consecutive Keystrokes (and much more) That The User Enters On A Device

What This EyeLog EyeLog Is A Keylogger Can Record And Steal Consecutive Keystrokes (and much more) That The User Enters On A Device How To Setup EyeLo

sami 2 Dec 28, 2021
Add tensilica esp32 cpu and a board to qemu and dump the rom to learn more about esp-idf

qemu_esp32 Add tensilica esp32 cpu and a board to qemu and dump the rom to learn more about esp-idf ESP32 in QEMU. This documents how to add an esp32

null 339 Aug 5, 2022
A C++14 cheat-sheet on lvalues, rvalues, xvalues, and more

C++14 value category cheatsheet Herein lies a generated PDF which outlines the common pitfalls and edge cases with C++14's lvalues, rvalues, and the l

Jeaye Wilkerson 398 Jul 18, 2022
Companion source code for "Programming with C++20 - Concepts, Coroutines, Ranges, and more"

Companion Source Code for "Programming with C++20 - Concepts, Coroutines, Ranges, and more" 1. Edition Code examples This repository contains runnable

Andreas Fertig 125 Jul 29, 2022
A cleaner and more intuitive std::variant alternative

[WIP] ExtendedVariant This single header library is part of my C++ extended standard stdex libraries. Check our my profile for more. Working with C++

pinsrq 3 Jun 13, 2021
Bypass UAC at any level by abusing the Program Compatibility Assistant with RPC, WDI, and more Windows components

ByeIntegrity 8.0 The eighth Windows privilege escalation attack in the ByeIntegrity family. ByeIntegrity 8.0 is the most complex one I've created so f

Arush Agarampur 212 Jul 11, 2022
Small and dirty header-only library that supports user input with some more advanced features than in the standard lib.

dirty-term Small and dirty header-only library that supports user input with some more advanced features than in the standard lib. This small, lightwe

null 3 Apr 24, 2022
Ziggified GLFW bindings with 100% API coverage, zero-fuss installation, cross compilation, and more.

mach/glfw - Ziggified GLFW bindings Ziggified GLFW bindings that Mach engine uses, with 100% API coverage, zero-fuss installation, cross compilation,

Hexops 171 Aug 8, 2022
DOME plugin for opening file dialogues and more.

DOME Dialog Plugin See this page on info for including a plugin in your DOME project. See the demo folder for a small demo on how it works. Dialog cla

Trevor Martin 2 Mar 7, 2022
Sword Engine is a fork of Psych Engine that plans on adding more features and quality of life improvements.

⚠️ WARNING: This README is currently incomplete, This warning will be removed once it's complete. Friday Night Funkin' - Sword Engine Sword Engine is

swordcube 7 Jul 9, 2022
An optimized "RTOS" (more than HAL but less than RTOS) for ROV controling and getting sensor data

Nitori-ROV-OS 一个专门为水下机器人(ROV、AUV)进行优化的实时操作系统,暂命名为 Nitori,中文名 荷取 可以通过修改硬件兼容层(Port)进行移植 预计最初版本支持stm32f407和stm32h750,并在实验室目前的水下机器人中进行部署 系统分为四层,六个主要组件: 硬件

Doublues_G 2 Jan 10, 2022
A collection of valorant cheating codes, including offsets, world to screen and much more!

Valorant External Cheating Help Always up to date Valorant Offsets + a wide variety of noob friendly helper functions. Functions are not heaviky teste

P. B. 15 Jun 12, 2022
First Rendition of Static Factory Design Method for developing studies and more using C++ ACSIL in Sierra Chart

Thanks for stopping by. This is my first GitHub repo. SierraChart ACSIL C++ STUDY DEV TEMPLATE This is meant to be a template for developing study gro

[Tim] 2 Jan 18, 2022