Commit Graph

11556 Commits

Author SHA1 Message Date
cheme
c1aed4af45 Fix light client deadlock (#9385)
This PR is fixing deadlock for #8918 

It avoids some recursive calls on light_sync by making state check optional for Informant.

The current behavior is to display the information when informant checks if block is major version.
This change a bit the informant behavior, but not on most cases.

To remember where and how this kind of deadlock are likely to happen (not seen with Parkinglot deadlock detection because it uses std condvar), I am adding a description of the deadlock.
Also, for the reviewers there may be better solution than modifying the informant.

### Thread1 

- ethcore/sync/light_sync/mod.rs

A call to the light handler through any Io (having a loop of rpc query running on like client makes the dead lock way more likely).
At the end of those calls we systematically call `maintain_sync` method.

Here maintain_sync locks `state` (it is the deadlock cause), with a write purpose

`maintain_sync` -> `begin_search` with the state locked open

`begin_search` -> lightcliennt `flush_queue` method

- ethcore/light/src/client/mod.rs

`flush_queue` -> `flush` on queue (HeaderQueue aka VerificationQueue of headers)

- ethcore/src/verification/queue/mod.rs

Condition there is some unverified or verifying content

`flush` wait on a condvar until the queue is empty. The only way to unlock condvar is that worker is empty and unlock it (so thread 2 is Verification worker).

### Thread2

A verification worker at the end of a verify loop (new block).

- ethcore/src/verification/queue/mod.rs

thread loops on `verify` method.

End of loop condition is_ready -> Import the block immediately 

calls `set_sync` on QueueSignal which send a BlockVerified ClientIoMessage in inner channel (IoChannel of ClientIoMessage) using `send_sync`

- util/io/src/service_mio.rs

IoChannel `send_sync` method calls all handlers with `message` method; one of the handlers is ImportBlocks IoHandler (with a single inner Client service field)

- ethcore/light/src/client/service.rs

`message` trigger inner method `import_verified`

- core/light/src/client/mod.rs

`import_verified` at the very end notify the listeners of a new_headers, one of the listeners is Informant `listener` method

- parity/informant.rs

`newHeaders` run up to call to `is_major_importing` on its target (again clinet)

-  ethcore/sync/src/light_sync/mod.rs

Here `is_major_importing` tries to get state lock (read purpose only) but cannot because of previous state lock, thus deadlock
2018-09-04 15:36:34 +01:00
Wei Tang
c12447c7c5 Fix docs of address_hash (#9463) 2018-09-04 11:25:22 +02:00
gabriel klawitter
502bacea82
fix typo in bash script (#9462) 2018-09-04 10:58:13 +02:00
Wei Tang
da5ba4ccc8
Fix a bug in evmbin initial_gas display (#9457) 2018-09-04 16:33:14 +08:00
Andronik Ordian
1f2426226b evmbin: escape newlines in json errors (#9458) 2018-09-04 14:28:49 +08:00
André Silva
c0eb30b604
use kvdb-* and parity-snappy crates from crates.io (#9441)
* use kvdb-* and parity-snappy crates from crates.io

* update rocksdb-sys and snappy-sys
2018-09-03 17:40:11 +01:00
Wei Tang
caca3a8048
Add EIP-1014 transition config flag (#9268)
* Add EIP-1014 transition config flag

* Remove EIP-86 configs

* Change CREATE2 opcode index to 0xf5

* Move salt to the last item in the stack

* Change sendersaltandaddress scheme to comply with current EIP-1014

* Fix json configs

* Fix create2 test

* Fix deprecated comments
2018-08-31 23:43:51 +08:00
gabriel klawitter
f929419676 add tags for runner selection of build-linux jobs (#9451) 2018-08-31 16:41:21 +02:00
Andrew Jones
bc53e78a04
Remove unused BlockStatus::Pending (#9447)
Pending case never instantiated, and only ever matched together with Unknown
2018-08-31 12:13:01 +01:00
André Silva
3dbea1a7a1 ci: only include local paths in coverage script (except target) (#9437) 2018-08-31 01:21:57 +02:00
Afri Schoedon
644d1db5ef Add POA Networks: Core and Sokol (#9413)
* ethcore: add poa network and sokol chainspecs

* rpc: simplify chain spec docs

* cli: rearrange networks by main/test and size/range

* parity: don't blacklist 0x00a328 on sokol testnet

* parity: add sokol and poanet to params and clean up a bit, add tests

* ethcore: add the poa networks and clean up a bit

* ethcore: fix path to poacore chain spec

* parity: rename poa networks to poacore and poasokol

* parity: fix configuration tests

* parity: fix parameter tests

* ethcore: rename POA Core and POA Sokol
2018-08-30 21:32:47 +02:00
André Silva
07d97d5b26 docker: install missing dependencies in arm target dockerfiles (#9436) 2018-08-30 20:03:38 +02:00
Afri Schoedon
c658b46fe1
Random small cleanups (#9423)
* clean up toml files

* update the parity ethereum toolchain docs

* update contribution guide and issue templates

* update desktop and service files

* build clib examples with 8 threads

* update header templates

* replace parity technologies with parity ethereum logo
2018-08-30 19:57:27 +02:00
Wei Tang
8a5c9a8c70 evmbin: Fix gas_used issue in state root mismatch and handle output better (#9418)
* Fix gas used in staterootmismatch, and print full state root hash

* Write trace info for stdjson to stderr

* Fix tests

* Remove struct trait bound
2018-08-29 20:13:45 +03:00
Thibaut Sardan
3e4a525520 Update hardcoded sync (#9421)
- Update foundation hardcoded header to block 6219777 
- Update ropsten hardcoded header to block 3917825 
- Update kovan hardcoded header to block 8511489
2018-08-29 16:56:25 +01:00
Wei Tang
74ce0f738e Add block reward contract config to ethash and allow off-chain contracts (#9312)
This adds block reward contract config to ethash. A new config `blockRewardContractCode` is also added to both Aura and ethash. When specified, it will execute the code directly and overrides any `blockRewardContractAddress` config. Having this `blockRewardContractCode` config allows chains to deploy hard fork by simply replacing the current config value, without the need from us to support any `multi` block reward scheme.
2018-08-29 16:17:18 +01:00
Anton Gavrilov
1073d56245 Private packets verification and queue refactoring (#8715)
* Verify private transaction before propagating

* Private transactions queue reworked with tx pool queue direct usage

* Styling fixed

* Prevent resending private packets to the sender

* Process signed private transaction packets via io queue

* Test fixed

* Build and test fixed after merge

* Comments after review fixed

* Signed transaction taken from verified

* Fix after merge

* Pool scoring generalized in order to use externally

* Lib refactored according to the review comments

* Ready state refactored

* Redundant bound and copying removed

* Fixed build after the merge

* Forgotten case reworked

* Review comments fixed

* Logging reworked, target added

* Fix after merge
2018-08-29 20:31:04 +08:00
ewaldhesse
7aa4484a03 Update tobalaba.json (#9419) 2018-08-28 14:06:36 +02:00
Afri Schoedon
6c96b60a63 docs: add parity ethereum logo to readme (#9415)
* docs: add parity ethereum logo

* docs: add logo to readme

* docs: align logo center

* docs: remove separators from readme

* docs: restructure readme

* docs: check spelling and grammar in readme

* docs: clarify readme

* docs: improve readme significantly
2018-08-27 17:01:56 +02:00
André Silva
ac1900a0fc build: update rocksdb crate (#9414) 2018-08-27 12:52:49 +08:00
Denis S. Soldatov aka General-Beck
bd3bc5c168 Updating the CI system (#8765)
* Updating the CI system with the publication of releases and binary files on github

Signed-off-by: Denis S. Soldatov aka General-Beck <general.beck@gmail.com>

* add missed scripts

* chmod +x scripts

* fix download link for github

* rebuilding CI scripts

* small fixes

* update submodule wasm tests

* ci: fix merge leftovers

* ci: remove gitlab-next from ci triggers

* ci: fix git add in docs script

* ci: use nightly instead of master for publish triggers

* ci: remove sleep from gitlab config

* ci: replace ':' with '-' in gitlab targets

* ci: fix recursive copy in docs script
2018-08-26 00:44:08 +02:00
Jim Posen
9ed43230ca Better support for eth_getLogs in light mode (#9186)
* Light client on-demand request for headers range.

* Cache headers in HeaderWithAncestors response.

Also fulfills request locally if all headers are in cache.

* LightFetch::logs fetches missing headers on demand.

* LightFetch::logs limit the number of headers requested at a time.

* LightFetch::logs refactor header fetching logic.

* Enforce limit on header range length in light client logs request.

* Fix light request tests after struct change.

* Respond to review comments.
2018-08-25 23:06:01 +02:00
Christopher Purta
7abe9ec4cc Add update docs script to CI (#9219)
* Add update docs script to CI

Added a script to CI that will use the jsonrpc tool to update rpc
documentation then commit and push those to the wiki repo.

* fix gitlab ci lint

* Only apply jsonrpc docs update on tags

* Update gitlab-rpc-docs.sh

* Copy correct parity repo to jsonrpc folder

Copy correct parity repo to jsonrpc folder before attempting to build docs since the CI runner clones the repo as parity and not parity-ethereum.

* Fix JSONRPC docs CI job

Update remote config in wiki repo before pushing changes using a github
token for authentication. Add message to wiki tag when pushing changes.
Use project directory to correctly copy parity code base into the
jsonrpc repo for doc generation.

* Fix set_remote_wiki function call in CI
2018-08-24 18:14:07 +02:00
Alexey
5ed2527663 gasleft extern implemented for WASM runtime (kip-6) (#9357)
* Wasm gasleft extern added

* wasm_gasleft_activation_transition -> kip4_transition

* use kip-6 switch

* gasleft_panic -> gasleft_fail rename

* call_msg_gasleft test added and gas_left agustments because this https://github.com/paritytech/wasm-tests/pull/52

* change .. to _

* fix comment for the have_gasleft param

* update tests (0edbf860ff)
2018-08-24 18:03:46 +02:00
Marek Kotewicz
b87c7cac54 block view! removal in progress (#9397) 2018-08-24 10:53:31 +01:00
Andrew Jones
0b34579b04
Prevent sync restart if import queue full (#9381) 2018-08-24 09:42:24 +01:00
JohnnySheffield
31291ebd35 nonroot CentOS Docker image (#9280)
* Updates CentOS Docker image build process

* rename build.Dockerfile
2018-08-24 05:55:54 +02:00
André Silva
e8e0b08f17 ethcore: kovan: delay activation of strict score validation (#9406) 2018-08-24 08:14:01 +08:00
Andronik Ordian
491ce61a76 Revert "Use std::sync::Condvar (#1732)" (#9392)
* Revert "Use std::sync::Condvar (#1732)"

This reverts commit c65ee93542.

* verification_queue: remove redundant mutexes
2018-08-22 16:01:07 +02:00
Niklas Adolfsson
e12a26dac5 Replace Duration::new() w/ Duration::from_nanos (#9387) 2018-08-21 16:01:09 +01:00
Afri Schoedon
7bf1889af1 docs: restore readme (#9391) 2018-08-21 16:49:24 +02:00
Nick Sanders
139a2b7b0d Replace std::env::home_dir() with home crate impl. (#9293)
* Import the `home` crate in `util/dir`.

* Replace uses of `env::home_dir()` with `home::home_dir()`.
  * `home` uses a 'correct' impl. on windows and the stdlib impl.
    of `::home_dir` otherwise.

* Reexport `home::home_dir` from `util/dir`.

* Bump `util/dir` to 0.1.2.
2018-08-21 15:30:24 +02:00
Thibaut Sardan
f230c719d8
Delete Dockerfile (#9386) 2018-08-21 14:36:04 +02:00
Niklas Adolfsson
8703449dfe network-devp2p Fix some clippy errors/warnings (#9378)
* fix some clippy warnings

* Remove `shallow-copy` of Node's

* Make `NonReservedPeerMode` Copy and pass-by-value
2018-08-21 12:55:31 +03:00
Tomasz Drwięga
108590d924 Allow calling contracts in genesis state. (#9375) 2018-08-20 13:05:01 +01:00
Niklas Adolfsson
b2cf5d2958 Make Capabilities struct Copy (#9372) 2018-08-20 13:53:47 +03:00
Niklas Adolfsson
ee5ed44761 Light client "Enable more logs for light client on_demand" (#9374)
* Enable more logs for light client `on_demand`

* Remove extra whitespace

* fix indentation
2018-08-17 19:21:49 +03:00
Tomasz Drwięga
346913b7f6 Better logging when mining own transactions. (#9363) 2018-08-17 16:01:32 +01:00
Niklas Adolfsson
18a8d2f67f Fix typos in network-devp2p (#9371) 2018-08-17 17:04:03 +03:00
Niklas Adolfsson
3ae10915e4 Light client Provide default nonce in transactions when it´s missing (#9370)
* Provide `default_nonce` in tx`s when it´s missing

When `nonce` is missing in a `EthTransaction` will cause it to fall in
these cases provide `default_nonce` value instead!

* Changed http:// to https:// on Yasm link (#9369)

Changed http:// to https:// on Yasm link in README.md

* Provide `default_nonce` in tx`s when it´s missing

When `nonce` is missing in a `EthTransaction` will cause it to fall in
these cases provide `default_nonce` value instead!

* Address grumbles
2018-08-17 14:45:43 +01:00
Marius Kjærstad
949b9c85ca Changed http:// to https:// on Yasm link (#9369)
Changed http:// to https:// on Yasm link in README.md
2018-08-17 18:19:15 +08:00
Andrew Jones
c21c19bd6c
Fix no line breaks in logs (#9355) 2018-08-14 18:10:51 +01:00
Tomasz Drwięga
29125e830b Lower the max size of transaction packet to prevent going oversize. (#9308)
* Lower the max size of transaction packet to prevent going oversize.

* Log RLP size.
2018-08-14 17:20:29 +02:00
Wei Tang
1ac4676f4b Remove prepare_trace_output and make sure prepare_trace_call and trace*call are balanced (#9353)
This refactors `prepare_trace_output` to instead directly take the reference of return values, so that it's simpler and we save a stack item. This should also fixes [the issue](https://github.com/paritytech/parity-ethereum/pull/9236#issuecomment-408444995) @udoprog is facing. Replaces #9236
2018-08-14 15:34:46 +01:00
Tomasz Drwięga
fe5301cebf More details in logs returned by light client (#9324)
* Log details for light logs.

* Create Log directly.
2018-08-14 16:13:11 +02:00
Tomasz Drwięga
7262601123 Expose UnorderedIterator. (#9347) 2018-08-14 12:11:56 +02:00
cheme
fcb6cc1e76 Light client logs should include 'from_block' when querying logs (#9331)
* Fix PubSub for logs when using light client :
prior to this fix the pubsub process did send a
query for each new block header (and for each subs : there is something
to optimize here) by setting from and to of the filter at this block
number; but there was a bug in the code that fetch logs : it was non
inclusive for its start bound, meaning that with start bound = end bound
we never query any block (and attached logs).

* Option iter instead of once.
Use of bloom existing function to check if a bloom contains another.

* Makes from block header checking explicit
2018-08-14 09:58:29 +02:00
Wei Tang
ff716e7799
Remove pass-by-reference return data value from executive (#9211)
* Remove pass-by-reference return data value from executive

* Fix tests

* Fix a missing test output

* typo: wasm_activation_test

* Tracing change in output

* json_tests: fix compile

* typo: 0..32 -> ..32 to keep it consistent with other occurance

* Fix tests
2018-08-14 05:27:13 +08:00
Wei Tang
9c595aff95
Allow single opcode stepping for EVM (#9051)
* Feed in ActionParams on VM creation

* Fix ethcore after Vm interface change

* Move informant inside Interpreter struct

* Move do_trace to Interpreter struct

* Move all remaining exec variables to Interpreter struct

* Refactor VM to allow single opcode step

* Fix all EVM tests

* Fix all wasm tests

* Fix wasm runner tests

* Fix a check case where code length is zero

* Fix jsontests compile

* Fix cargo lock

* Use match instead of expect

* Use cheaper check reader.len() == 0 for the initial special case

* Get rid of try_and_done! macro by using Result<(), ReturnType>

* Use Never instead of ()

* Fix parity-bytes path

* Bypass gasometer lifetime problem by borrow only for a instance

* typo: missing {

* Fix ethcore test compile

* Fix evm tests
2018-08-14 04:06:15 +08:00
Andronik Ordian
98dbd1fdc7
Fix load share (#9321)
* fix(light_sync): calculate `load_share` properly

* refactor(api.rs): extract `light_params` fn, add test

* style(api.rs): add trailing commas
2018-08-13 18:53:19 +03:00