* Add client-traits crate
Move the BlockInfo trait to new crate
* New crate `machine`
Contains code extracted from ethcore that defines `Machine`, `Externalities` and other execution related code.
* Use new machine and client-traits crates in ethcore
* Use new crates machine and client-traits instead of ethcore where appropriate
* Fix tests
* Don't re-export so many types from ethcore::client
* Fixing more fallout from removing re-export
* fix test
* More fallout from not re-exporting types
* Add some docs
* cleanup
* import the macro edition style
* Tweak docs
* Add missing import
* remove unused ethabi_derive imports
* Use latest ethabi-contract
* WIP move errors, pod_account and state account to own crates
* Sort out dependencies, fix broken code and tests
Remove botched ethcore-error crate
* remove template line
* fix review feedback
* Remove test-only AccountDBMut::new
* Extract AccountDB to account-db
* Move Substate to state-account – wip
* Add lib.rs
* cleanup
* test failure
* test failure 2
* third time's the charm
* Add factories crate
* Use new factories crate
* Use factories crate
* Extract trace
* Fix tests
* Sort out parity-util-mem and parking_lot
* cleanup
* WIP port over the rest of state from ethcore
* Collect all impls for Machine
* some notes
* Rename pod-account to pod
* Move PodState to pod crate
* Use PodState from pod crate
* Fix use clause for json tests
* Sort out evmbin
* Add missing code and use PodState
* Move code that depends on Machine and Executive to own module
* Sort out cloning errors, fix ethcore to use new state crate
* Do without funky From impls
* Fix ethcore tests
* Fixes around the project to use new state crate
* Add back the more specific impls of StateOrBlock From conversions
* Move execute to freestanding function and remove it from trait
Sort out the error handling in executive_state by moving the result types from state to ethcore
Undo the verbose code added to work around the StateOrBlock From conversions
* cleanup
* Fix "error: enum variants on type aliases are experimental"
* Bring back the state tests
Fix whitespace
* remove ethcore/state/mod.rs
* cleanup
* cleanup
* Cleanup state-account errors
* Fix more todos
Add module docs
* Add error.rs
* Fixup Cargo.lock
* Smaller ethcore API is fine
* Add `to-pod-full` feature to state-account
Fix evmbin
* Fix a few more test failures
* Fix RPC test build
* Baptize the new trait
* Remove resolved TODOs
* Rename state-account to account-state
* Do not re-export the trace crate
* Don't export state_db from ethcore
* Let private-tx use StateDB. :(
* Remove ethcore/src/pod_state.rs
* Inner type does not need to be pub/pub(crate)
* optimise imports
* Revert "Inner type does not need to be pub/pub(crate)"
This reverts commit 2f839f8a0f72f71334da64620f57e6dd6039f06b.
* Move DatabaseExtras to ethcore-blockchain
* Add database_extra module to ethcore-blockchain
* Remove to-pod-full feature
* cosmetics
* New crate: state-db
* Add new crate
* Move PreverifiedBlock and BlockError to types
* Sort out the merge
* Add missing `license` meta data keys
* wip
* wip client-traits
* merge conflict
* verification crate type checks
* Move impls for CommonParams to common_types
Fix misc stuff in ethcore
* Fix tests
* Implement VerifyingEngine for all engines except Ethash
Temporarily sort out error handling
Move more types to common_types
* Split Engine in two and move code around
* cleanup
* verification: don't rexport common_types
* Use error from common_types
* Consolidate error types
* VerifyingEngine use Errors from common_types
* verification: Use error type from common_types
* SnapshotError moved to common_types
* Move more code from Engne to VerifyingEngine
Add a VerifyingClient trait: BlockInfo + CallContract
Whitespace
* Add MAX_UNCLE_AGE const
* Port over remaining code from ethcore/verification
* Use errors from common_types
* Fix the confusing "io" naming
* Move more types into common_types
* Add todos
* Experiment with Engine trait outside ethcore
* Hook up types from common_types in ethcore
Don't use verification crate
Don't use client-traits crate
* Revert to impl Engine for Arc<Ethash> and add note to explain why
Revert moving ClientIoMessage to common_types
Fix build
* Remove ClientIoMessage from common_types
* Cleanup
* More cleanup
* Sort error handling changes in the rest of parity
* Remove unused code
* Remove WIP types
* Cleanup todos not tackled here
* remove cruft
* Fix some whitespace and a merge error
* ethcore tests
* test failures
* Restore Engine impls to master to make review a bit easier
* cleanup
* whitespace
* applied review suggestions
* types does not depend on rustc-hex
* ethash engine moved to engine module
* applied review suggestion
* Run cargo fix on `vm`
* Run cargo fix on ethcore-db
* Run cargo fix on evm
* Run cargo fix on ethcore-light
* Run cargo fix on journaldb
* Run cargo fix on wasm
* Missing docs
* Run cargo fix on ethcore-sync
* Stop breaking out of loop if a non-canonical hash is found
* include expected hash in log msg
* More logging
* Scope
* Syntax
* Log in blank RollingFinality
Escalate bad proposer to warning
* Check validator set size: warn if 1 or even number
* More readable code
* Use SimpleList::new
* Extensive logging on unexpected non-canonical hash
* Wording
* wip
* Update ethcore/blockchain/src/blockchain.rs
Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com>
* Improved logging, address grumbles
* Update ethcore/src/engines/validator_set/simple_list.rs
Co-Authored-By: Luke Schoen <ltfschoen@users.noreply.github.com>
* Report benign misbehaviour iff currently a validator
* Report malicious behaviour iff we're a validator
* Escalate to warning and fix wording
* Test reporting behaviour
Don't require node to be part of the validator set to report malicious behaviour
* Include missing parent hash in MissingParent error
* Update ethcore/src/engines/validator_set/simple_list.rs
Co-Authored-By: Luke Schoen <ltfschoen@users.noreply.github.com>
* docs
* remove unneeded into()
Move check for parent_step == step for clarity&efficiency
Remove dead code for Seal::Proposal
* typo
* Wording
* naming
* WIP
* cleanup
* cosmetics
* cosmetics and one less lvar
* spelling
* Better loggin when a block is already in chain
* More logging
* On second thought non-validators are allowed to report
* cleanup
* remove dead code
* Keep track of the hash of the last imported block
* Let it lock
* Serialize access to block sealing
* Take a lock while sealing a block
* Cleanup
* whitespace
* Increase the number of block bodies requested during Sync.
* Increase the number of block bodies requested during Sync.
* Check if our peer is an older parity client with the bug
of not handling large requests properly
* Add a ClientVersion struct and a ClientCapabilites trait
* Make ClientVersion its own module
* Refactor and extend use of ClientVersion
* Replace strings with ClientVersion in PeerInfo
* Group further functionality in ClientCapabilities
* Move parity client version data from tuple to its own struct.
* Implement accessor methods for ParityClientData and remove them
from ClientVersion.
* Minor fixes
* Make functions specific to parity return types specific to parity.
* Test for shorter ID strings
* Fix formatting and remove unneeded dependencies.
* Roll back Cargo.lock
* Commit last Cargo.lock
* Convert from string to ClientVersion
* * When checking if peer accepts service transactions just check
if it's parity, remove version check.
* Remove dependency on semver in ethcore-sync
* Remove unnecessary String instantiation
* Rename peer_info to peer_version
* Update RPC test helpers
* Simplify From<String>
* Parse static version string only once
* Update RPC tests to new ClientVersion struct
* Document public members
* More robust parsing of ID string
* Minor changes.
* Update version in which large block bodies requests appear.
* Update ethcore/sync/src/block_sync.rs
Co-Authored-By: elferdo <elferdo@gmail.com>
* Update util/network/src/client_version.rs
Co-Authored-By: elferdo <elferdo@gmail.com>
* Update util/network/src/client_version.rs
Co-Authored-By: elferdo <elferdo@gmail.com>
* Update tests.
* Minor fixes.
* If no subchain heads then try a different peer
* Add log when useless chain head
* Restrict ChainHead useless peer to ancient blocks
* sync: replace `limit_reorg` with `block_set` condition
* Log block set in block_sync for easier debugging
* logging macros
* Match no args in sync logging macros
* Add QueueFull error
* Only allow importing headers if the first matches requested
* WIP
* Test for chain head gaps and log
* Calc distance even with 2 heads
* Revert previous commits, preparing simple fix
This reverts commit 5f38aa885b22ebb0e3a1d60120cea69f9f322628.
* Reject headers with no gaps when ChainHead
* Reset block sync download when queue full
* Simplify check for subchain heads
* Add comment to explain subchain heads filter
* Fix is_subchain_heads check and comment
* Prevent premature round completion after restart
This is a problem on mainnet where multiple stale peer requests will
force many rounds to complete quickly, forcing the retraction.
* Reset stale old blocks request after queue full
* Revert "Reject headers with no gaps when ChainHead"
This reverts commit 0eb865539e5dee37ab34f168f5fb643300de5ace.
* Add BlockSet to BlockDownloader logging
Currently it is difficult to debug this because there are two instances,
one for OldBlocks and one for NewBlocks. This adds the BlockSet to all
log messages for easy log filtering.
* Reset OldBlocks download from last enqueued
Previously when the ancient block queue was full it would restart the
download from the last imported block, so the ones still in the queue would be
redownloaded. Keeping the existing downloader instance and just
resetting it will start again from the last enqueued block.:wq
* Ignore expired Body and Receipt requests
* Log when ancient block download being restarted
* Only request old blocks from peers with >= difficulty
https://github.com/paritytech/parity-ethereum/pull/9226 might be too
permissive and causing the behaviour of the retraction soon after the
fork block. With this change the peer difficulty has to be greater than
or euqal to our syncing difficulty, so should still fix
https://github.com/paritytech/parity-ethereum/issues/9225
* Some logging and clear stalled blocks head
* Revert "Some logging and clear stalled blocks head"
This reverts commit 757641d9b817ae8b63fec684759b0815af9c4d0e.
* Reset stalled header if useless more than once
* Store useless headers in HashSet
* Add sync target to logging macro
* Don't disable useless peer and fix log macro
* Clear useless headers on reset and comments
* Use custom error for collecting blocks
Previously we resued BlockImportError, however only the Invalid case and
this made little sense with the QueueFull error.
* Remove blank line
* Test for reset sync after consecutive useless headers
* Don't reset after consecutive headers when chain head
* Delete commented out imports
* Return DownloadAction from collect_blocks instead of error
* Don't reset after round complete, was causing test hangs
* Add comment explaining reset after useless
* Replace HashSet with counter for useless headers
* Refactor sync reset on bad block/queue full
* Add missing target for log message
* Fix compiler errors and test after merge
* ethcore: revert ethereum tests submodule update
* sync: Validate received BlockHeaders packets against stored request.
* sync: Validate received BlockBodies and BlockReceipts.
* sync: Fix broken tests.
* sync: Unit tests for BlockDownloader::import_headers.
* sync: Unit tests for import_{bodies,receipts}.
* tests: Add missing method doc.
* Update `add_license` script
* run script
* add `remove duplicate lines script` and run it
* Revert changes `English spaces`
* strip whitespaces
* Revert `GPL` in files with `apache/mit license`
* don't append `gpl license` in files with other lic
* Don't append `gpl header` in files with other lic.
* re-ran script
* include c and cpp files too
* remove duplicate header
* rebase nit
* Alter IO queueing.
* Don't require IoMessages to be Clone
* Ancient blocks imported via IoChannel.
* Get rid of private transactions io message.
* Get rid of deadlock and fix disconnected handler.
* Revert to old disconnect condition.
* Fix tests.
* Fix deadlock.
* WIP
* Convert Ethcore error to use error_chain
* Use error_chain for ImportError and BlockImportError
* Fix error pattern matches for error_chain in miner
* Implement explicit From for AccountsError
* Fix pattern matches for ErrorKinds
* Handle ethcore error_chain in light client
* Explicitly define Result type to avoid shadowing
* Fix remaining Error pattern matches
* Fix tab space formatting
* Helps if the tests compile
* Fix error chain matching after merge
* WIP
* Replace Rlp with UntrustedRlp in views, explicity unwrap with expect
First pass to get it to compile. Need to figure out whether to do this or to propogate Errors upstream, which would require many more changes to dependent code. If we do this way we are assuming that the views are always used in a context where the rlp is trusted to be valid e.g. when reading from our own DB. So need to fid out whether views are used with data received from an untrusted (e.g. extrernal peer).
* Remove original Rlp impl, rename UntrustedRlp -> Rlp
* Create rlp views with view! macro to record debug info
Views are assumed to be over valid rlp, so if there is a decoding error we record where the view was created in the first place and report it in the expect
* Use $crate in view! macro to avoid import, fix tests
* Expect valid rlp in decode functions for now
* Replace spaces with tabs in new file
* Add doc tests for creating views with macro
* Update rlp docs to reflect removing of UntrustedRlp
* Replace UntrustedRlp usages in private-tx merge