* discovery: Only add nodes to routing table after receiving pong.
Previously the discovery algorithm would add nodes to the routing table
before confirming that the endpoint is participating in the protocol. This
now tracks in-flight pings and adds to the routing table only after receiving
a response.
* discovery: Refactor packet creation into its own function.
This function is useful inside unit tests.
* discovery: Additional testing for new add_node behavior.
* discovery: Track expiration of pings to non-yet-in-bucket nodes.
Now that we may ping nodes before adding to a k-bucket, the timeout tracking
must be separate from BucketEntry.
* discovery: Verify echo hash on pong packets.
Stores packet hash with in-flight requests and matches with pong response.
* discovery: Track timeouts on FIND_NODE requests.
* discovery: Retry failed pings with exponential backoff.
UDP packets may get dropped, so instead of immediately booting nodes that fail
to respond to a ping, retry 4 times with exponential backoff.
* !fixup Use slice instead of Vec for request_backoff.
* Bump parking_lot to 0.6
* Bump parity-wasm to 0.31 so it gets rid of parking_lot
ref https://github.com/paritytech/parity-wasm/pull/206
* Update jsonrpc versions
* Update wasmi and pwasm-utils version
* Fix compile
* Update jsonrpc crates
* eliminate some more transmute()
* Address `review comments`
* Make unsafe block smaller
* Use different byte-order than `std`, read words as big endian instead
of little endian!
* Fix IpAddresses nits
* Use `from_be` to work both for big and little endian
* Ipv6 addresses were incorrectly `transmuted`
* remove needless lifetime annotation
* devp2p: Move UDP socket handling from Discovery to Host.
* devp2p: Fix bug with potentially incorrect UDP registration.
This works right now because the Host handler happens to be the first one
registered on the IoService.
* devp2p: Use 0-initialized memory buffer instead of unsafe.
* Remove send_queue field from public interface of Discovery.
* Rename Datagramm to Datagram.
sed -i 's/Datagramm/Datagram/g' util/network-devp2p/src/discovery.rs util/network-devp2p/src/host.rs
sed -i 's/datagramm/datagram/g' util/network-devp2p/src/discovery.rs util/network-devp2p/src/host.rs
* Include target in log statements.
* 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
* network-devp2p: Test for discovery bucket insertion.
All test values are randomly generated and the assertions are checked manually.
Test fails because distance metric is implemented incorrectly.
* network-devp2p: Fix discovery distance function.
The Kademlia distance function (XOR) was implemented incorrectly as a population count.
* network-devp2p: Refactor nearest_node_entries to be on instance.
Optimizations are possible with more access to the discovery state.
* network-devp2p: Fix loss of precision in nearest_node_entries.
* network-devp2p: More efficient nearest node search.
The discovery algorithm to identify the nearest k nodes does not need to scan
all entries in all buckets.
Unpack errors and check for io::ErrorKind::InvalidInput and return our own AddressParse error. Remove the foreign link to std::net::AddrParseError and add an `impl From` for that error. Test parsing properly.
* Consolidate crypto functionality in `ethcore-crypto`.
- Move `ecdh`/`ecies` modules to `ethkey`.
- Refactor `ethcore-crypto` to use file per module.
- Replace `subtle` with `ethcore_crypto::is_equal`.
- Add `aes_gcm` module to `ethcore-crypto`.
* Rename `aes::{encrypt,decrypt,decrypt_cbc}` ...
... to `aes::{encrypt_128_ctr,decrypt_128_ctr,decrypt_128_cbc}`.
* 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
* Replace Rlp with UntrustedRlp and unsafely unwrap
All Rlp methods return Result<_,DecoderError> now, so for this first
pass each will be marked with `expect("TODO")`. In the next pass we can
categorise figure out how to handle each case.
* Handle DecoderError for tendermint message
* Unwrap rlp results in TestBlockcChainClient
Rlp should be valid since created manually in tests
* Replace `use rlp::*` with explicit imports
* Remove rlp decode unwraps from light cli request
* Structured rlp encoding for curr best and latest in header chain
* Propogate decoder errors from send_packet
* Fix body uncles rlp index
* Use BodyView in sync and `expect` rlp errors
* Revert bbf28f removing original Rlp for this phase
This can be done again in the next phase, in order that we can leave the ethcore views unchanged
* Restore legacy Rlp and UntrustedRlp
Use legacy Rlp for ethcore views. Will redo replacing Rlp with UntrustedRlp in a subsequent PR
* Fix tests
* Replace boilerplate Encodable/Decodable with derive
* Use BlockView instead of Rlp, remove unwrap
* Remove rlp test_cli unwraps by using BlockView instead of Rlp directly
* Remove unneccesary change to use borrowed hash
* Construct sync block using new_from_header_and_body