We were attempting to use hashes from a queue we frequently evict from
and not handling that case in an iterator that walks over that
collection.
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* Fix#1110: Privacy: Restart caused by insufficient memory can cause inconsistent private state
Signed-off-by: Stefan Pingel <stefan.pingel@consensys.net>
This solves the same problem as 3a39fbb but better. The attempt
there has an issue where it still emulates sending the request and
therefore only 5 requests max can be aborted. Thus the problem of the
peer becoming stuck in a busy state remains. Here we do what we
should've done all along, which is proactively abort these requests
when a disconnect event occurs.
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* addded genesis config option getEcip1017EraRounds
to define the number of Rounds in an Era for Ethereum Classic Emission
Schedule.
Signed-off-by: Edward Mack <ed@edwardmack.com>
* add entry to CHANGLOG.mg
Signed-off-by: Edward Mack <ed@edwardmack.com>
* some doc changes and implemented style suggestions
Signed-off-by: Edward Mack <ed@edwardmack.com>
This PR add the support to DNS. By default Besu refuses the use of a DNS but it is possible to use it by adding the following flag --Xdns-enabled=true. Adding this flag will resolve the hostname when starting besu and then it won't change
If there is a need for a more dynamic update (eg for permissioning) add also this flag --Xdns-update-enabled = true ( this will query the DNS every time. So you must trust the DNS on which you are looking for the IP)
Signed-off-by: Karim TAAM <karim.t2am@gmail.com>
When a CALL series operation has an erroneous input offset (such as
starting at a ETH address instead of a real offset) we threw an
ArithmeticException.
* Restore the old memory bounds checking on memory expansion
* Treat these formerly uncaught exceptions as invalid transactions and
report errors with a stack trace and custom halt reason.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Any process that depends on pre-assigned peer tasks is liable to grow
our pendingRequests out of control.
When we attempt to execute a pending transaction, we check for that
peers availability:
PendingPeerRequest.java
```
final Optional<EthPeer> selectedPeer =
leastBusySuitablePeer.filter(EthPeer::hasAvailableRequestCapacity);
selectedPeer.ifPresent(this::sendRequest);
return selectedPeer.isPresent();
}
}
```
However, if that peer was disconnected while there were max outstanding
requsts, we'll never reattempt it as selectedPeer will be empty.
Furthermore, we'll return false and keep that pending request in our
list of requests.
With this change we indicate that we aren't waiting for any outstanding
requests when we disconnect from a peer, allowing the existing logic
that triggers when peers are disconnected to be hit.
The getter I added just for testing purposes was to get around the
inadequacies of the MockPeerConnection. There's a whole lot of callback
plumbing that's needed for a simple ethPeer.disconnect to do the same
thing it does when we call it in our production code.
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
- On-chain group management changes: additional API to check whether someone is allowed to update the contract, and remove enclave key as a parameter to contract APIs
- Add check for group membership to onchain and offchain precompiled contracts
Signed-off-by: Stefan Pingel <stefan.pingel@consensys.net>
Create a docker image for EVMTool, so that the GoEvmLab tool can easily
integrate the besu EVM into its fuzzing framework.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Move key referenceTest classes relating to reading the JSON data into a
"main" java package so that it can be included in other production
classes. Some classes were renamed to make their intent clearer. Other
smaller changes that bring classes in line with current coding
standards were done.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* #1066 Switched to use unprefixed hex strings for memory and stack values
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Disable flaky tests per Ben Burns(Yeti) request
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Revert last commit and enable ignored tests.
Signed-off-by: David Mechler <david.mechler@consensys.net>
* #1157 - updated to create 2 agents so that proper bonding can occur
Signed-off-by: David Mechler <david.mechler@consensys.net>
* #1162 - Updated test to mock the local peer PING packet creation so that the hash can be managed.
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Added admin_logsRepairCache end point
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Added admin_logsRepairCache end point
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Remove p2p network code per PR comments
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Updates from PR comments
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Spotless Apply fixes
Signed-off-by: David Mechler <david.mechler@consensys.net>
* PR updates
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Admin force cache refresh when called through end point per PR comments
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Pr updates
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Update changelog for 1.5.1
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Remove check for 0x prefix on addresses to match expectations
Signed-off-by: David Mechler <david.mechler@consensys.net>
When IBFT produces blocks the coinbase may correspond to an empty
account (as mining rewards are not paid out). In this case allow
GraphQL to return an all zero account for the empty account only in
context of a miner. Other tests exist that verify a plain accounts
query of a non-existent account continues to throws an exception.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Experimental backup and restore via `operator x-backup-state` and `operator x-restore-state` CLI commands. Besu needs to be in a non-operational state for the backup and restore to occur. Restore has only been tested into an empty database, not on top of an existing database.
This feature is not advised for production use at the moment.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
CompletableFuture already has its own atomicity under the hood that
allows for threadsafe cancelations.
Hides the AtomicReference that gives us idempotency in executing the
task so that inheritors don't need to care about it.
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
handle peerAdded on admin_addPeer to add the peer to the PeerTable
handle peerRemoved on admin_removePeer to remove the peer from the PeerTable
Signed-off-by: Alexandre PARIS-VERGNE <alexpv14@gmail.com>
* add hive test
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* garbage endpoint in peerdisccontrollertest
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* rlp deserialization test
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* make things work with optional
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* PeerDiscoveryPacketPcapSedesTest changes from Optional getFrom
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* rlp deserialization test
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* allow empty from field in ping
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* comment
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* logging
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* cleanup rebase
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* scaffolding
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* pass hive
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* remove some stuff
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* comment
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* leave list properly
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* spotless
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* rename port -> udpPort
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* move comment
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* fix documentation bug
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* remove redundant supression
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* more accurate tests
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
* empty commit to trigger build
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
Added admin_logsRepairCache end point which takes an optional block
number parameter. The end point fixes all segments starting with the
block number passed in or with the head block if parameter is empty.
Signed-off-by: David Mechler <david.mechler@consensys.net>
* deprecate CLI option for privacy precompile address; only put the relevant precompile in the registry
Signed-off-by: Sally MacFarlane <sally.macfarlane@consensys.net>
Add Reference Test checker
Add a check test to fail the build if the reference test submodule is
accidentally updated without a deliberate change to the
corresponding build.gradle.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Besu's Retesteth implementation failed transition tests. Two reasons:
* It wasn't adding the DaoForkBlock to genesis files correctly
* It wasn't using the protocol schedules og the block being imported,
but instead to the current chain head.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
* #1066 Switched to use unprefixed hex strings for memory and stack values
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Disable flaky tests per Ben Burns(Yeti) request
Signed-off-by: David Mechler <david.mechler@consensys.net>
* Revert last commit and enable ignored tests.
Signed-off-by: David Mechler <david.mechler@consensys.net>
* #1157 - updated to create 2 agents so that proper bonding can occur
Signed-off-by: David Mechler <david.mechler@consensys.net>
* #1162 - Updated test to mock the local peer PING packet creation so that the hash can be managed.
Signed-off-by: David Mechler <david.mechler@consensys.net>
Our current EVM loop splits out cost, execution and halt evaluation. Flattening these three into one method results in a significant speedup in reference tests, which are EVM heavy.
Mostly the cost, exceptionalHaltCondition, and execute are merged into one method, sharing calculations between the three.
In fixed cost operations the merger is very simple AddOperation is a representative fixed cost operation.
Check the gas, check other exceptional halts, do the work, return the result.
In variable cost operations there is some value reads to be done before the cost is calculated. This is where a lot of the de-duplication occurs. CodeCopyOperation is a representative variable cost operation.
JumpIOperation shows where this merger pays off. If the condition is zero then some exceptional halts don't need to be considered. But with the three way split each step couldn't consider such optimizations because the local data was lost between each call.
Some cleanup was enabled by this. The old exceptional halt predicates were deleted and moved into each operation. Gas costs must be checked by the operation instead of globally, or we would lose state if we had to split into two methods and do the gas check shared.
The OperandStack was flattened into a single class instead of an interface plus a single implementation. stack underflow and overflow are signaled via named exceptions and handled via catches instead of pre-checking the stack height. Since overflow/underflow is exceedingly rare in mainnet transactions java exceptions are the more performant means.
Some of the APIs had lingering impacts on how some tests were run and the EVMTool (we cache operation cost in the message frame now.)
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Update to the reference tests used on hivetests.etherdevops.io and
retesteth.etherdevops.io. Both are using a more current release of the
reference tests that includes performance and subroutines items.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Previously we were returning success with a zero length hash, meaning we
understood the response but there were problems with the RLP. Instead
now we return one of two errors "Could not decode RLP for Block" or
"Could not import Block".
For #1130
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>