The iterative look back mechanism flat trace was using was missing
many of the nesting subtlties, so a stack based calculation is used.
A new test case with two levels of calls is also introduced.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* Mark Plugins Data and Events as stable
Remove the @Unstable annotations form the data and BesuEvents services.
This means that no breaking changes (like removing methods or
changing signatures) will occur without proper notice and versioning
bumps.
* tweak build check
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Co-authored-by: Tim Beiko <t.beiko23@gmail.com>
* Contributor Content: complete refactor
- Deleted contributor files now hosted in wiki,
(CLI-STYLE-GUIDE.md, CODE-OF-CONDUCT.md, CODING-CONVENTIONS.md,
ROADMAP.md, SECURITY.md).
- Deleted old docs files in /docs folder (except readme for redirect).
- Refactored the root README.md with relevant content.
- Refactored the CONTRIBUTING.md file to simplify it with links to wiki.
* added contact developer advocate link
* small updates on README and CONTRIBUTING MDs.
* README updated.
* unified links for docs, jira, etc
* updated suggestions from PR comments
* updated links from comments
* updated links that still pointed to internal /docs
* LF wording and links
Signed-off-by: Felipe Faraggi <felipefaraggi@gmail.com>
Co-authored-by: Nicolas MASSART <NicolasMassart@users.noreply.github.com>
Switch the EVM Memory to a copy on write structure, so when the trace
reads the memory they don't have to copy mutable bytes but can instead
simply use the value as immutable.
Also, fix a state diff bug when an account is deleted that was also just
created in the TX don't report it as an all equal diff, as well as new accounts storage diffs.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* In order to obtain free open source YourKit license we are asked to put the link to YourKit website.
Signed-off-by: Abdelhamid Bakhta <abdelhamid.bakhta@consensys.net>
Following cli options are added to enable TLS client authentication and trusting client certificates.
--rpc-http-tls-client-auth-enabled - Enable TLS client authentication for the JSON-RPC HTTP service (default: false)
--rpc-http-tls-known-clients-file - Path to file containing client's certificate common name and fingerprint for client authentication.
--rpc-http-tls-ca-clients-enabled - Enable to accept clients certificate signed by a valid CA for client authentication (default: false)
If client-auth is enabled, then user must either enable CA signed clients OR provide a known-clients file. An error is reported if both CA signed clients is disabled and known-clients file is not specified.
Signed-off-by: Usman Saleem <usman@usmans.info>
When we calculate the cost of a SSTORE in trace we need to consider the
original value as of when the last transaction finished, not when the
whole block started.
To create a test for this the test blockchain also needed to be upgraded
to Istanbul. This resulted in a large number of cost only changes.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
-- SelfSignedP12Certificate in testSupport for JSON-RPC HTTP TLS testing
-- Generate self signed certificates in PKCS12 format with SAN extensions for testing
-- Remove pre-generated key stores and trust stores used by TLS tests
Signed-off-by: Usman Saleem <usman@usmans.info>
Now that BlockTracer has mutable state we cannot re-use it across
requests, instead we need to create a new one for each call.
To support this spec tests were upgraded to allow batched requests and
responses, which are processed sequentially.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* Make priv_call use the PrivacyController
Signed-off-by: Stefan Pingel <stefan.pingel@consensys.net>
* minor changes after review
Signed-off-by: Stefan Pingel <stefan.pingel@consensys.net>
* Add tests to FilterParameter to demonstrate loading topics from JSON
Demonstrate that filter topics in JSON format consistent with eth_newFilter RPC requests
will be correctly loaded into the FilterParameter topics.
Previous tests were loading from an internal structure, which makes it difficult to see
coverage of scenarios.
- [] - matches anything
- [A] matches A in the first position, and anything after
- [A, B] - A in first position, and B in second position, then anything after
- [null, B] - matches anything in first position, and B in second position, and anything after.
- [[A,B],[A,B]] - Matches A OR B in first position, and A OR B in second position, and anything after.
Fixes Jira: [BESU-182]
Signed-off-by: Paul Harris <paul.harris@consensys.net>
Squash and merge
Signed-off-by: Sally MacFarlane <sally.macfarlane@consensys.net>
- Flat trace
* Support all call types
* Correct input for new tests
* Correctly report out of gas
* Report null result when no result but no error
- Remove need to keep messageFrame directly in traceframe
- Clean up StateDiffGenerator style
- Tighten type of updated accounts
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* Handling of contracts that produce logs.
Added smart contracts to produce log records.
Fixes https://pegasys1.atlassian.net/browse/PIE-2224
Signed-off-by: Abdelhamid Bakhta <abdelhamid.bakhta@consensys.net>
* Fix zip build
Currently building from a non-git checkout, such as a zip file, does not
work because of the way we calculate the git commit hash. Add a catch
clause to return 8 "x"s in case the calculation fails.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* let the user know retrievial failed
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* left in debugging code tripping the error
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* State diff
All but balances work at this point. And it has something to do with
upfront gas costs.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* fix the balances bug
There was also a chained transactions bug. To address this I create a
new WorldUpdater for each iteration of a transaction through the block.
The current world updater has the new state, the prior the old one.
Diffs just fall out after that.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* get rid of midBlock state, it's unneeded with the chained updaters.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* remove rootWorld method, old code from a prior attempt.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* remove println
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* spotless
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* spotless, comments, and cleanup
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* spotless keeps missing this.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* javadoc
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* fix broken reference tests
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* spotless
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* tighten access
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Generate the blocks.bin file from the json source. The approach used is
to just run the besu import commands as a part of the build script.
This removes a magical binary file from the test files that is now
generated from human readable json.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Create plugin APIs for the block body (just transactions and ommers) and
add the block body to the block propagation listener context.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* Handling of sequential memory modifications.
* Handling of integer overflow.
* Handling of `MSTORE` opcode.
Added special case if exceptional halt reasons set is not empty.
Signed-off-by: Abdelhamid Bakhta <abdelhamid.bakhta@consensys.net>
* Handle multiple transactions in the same block.
* Fix a bug in `BlockTracer`. The bug was causing multiple `TransactionTrace` to share the same list of `TraceFrame`.
A new method has been added in `DebugOperationTracer` to reset the list of frames for successive transactions in a block.
Signed-off-by: Abdelhamid Bakhta <abdelhamid.bakhta@consensys.net>
Don't try and cast total difficulty down to a long because it will
overflow long in a reasonable timeframe (mainnet already has).
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Removes as many Gradle 7.0 compatibility issues as possible
* `baseName` -> `archiveBaseName`
* `extension` -> `archiveExtension`
* `destinationDir` -> `destinationDirectory`
* `runtime` -> `runtimeOnly`
* Change some log4j-api and log4j-core dependencies
* Remove an unneeded and outdated plugin (`net.ltgt.apt`)
* tweak the plugin-api change detector's property annotations.
Warnings still exist with one external plugin used for license file
checking that we do not control the source code for.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Expose following new command line parameters to enable TLS on Ethereum JSON-RPC HTTP interface to allow clients like Ethsigner to connect via TLS
--rpc-http-tls-enabled=true
(Optional - Only required if --rpc-http-enabled is set to true) Set to ‘true’ to enable TLS. false by default.
--rpc-http-tls-keystore-file="/path/to/cert.pfx"
(Must be specified if TLS is enabled) Path to PKCS12 format key store which contains server's certificate and it's private key
--rpc-http-tls-keystore-password-file="/path/to/cert.passwd"
(Must be specified if TLS is enabled) Path to the text file containing password for unlocking key store.
--rpc-http-tls-known-clients-file="/path/to/rpc_tls_clients.txt"
(Optional) Path to a plain text file containing space separated client’s certificate’s common name and its sha-256 fingerprints when they are not signed by a known CA. The presence of this file (even empty) will enable TLS client authentication i.e. the client will present its certificate to server on TLS handshake and server will establish that the client’s certificate is either signed by a proper/known CA otherwise server trusts client's certificate by reading it's sha-256 fingerprint from known clients file specified above. The format of the file is (as an example):
localhost DF:65:B8:02:08:5E:91:82:0F:91:F5:1C:96:56:92:C4:1A:F6:C6:27:FD:6C:FC:31:F2:BB:90:17:22:59:5B:50
Signed-off-by: Usman Saleem <usman@usmans.info>
* Implement tracing API trace_replayBlockTransactions “vmTrace” option.
Use the testing tools implemented to generate test cases and reverse engineer the “vmTrace” compatibility.
Write logic to transform TransactionTrace result (used by existing debug_trace API’s) into a Parity-style vmTrace results.
Add any additional fields as necessary to support both debug_ and trace_block API’s.
Acceptance Criteria:
JSON-RPC method trace_replayBlockTransactions with singular option [“vmTrace”] supplied should match parity output when run on the same block data
- create `flat` and `vm` subpackages of `tracing`
- introduce `vmTrace` logic
- refactor `TraceReplayBlockTransactions` to handle `vmTrace` option
- split tests in separate directories
* address https://github.com/hyperledger/besu/pull/4#discussion_r325267437
- check if next frame is deeper than current frame instead of checking specific `CALL` opcode
- check if next frame is less deep than current frame instead of checking specific `RETURN` opcode
- reduce visibility of `generateTrace` to `private`
* address https://github.com/hyperledger/besu/pull/4#discussion_r325711858:
- add test case using `STOP` opcode
- ignore `STOP` only if there is 1 opcode in the trace
* refactor to improve readability of the code.
macro steps of the process are now:
- `generateTracingMemory`
- `generateTracingPush`
- `generateTracingStorage`
- `handleDepthIncreased`
- `handleDepthDecreased`
Signed-off-by: Abdelhamid Bakhta <abdelhamid.bakhta@consensys.net>