* move to an offer() instead of a put() on the downloader so that when
the task is stopped the put will see that it is done and not wait
forever.
* remove peer based focus of the task. Let subtasks pick their peers.
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
There is a failure mode of IBFT whereby a validator fails to import
a block, and also fails to receive the NewBlock message from its
peers. This means said validator is unable to participate in
subsequent rounds, and may cause the network to halt.
To overcome this issue, if an IBFT validator receives messages from
a future height, it will update the "BestEstimatedHeight" of the
corresponding EthPeer object, such that the Synchroniser will
(eventually) download the requisite blocks - thus allowing the
IBFT network to continue to operate.
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
It was identified during a demonstration that Pantheon, when running
in IBFT would show a "Bad Block Import" when a validator was added or
removed from the validator pool.
It was determined this was due to IBFT maintaining a single, 'global'
copy of the curent list of validators, which was updated when a block
was imported - thus when a block which had been imported vi IBFT
was then received via Eth block propogation, the validator list would
not align with the global list (as it had been updated in the IBFT
import).
The solution has been to utilise the VoteTallyCache as used in the
Clique implementation.
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
Gives approximately a 10% perf improvement in isolation and in real-world tests allows the world state requests to actually reach the concurrent limit.
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
--> adapt `BlockBroadcaster` to use `send` method on `EthPeer`
--> adapt `EthProtocolMamnager` to utilize `BlockBroadcaster` to disseminate newly mined block
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
Fix for the _“The input line is too long”_ error on Windows.
This fix makes Gradle generate a shortened but operational command in `pantheon.bat`.
The modified `pantheon.bat`, instead of explicitly referencing each .jar individually when initializing the classpath, uses the wildcard character `*` instead.
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
When using the data-path internally use an absolute version instead of the path instead of a relative form.
This fixes a null pointer exception when the data-path is set to an empty string (in a TOML config using `data-path=""` or CLI using `--data-path=`) and interprets that empty string to be the current working directory.
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
* don't create a new CommandLine object in the case of exception - this caused the help to be missing the mixins added
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
* o
* add test
* clean up
* scaffolding
* update
* update
* comments
* add test
* update
* update ii
* format
* update ii
* fix
* verifyBroadcastBlockInvocation
* test
* update
* update to difficulty calculation
* remove BlockBroadcasterTest from this pr
* update
* update
* update II
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
* Reduce logging for invalid peer discovery packets. The message is enough to locate the source of the rejection.
* Reduce ECIESHandshaker logging to trace since it documents a normal flow through the handshake process.
Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>