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>
* 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>
Generally, byte[] -> Bytes of some form. Most of the changes are the
side effect of the type changes or chaning to the names of Tuweni
equivilant calls (getHexString->toHexString, etc).
UnformattedData -> Bytes
Log Topics went from Hash to Bytes32
Difficulty went to UInt256 to match core impl.
Quantity lost BinaryData and is just getValue() and toHexString()
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Remove the LogSeries object and replace it with a plain old List<Log>.
The subclass had two features beyond a simple list. First it would
aggregate the logs as they were added into a bloom filter, but that
bloom filter was never used.
Second it had a RLP encoding convenience method. In the few cases this
is used the RLP encoding is unwrapped.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Make needed changes to have LogsBloomFilter become an immutable object.
Since we are returning this object from other immutable values then we
should mechanically enforce it's immutability by removing mutating
functions. These are moved into a builder ineterface where the bloom
values can be incrementally built and a LogsBloomFilter object is
produced when calculations are complete.
This allows us to make LogsBloomFilter a DelegatingBytes subclass and
eliminates the need to call getBytes in situations where that is needed.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* Implement a dynamic reload mechanism for Besu plugins.
- Added `reloadConfiguration` method in `plugin-api`.
- Added `admin_reloadPlugin` RPC endpoint.
- if the first parameter is specified the API will attempt to reload the individual plugin if found in the map.
- if no parameter is specified the API will attempt to reload all plugins.
- Added method in `BesuPluginContextImpl` to retrieve a map of named plugins.
Signed-off-by: Abdelhamid Bakhta <abdelhamid.bakhta@consensys.net>
This was turned off a number of months ago because of long build times.
However it appears either because of code structure changes or fixed
errorprone that this finishes in a reasonable time now.
Code that violated this check is also fixed.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Update dependencies to most current version
- except picocli which is a major version update
Alphabetize dependencies
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* Use UnformattedDataImpl as a DelegatingBytes class, so we can have it used throughout and reduce the churn of new objects
Signed-off-by: Antoine Toulme <antoine@lunar-ocean.com>
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
only when you are trying to process a privacy marker transaction
Wrap errors with Enclave exception
Signed-off-by: Antony Denyer <email@antonydenyer.co.uk>
Co-authored-by: Lucas Saldanha <lucascrsaldanha@gmail.com>
Refactor uses of BlockchainQueries so that they use a single instance
instead of createing one every place they need it.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
There are a whole class of errors in the deframer that come from
IllegalArgumentExceptions. Those are thrown when Besu validates incoming
data. Because Besu is not the source of these errors we should not log
them any higher than DEBUG.
The most common one is `Caused by: java.lang.IllegalArgumentException:
Invalid node id. Expected id of length: 64 bytes.` and this is coming
from a non-conforming client connecting to Besu.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* [BESU-122] Index tx log bloom bits and use the index for queries.
This comes in two parts: first a CLI program to generate the log bloom
indexes, then updating BlockchainQueries to use the indexes if present.
First, to create the bloom index on a synced node (for example Goerli):
`bin/besu --network=goerli --data-path /tmp/goerli operator generate-log-bloom-cache`
There are options where to start and to stop. I estimate 15-30 minutes
for mainnet.
The RPCs should magically use the indexes now. Note that the last
fragment of 100K blocks is not indexed and uses the old paths.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>