Commit Graph
100 Commits
Author SHA1 Message Date
asynchronous rob a641ba1e7a have av-store bail when recv() fails (#5418) 2022-05-01 15:22:23 +00:00
asynchronous rob 5142bb98bc break provisioner/candidate-backing cycle (#5419) 2022-04-29 14:00:42 +00:00
asynchronous rob 9c1a3bd18b backing: refactor off of jobs system (#5377)
* backing: refactor off of jobs system

* rename FailedToSpawnBg

* refactor: backing uses fatality

* fix service compilation
2022-04-27 22:19:45 +00:00
asynchronous rob fc4b04db20 Prepare for network protocol version upgrades (#5084)
* explicitly tag network requests with version

* fmt

* make PeerSet more aware of versioning

* some generalization of the network bridge to support upgrades

* walk back some renaming

* walk back some version stuff

* extract version from fallback

* remove V1 from NetworkBridgeUpdate

* add accidentally-removed timer

* implement focusing for versioned messages

* fmt

* fix up network bridge & tests

* remove inaccurate version check in bridge

* remove some TODO [now]s

* fix fallout in statement distribution

* fmt

* fallout in gossip-support

* fix fallout in collator-protocol

* fix fallout in bitfield-distribution

* fix fallout in approval-distribution

* fmt

* use never!

* fmt
2022-04-21 16:34:59 +00:00
asynchronous robandBernhard Schuster 79ecc53801 Reduce network bandwidth, improve parablock times: optimize approval-distribution (#5164)
* gossip-support: be explicit about dimensions

* some guide updates

* update network-bridge to distinguish x and y dimensions

* get everything to compile

* beginnings

* some TODOs

* polkadot runtime: use relevant_authorities

* make gossip topologies per-session

* better formatting

* gossip support: use current session validators

* expand in comment

* adjust tests and fix index bug

* add past/present/future connection test and clean up code

* fmt

* network bridge: updated types

* update protocols to new gossip topology message

* guide updates

* add session to BlockApprovalMeta

* add session to block info

* refactor knowledge and remove most unify logic

* start replacing gossip_peers with new SessionTopologies

* add routing information to message state

* add some utilities to SessionTopology

* implement new gossip topology logic

* re-implement unify_with_peer

* distribute assignments according to topology

* finish grid topology implementation

* refactor network bridge slightly

* issue connection requests on all past/present/future

* fmt

* address grumbles

* tighten invariants in unify_with_peer

* implement random propagation

* refactor: extract required routing adjustment logic

* some block-age logic

* aggressively propagate messages when finality is slow

* overhaul aggression system to have 3 levels

* add aggression metrics

* remove aggression L3

* reduce random circulation

* remove PeerData

* get approval tests compiling

* use btree_map in known_by to make deterministic

* Revert "use btree_map in known_by to make deterministic"

This reverts commit 330d65343a7bb6fe4dd0f24bd8dbc15c0cbdbd9d.

* test XY grid propagation

* remove stray println

* test unshared dimension propagation

* add random gossip check

* test unify_with_peer better

* test sending after getting gossip topology

* test L1 aggression on originator

* test L1 aggression for non-originators

* test non-originator aggression L2

* fnt

* ~spellcheck

* fix statement-distribution tests

* fix flaky test

* fix metrics typo

* re-send periodically

* test resending

* typo

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>

* add more metrics about apd messages

* add back unify_with_peer logs

* make Resend an enum

* be more explicit when resending

* fmt

* fix error

* add a TODO for refactoring

* remove debug metrics

* add some guide stuff

* fmt

* update runtime API in test-runtim

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
2022-04-19 20:26:55 +02:00
asynchronous robandRobert Klotzner edfa24bbc5 flatten dispute-coordinator 'real' module. (#5254)
* flatton dispute-coordinator 'real' module,

* Drop obsolete modules.

Co-authored-by: Robert Klotzner <robert.klotzner@gmx.at>
2022-04-19 18:14:50 +00:00
asynchronous rob 52912ab392 fix approval-voting force-approve (#5229) 2022-03-31 21:12:38 +00:00
asynchronous rob 7a1a3886ee enable disputes on all chains (#5182)
* enable disputes on all chains

* fmt
2022-03-23 12:42:10 -05:00
asynchronous rob d706faa1b6 add a metric for report events in network bridge (#5160) 2022-03-18 16:22:02 +00:00
asynchronous rob be2c91555e have some lenience on outdated messages in statement distribution (#5150)
* have some lenience on outdated messages in statement distribution

* fmt
2022-03-18 16:12:26 +00:00
asynchronous robandRobert Klotzner d76583cd3b fix freshness calculations in statement distribution (#5151)
* fix freshness calculations in statement distribution

* Fix logic.

Co-authored-by: Robert Klotzner <robert.klotzner@gmx.at>
2022-03-18 15:40:44 +01:00
Robert HabermeierandAndrei Sandu 1d695612c4 strengthen signals-received atomics (#5132)
* strengthen signals-received atomics

* Update node/overseer/overseer-gen/src/lib.rs

Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com>

* fmt

Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com>
2022-03-16 16:40:32 +01:00
Robert Habermeier 5904ae418e make more subsystems blocking, fix blocking subsystem spawning (#5133)
* make more subsystems blocking

* actually spawn blocking subsystems on their own threads
2022-03-16 06:41:20 +00:00
Robert Habermeier 474a2c02c4 Some small log improvements (#5110)
* improve provisioner log

* change log target from availability to availability-store
2022-03-14 19:22:48 +00:00
Robert HabermeierandAndronik 8a17c614f0 Check signatures as "Compact" in statement distribution (#5071)
* allow converting payloads _up_

* convert to superpayload in statement-distribution

* Update primitives/src/v2/signed.rs

Co-authored-by: Andronik <write@reusable.software>

Co-authored-by: Andronik <write@reusable.software>
2022-03-10 20:49:35 +00:00
Robert Habermeier 49f7e5cce4 Finish migration to v2 primitives (#5037)
* remove v0 primitives from polkadot-primitives

* first pass: remove v0

* fix fallout in erasure-coding

* remove v1 primitives, consolidate to v2

* the great import update

* update runtime_api_impl_v1 to v2 as well

* guide: add `Version` request for runtime API

* add version query to runtime API

* reintroduce OldV1SessionInfo in a limited way
2022-03-09 14:01:13 -06:00
Robert HabermeierandParity Bot 1db0b6d3e6 add disputes pallet to Polkadot (#4993)
* add disputes pallet to Polkadot

* fix & add bench

* cargo run --quiet --profile=production  --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_parachains::disputes --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_parachains_disputes.rs

Co-authored-by: Parity Bot <admin@parity.io>
2022-02-28 21:35:53 -06:00
Robert HabermeierandAndronik 0b39ae4390 Revert "collator-protocol: short-term fixes for connectivity (#4640)" (#4914)
* Revert "collator-protocol: fix wrong warning (#4909)"

This reverts commit 128421b5dd.

* Revert "collator-protocol: short-term fixes for connectivity (#4640)"

This reverts commit aff88a864a.

* make the slots great again

Co-authored-by: Andronik <write@reusable.software>
2022-02-18 12:17:28 +01:00
Robert Habermeier 1ae121ff27 Ignore redundant dispute messages (#4854)
* ignore duplicate dispute votes

* fmt and TODOs

* tests

* fmt
2022-02-07 15:54:56 -06:00
Robert Habermeier 7c07192c6e log concluded disputes (#4785) 2022-01-26 08:59:04 +00:00
ca358e1288 Fix currently-checking-cache (#4410)
* alter currently-checking-set to launch work only on new candidates

* fmt

* fix compilation

* address review

* Introduce approvals cache test that ensures approval work is only triggered once for each Candidate Hash

* Fix formatting

* Address Feedback

* Move final message await into handle function

Co-authored-by: Chris Sosnin <chris125_@live.com>
Co-authored-by: Lldenaurois <Ljdenaurois@gmail.com>
2021-12-21 16:21:18 -06:00
093c55cf00 add disputes to Kusama runtime (#4356)
* add disputes to Kusama runtime

* Update DisputesHandler

* fmt

* add the benchmarks

* cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_parachains::disputes --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_parachains_disputes.rs

Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
Co-authored-by: Parity Bot <admin@parity.io>
2021-11-24 17:33:44 +01:00
Robert Habermeier fc2320bb9b improved approval-voting logging (#4162)
* improved approval-voting logging

* fmt
2021-10-27 20:22:42 +00:00
Robert Habermeier 4f12ec239d polkadot: remove call filters on registrar pallets (#4093) 2021-10-18 00:03:33 -05:00
Robert Habermeier a1bf894d79 Free disputed cores before processing bitfields (#4008)
* guide: extract free_cores in scheduler

* scheduler: extract free cores to a separate function

* guide: remove disputed cores from scheduler first

* free disputed cores in scheduler before processing bitfields

* spellcheck is mostly right but sometimes stupid

* add comment and fmt
2021-10-04 15:02:31 +00:00
Robert Habermeier 6002865874 Make candidate validation timeouts configurable (#4001)
* pvf: make execution timeout configurable

* guide: add timeouts to candidate validation params

* add timeouts to candidate validation messages

* fmt

* port backing to use the backing pvf timeout

* port approval-voting to use the execution timeout

* port dispute participation to use the correct timeout

* fmt

* address grumbles & test failure
2021-10-04 09:53:36 -05:00
Robert Habermeier bd734ff61b Use background tasks properly in candidate-validation (#4002)
* refactor: candidate-validation background tasks

* fix tests

* fmt
2021-10-04 07:25:17 -05:00
Robert HabermeierandLldenaurois a19ef45e5e fix clock drift for assignments issued before the block (#3851)
* fix clock drift for assignments issued before the block

* always broadcast tranche 0 assignments

* Update tests

* Change from min to max

* Remove erronious print statement

* guide: require fixed approval delay

* prevent approval by very recent assignments

* fix approval-checking tests

* fix main approval tests

* Fix tests

* Fix looked over test

* fix test

Co-authored-by: Lldenaurois <Ljdenaurois@gmail.com>
2021-10-03 14:41:06 -05:00
Robert Habermeier 6d83b59944 Remove unoccupied bit check (#3999)
* remove the check for unoccupied bitfields

* bump rococo version

* fix warning about occupied bitmask
2021-10-03 16:28:02 +00:00
Robert Habermeier ec180fec9e bump substrate (#4000) 2021-10-03 16:20:39 +00:00
Robert Habermeier 385d082d95 ignore irrelevant approvals in logs (#3859)
* ignore irrelevant approvals in logs

* fix
2021-10-03 13:10:24 +02:00
Robert Habermeier c48b2f08ad preserve finalized block in active leaves (#3997) 2021-10-02 19:01:53 +02:00
Robert Habermeier 307a91f431 always broadcast tranche 0 assignments and add a delay before approval (#3904)
* always broadcast tranche 0 assignments

* guide: require fixed approval delay

* prevent approval by very recent assignments

* fix approval-checking tests

* fix main approval tests
2021-10-02 01:59:07 +02:00
Robert Habermeier 09cecc82de add disputes call to Rococo (#3993) 2021-10-01 21:32:27 +00:00
Robert Habermeier 547d166f20 Fix an off-by-one: revert rather than revert-to (#3991)
* fix off-by-one in disputes reversion code

* bump Rococo spec version
2021-10-01 20:24:35 +00:00
Robert HabermeierandAndronik Ordian b6a87891ac Drop availability only for candidates that lose disputes (#3973)
* guide: updates for disputes changes

* paras_inherent: drop availability only for candidates that lose disputes

* spellcheck

* Update runtime/parachains/src/paras_inherent.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-09-29 20:33:16 +00:00
Robert Habermeier 408b49268f fix flaky chain-selection tests (#3948) 2021-09-28 08:43:55 +00:00
Robert Habermeier 94986bec7e disputes: reject single-sided disputes (#3903)
* disputes: reject single-sided disputes

* fmt
2021-09-27 12:16:34 -05:00
ccb7bc5c60 add parachains pallets to Polkadot runtime (#3815)
* add parachains pallets to Polkadot runtime

* some updates

* temp update deposits, fix compile

* lower para byte deposit

* fix genesis

* fmt

* fix spell

* updates to consts

* update benchmark list

* fix merge master

* cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_common::crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_common_crowdloan.rs

* skip large meta

* cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_common::crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_common_crowdloan.rs

* cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_common::paras_registrar --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_common_paras_registrar.rs

* fmt

* add and update proxies

* add weight info

* weights

* lower minimum contribution to 5 DOT

* only overwrite when default

Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
Co-authored-by: Parity Bot <admin@parity.io>
2021-09-23 18:17:34 -04:00
03934d2af1 Add a force_unfreeze extrinsic to the disputes module (#3906)
* add a 'force_unfreeze' to the Disputes module

* fmt

* Benchmark Disputes `force_unfreeze` extrinsic (#3908)

* Companion for Generate storage info for pallet babe #9760 (#3831)

* Adding MaxSegmentLength and MaxAuthorities
to pallet babe

* Missed a few to_vec

* Removing `MaxSegmentLength` as not needed anymore

* Adding `MaxAuthorities` to couple of missing place

* Adding missing definition of `MaxAuthorities`

* Adding a missing to_vec

* update Substrate

Co-authored-by: thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: parity-processbot <>

* Benchmark Disputes `force_unfreeze` extrinsic

target pr: #3906
target branch: rh-unfreeze

* Add benchmark to rococo runtime; run benchmark locally

* Revert unintentionally added diff

* Some spacing and comments

* Bump proc-macro-crate from 1.0.0 to 1.1.0 (#3863)

Bumps [proc-macro-crate](https://github.com/bkchr/proc-macro-crate) from 1.0.0 to 1.1.0.
- [Release notes](https://github.com/bkchr/proc-macro-crate/releases)
- [Commits](https://github.com/bkchr/proc-macro-crate/commits)

---
updated-dependencies:
- dependency-name: proc-macro-crate
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump parity-scale-codec from 2.2.0 to 2.3.0 (#3833)

Bumps [parity-scale-codec](https://github.com/paritytech/parity-scale-codec) from 2.2.0 to 2.3.0.
- [Release notes](https://github.com/paritytech/parity-scale-codec/releases)
- [Changelog](https://github.com/paritytech/parity-scale-codec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/paritytech/parity-scale-codec/compare/v2.2...parity-scale-codec-v2.3.0)

---
updated-dependencies:
- dependency-name: parity-scale-codec
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Use super::WeightInfo to try and get CI to compile

* cargo run --quiet --release --features runtime-benchmarks -- benchmark --chain=rococo-dev --steps=50 --repeat=20 --pallet=runtime_parachains::disputes --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./runtime/parachains/src/disputes/weights.rs --header=./file_header.txt

* impl TestWeightInfo; remove weights from runtime_parachains dir

* fmt

* Update test-runtime

Co-authored-by: Georges <georges.dib@gmail.com>
Co-authored-by: thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Parity Bot <admin@parity.io>

Co-authored-by: Zeke Mostov <32168567+emostov@users.noreply.github.com>
Co-authored-by: Georges <georges.dib@gmail.com>
Co-authored-by: thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Parity Bot <admin@parity.io>
2021-09-23 19:29:26 +00:00
Robert Habermeier fd150db859 add tracing to assignment criteria (#3886)
* add tracing to assignment criteria

* fmt
2021-09-22 11:23:42 +02:00
Robert Habermeier 3c0b7d95f5 update Rococo.json (#3871) 2021-09-16 15:26:48 -05:00
Robert HabermeierandAndronik Ordian 44d2e9adbd approval-voting: processed wakeups can also update approval state (#3848)
* approval-voting: processed wakeups can also update approval state

* fmt changes

* reverse broken if condition

* further correct condition

* add test

* fmt

* Update node/core/approval-voting/src/lib.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-09-15 19:30:03 +00:00
Robert HabermeierandAndronik Ordian f43acd6c15 improve approval tracing (#3846)
* improve approval tracing

* Update node/core/approval-voting/src/import.rs

* Update node/core/approval-voting/src/import.rs

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-09-15 11:17:49 +02:00
Robert HabermeierandRobert Klotzner 647b204b5d participate in disputes only if haven't voted already (#3796)
* participate in disputes only if haven't voted already

* Add tests for dispute participation on local import.

* Fixes.

* cargo fmt

* Get rid of redundant dependency.

Co-authored-by: Robert Klotzner <robert.klotzner@gmx.at>
2021-09-08 13:59:44 +02:00
Robert Habermeier 7815e7001b set DisputesHandler in initializer (#3788) 2021-09-05 16:58:14 +00:00
Robert Habermeier 5596170bfb comment out bridges runtime modules (broken) and update Rococo chain-spec (#3780)
* comment out bridges runtime modules (broken)

* finish commenting out bridges stuff

* more tweaks

* update rococo.json
2021-09-03 16:46:18 -05:00
Robert Habermeier a707f2367c properly gate sanity check (#3684) 2021-08-20 21:11:41 -05:00
Robert HabermeierandRobert Klotzner 9a1b614c47 demote warnings due to disconnected dispute coordinator (#3672)
* demote warnings due to disconnected dispute coordinator

* cargo fmt

Co-authored-by: Robert Klotzner <robert.klotzner@gmx.at>
2021-08-20 15:01:49 +02:00
Robert HabermeierandAndronik Ordian 675f71a882 Dispute vote filtering for block authors (#3498)
* guide: filter_multi_dispute_data

* guide: elaborate

* Implementation of dispute data filtering

* tests for filtering

* don't use std, you fool!

* use swap_remove

* Update runtime/parachains/src/disputes.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

* use btreeste

* address API nit

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-07-21 21:48:07 +02:00
ec98120f0e Disputes runtime (#2947)
* disputes module skeleton and storage

* implement dispute module initialization logic

* implement disputes session change logic

* provide dispute skeletons

* deduplication & ancient check

* fix a couple of warnings

* begin provide_dispute_data impl

* flesh out statement set import somewhat

* move ApprovalVote to shared primitives

* add a signing-payload API to explicit dispute statements

* implement statement signature checking

* some bitflags glue for observing changes in disputes

* implement dispute vote import logic

* flesh out everything except slashing

* guide: tweaks

* declare and use punishment trait

* punish validators for inconclusive disputes

* guide: tiny fix

* guide: update docs

* add disputes getter fn

* guide: small change to spam slots handling

* improve spam slots handling and fix some bugs

* finish API of disputes runtime

* define and deposit `RevertTo` log

* begin integrating disputes into para_inherent

* use precomputed slash_for/against

* return candidate hash from process_bitfields

* implement inclusion::collect_disputed

* finish integration into rest of runtime

* add Disputes to initializer

* address suggestions

* use pallet macro

* fix typo

* Update runtime/parachains/src/disputes.rs

* add test: fix pruning

* document specific behavior

* deposit events on dispute changes

* add an allow(unused) on fn disputes

* add a dummy PunishValidators implementation

* add disputes module to Rococo

* add disputes module to westend runtime

* add disputes module to test runtime

* add disputes module to kusama runtime

* guide: prepare for runtime API for checking frozenness

* remove revert digests in favor of state variable

* merge reversions

* Update runtime/parachains/src/disputes.rs

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>

* Update runtime/parachains/src/disputes.rs

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>

* Update runtime/parachains/src/disputes.rs

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>

* add byzantine_threshold and supermajority_threshold utilities to primitives

* use primitive helpers

* deposit revert event when freezing chain

* deposit revert log when freezing chain

* test revert event and log are generated when freezing

* add trait to decouple disputes handling from paras inherent handling

* runtime: fix compilation and setup dispute handler

* disputes: add hook for filtering out dispute statements

* disputes: add initializer hooks to DisputesHandler

* runtime: remove disputes pallet from all runtimes

* tag TODOs

* don't import any dispute statements just yet...

* address grumbles

* fix spellcheck, hopefully

* maybe now?

* last spellcheck round

* fix runtime tests

* fix test-runtime

Co-authored-by: thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>
Co-authored-by: André Silva <andrerfosilva@gmail.com>
2021-07-19 16:49:19 +00:00
Robert Habermeier e512222749 Wire up candidate backing, approval-voting to disputes (#3348)
* add a from_backing_statement to SignedDisputeStatement

* inform dispute coordinator of all backing statements

* add dispute coordinator message to backing tests

* send positive dispute statement with every approval

* issue disputes when encountering invalid candidates.

* try to fix flaky test for CI (passed locally)

* guide: keep track of concluded-positive disputes until pruned

* guide: block implications

* guide: new dispute inherent flow

* mostly implement recency changes for dispute coordinator

* add a clock to dispute coordinator

* adjust DB tests

* fix and add new dispute coordinator tests

* provisioner: select disputes

* import all validators' approvals

* address nit: refactor backing statement submission

* gracefully handle disconnected dispute coordinator

* remove `review` comment

* fix up old_tests

* fix approval-voting compilation

* fix backing compilation

* use known-leaves in WaitForActivation

* follow-up test fixing

* add back allow(dead_code)
2021-07-09 21:15:51 +00:00
Robert HabermeierandAndronik Ordian f69c175119 Chain Selection: Follow-ups (#3328)
* DB skeleton

* key formats

* lexicographic test

* custom types for DB

* implement backend for db-v1

* remove VoidBackend and integrate with real DbBackend

* detect stagnant blocks on in interval

* fix tests

* add tests for stagnant

* send ChainSelectionMessage::Approved

* tests for DB backend

* unused import

* upgrade kvdb-memorydb

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-07-06 16:00:52 -05:00
Robert Habermeier b57b9cf7dc SelectChain implementation for relay chains (#3341)
* stubbed SelectRelayChain

* disconnected overseer handlers

* add is_disconnected

* add fallback in case overseer is disconnected

* fall back on fallback

* fetch leaves by calling into chain-selection subsystem

* implement best_chain

* mostly implement finality_target

* chain constrain

* metrics and maximum safeguard

* remove review comment after review
2021-06-22 18:41:54 -05:00
Robert HabermeierandBernhard Schuster 74baed8b39 Chain Selection Subsystem Logic (#3277)
* crate skeleton and type definitions

* add ChainSelectionMessage

* add error type

* run loop

* fix overseer

* simplify determine_new_blocks API

* write an overlay struct and fetch new blocks

* add new function to overlay

* more flow

* add leaves to overlay and add a strong type around leaves-set

* add is_parent_viable

* implement block import, ignoring reversions

* add stagnant-at to overlay

* add stagnant

* add revert consensus log

* flow for reversions

* extract and import block reversions

* recursively update viability

* remove redundant parameter from WriteBlockEntry

* do some removal of viable leaves

* address grumbles

* refactor

* address grumbles

* add comment about non-monotonicity

* extract backend to submodule

* begin the hunt for viable leaves

* viability pivots for updating the active leaves

* remove LeafSearchFrontier

* partially -> explicitly viable and untwist some booleans

* extract tree to submodule

* implement block finality update

* Implement block approval routine

* implement stagnant detection

* ensure blocks pruned on finality are removed from the active leaves set

* write down some planned test cases

* floww

* leaf loading

* implement best_leaf_containing

* write down a few more tests to do

* remove dependence of tree on header

* guide: ChainApiMessage::BlockWeight

* node: BlockWeight ChainAPI

* fix compile issue

* note a few TODOs for the future

* fetch block weight using new BlockWeight ChainAPI

* implement unimplemented

* sort leaves by block number after weight

* remove warnings and add more TODOs

* create test module

* storage for test backend

* wrap inner in mutex

* add write waker query to test backend

* Add OverseerSignal -> FromOverseer conversion

* add test harnes

* add no-op test

* add some more test helpers

* the first test

* more progress on tests

* test two subtrees

* determine-new-blocks: cleaner genesis avoidance and tighter ancestry requests

* don't make ancestry requests when asking for one block

* add a couple more tests

* add to AllMessages in guide

* remove bad spaces from bridge

* compact iterator

* test import with gaps

* more reversion tests

* test finalization pruning subtrees

* fixups

* test clobbering and fix bug in overlay

* exhaustive backend state after finalizaiton tested

* more finality tests

* leaf tests

* test approval

* test ChainSelectionMessage::Leaves thoroughly

* remove TODO

* avoid Ordering::is_ne so CI can build

* comment algorithmic complexity

* Update node/core/chain-selection/src/lib.rs

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
2021-06-21 17:39:43 +00:00
Robert Habermeier 1225963dea Improvements to determine_new_blocks (#3313)
* determine-new-blocks: cleaner genesis avoidance and tighter ancestry requests

* don't make ancestry requests when asking for one block
2021-06-19 19:59:32 -05:00
Robert HabermeierandAndré Silva b70da7bff7 Block weight ChainAPI (#3301)
* guide: ChainApiMessage::BlockWeight

* node: BlockWeight ChainAPI

* fix compile issue

* implement ChainApi::BlockWeight

* add test for ChainApi::BlockWeight

* update substrate

Co-authored-by: André Silva <andrerfosilva@gmail.com>
2021-06-19 19:19:07 +02:00
Robert Habermeier 7dbf971054 add revert consensus log (#3275) 2021-06-17 16:35:56 -05:00
Robert HabermeierandLldenaurois 9c7a346e4c Implementers' Guide: Chain Selection (#3262)
* high-level discussion of fork-choice and chain selection

* notes on chain-selection subsystem

* send `Approve` messages from approval-voting

* remove references to candidate-selection

* adjust grandpa voting rule docs

* Update roadmap/implementers-guide/src/node/grandpa-voting-rule.md

Co-authored-by: Lldenaurois <ljdenaurois@gmail.com>

* Update roadmap/implementers-guide/src/protocol-chain-selection.md

Co-authored-by: Lldenaurois <ljdenaurois@gmail.com>

* Update roadmap/implementers-guide/src/protocol-chain-selection.md

Co-authored-by: Lldenaurois <ljdenaurois@gmail.com>

Co-authored-by: Lldenaurois <ljdenaurois@gmail.com>
2021-06-17 15:10:23 +00:00
Robert Habermeier 462ca043e5 extract determine_new_blocks into a separate utility (#3261)
* extract determine_new_blocks into a separate utility

* rework docs
2021-06-16 14:10:50 -05:00
Robert Habermeier 28ecc38646 Drop guard for detecting stale approvals (#3251)
* Drop guard for detecting stale approvals

* address nits with different API
2021-06-15 16:09:03 +00:00
Robert Habermeier faf42fc29d Better metrics for approval voting (#3247)
* add more information about what's happening during approval work

* record assignment tranches in histogram
2021-06-14 17:28:22 +00:00
Robert Habermeier 659a04cad6 use correct unbounded meter for statement distribution (#3245) 2021-06-14 15:42:04 +00:00
Robert Habermeier 4797fb7dfb use fresh_start in rolling window error (#3229) 2021-06-13 14:26:36 +00:00
Robert Habermeier 428a4178ff add metric for timing recovery and approval (#3228) 2021-06-13 11:55:21 +00:00
5bc2b2779d Dispute Coordinator Subsystem (#3150)
* skeleton for dispute-coordinator

* add coordinator and participation message types

* begin dispute-coordinator DB

* functions for loading

* implement strongly-typed DB transaction

* add some tests for DB transaction

* core logic for pruning

* guide: update candidate-votes key for coordinator

* update candidate-votes key

* use big-endian encoding for session, and implement upper bound generator

* finish implementing pruning

* add a test for note_current_session

* define state of the subsystem itself

* barebones subsystem definition

* control flow

* more control flow

* implement session-updating logic

* trace

* control flow for message handling

* Update node/core/dispute-coordinator/src/lib.rs

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>

* Update node/subsystem/src/messages.rs

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>

* some more control flow

* guide: remove overlay

* more control flow

* implement some DB getters

* make progress on importing statements

* add SignedDisputeStatement struct

* move ApprovalVote to shared primitives

* add a signing-payload API to explicit dispute statements

* add signing-payload to CompactStatement

* add relay-parent hash to seconded/valid dispute variatns

* correct import

* type-safe wrapper around dispute statements

* use checked dispute statement in message type

* extract rolling session window cache to subsystem-util

* extract session window tests

* approval-voting: use rolling session info cache

* reduce dispute window to match runtime in practice

* add byzantine_threshold and supermajority_threshold utilities to primitives

* integrate rolling session window

* Add PartialOrd to CandidateHash

* add Ord to CandidateHash

* implement active dispute update

* add dispute messages to AllMessages

* add dispute stubs to overseer

* inform dispute participation to participate

* implement issue_local_statement

* implement `determine_undisputed_chain`

* fix warnings

* test harness for dispute coordinator tests

* add more helpers to test harness

* add some more helpers

* some tests for dispute coordinator

* ignore wrong validator indices

* test finality voting rule constraint

* add more tests

* add variants to network bridge

* fix test compilation

* remove most dispute coordinator functionality

as of #3222 we can do most of the work within the approval voting subsystem

* Revert "remove most dispute coordinator functionality"

This reverts commit 9cd615e8eb6ca0b382cbaff525d813e753d6004e.

* Use thiserror

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>

* Update node/core/dispute-coordinator/src/lib.rs

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>

* extract tests to separate module

* address nit

* adjust run_iteration API

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>
Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
2021-06-13 06:35:18 -05:00
Robert Habermeier a87df9d854 Fix historical validation code runtime API (#3187)
* remove some 'allow(unused)'

* fix historical validation code runtime API
2021-06-05 11:47:37 -05:00
Robert Habermeier 3bc3856544 impose minimum limitation on explicit votes too (#3181) 2021-06-04 18:05:23 +00:00
Robert Habermeier 736d0a48fe better logging for approval voting failures (#3180) 2021-06-04 11:50:38 -05:00
Robert HabermeierandAndré Silva b5e49c03ec put a cap on finality lag (#3175)
* put a cap on finality lag

* Update node/service/src/grandpa_support.rs

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>

* apply lag to best, not to current vote

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>
2021-06-04 15:49:27 +00:00
Robert Habermeier 963993d288 Reversion Safety tools for overseer and subsystems (#3104)
* guide: reversion safety

* guide: manage reversion safety in subsystems

* add leaf status to ActivatedLeaf

* add an LRU-cache to overseer for staleness detection

* update ActivatedLeaf usages in tests to contain status field

* add variant where missed accidentally

* add some helpers to LeafStatus

* address grumbles
2021-05-31 20:54:05 +02:00
Robert Habermeier 6b166a7a1f fix approval-checking GRANDPA voting rule (#3133)
* fix approval-checking GRANDPA voting rule

a `None` return value implies to vote on the best, not to vote on the base.

this explicitly changes the logic to vote on the base

* refactor logic out and test
2021-05-31 10:45:16 -05:00
Robert Habermeier d4e8f2a3da set session-info availability cores based on scheduler (#3134)
this will account for 'dummy' cores due to maxValidatorsPerCore
2021-05-28 18:06:55 -05:00
Robert Habermeier 92fa699f87 clear PVF cache artifacts on startup (#3084) 2021-05-24 08:59:47 +01:00
Robert Habermeier ec43a848b9 add the correct indirection to reward points for backing (#3082) 2021-05-22 19:01:37 -05:00
Robert Habermeier 02faeede88 Some more debug logging (#3073)
* log validator index when importing statement

* log validation failures in debug
2021-05-22 09:25:41 +02:00
2d18b26151 Add parachains modules to Westend and Kusama runtimes (#2854)
* add `force_set_active_config`

* add parachains modules to Westend

* add parachains modules to Kusama runtime

* use real runtime API impl

* add module indices and remove auctions, crowdloan

* add benchmarks

* remove previous migrations and add host configuration set migration

* make compile

* Add Call Filter for Registrar and Slots except Root

* cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=slots --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/

* cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=paras_registrar --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/

* fix build

* update `add_benchmark`

* cargo run --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_common::paras_registrar --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_common_paras_registrar.rs

* cargo run --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_common::slots --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_common_slots.rs

* cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_common::paras_registrar --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_common_paras_registrar.rs

* cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_common::slots --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_common_slots.rs

* fix weights

* tweak more constants

* Fix up the kusama runtime

* Westend runtime fixups

* Fix MMR & Beefy for westend

* Fixes

* fix tests

* Update runtime/polkadot/src/constants.rs

Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>

* Update runtime/westend/src/lib.rs

Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
Co-authored-by: Parity Benchmarking Bot <admin@parity.io>
Co-authored-by: Gav Wood <gavin@parity.io>
2021-05-01 17:36:11 +02:00
Robert Habermeier 23cfd0edb9 update rococo and remove cursed BEEFY migration (#2870)
* update rococo and remove cursed BEEFY migration

* remove migration

* tweak VERSION
2021-04-10 00:10:14 +02:00
Robert Habermeier bc7761a3da set groups correctly even if not validator (#2863)
shows what I get for being hasty last time. i added a test this time, which would have caught this issue last time.
2021-04-09 12:21:39 +02:00
Robert Habermeier 234d0df515 no backing job early exit if not validator (#2860)
with the MaxValidators parameter set, this meant that only validators participating in parachain consensus would be able to author relay-chain blocks containing backed candidates
2021-04-08 22:35:23 +00:00
Robert Habermeier 896ec8dbc3 Code, PoV compression and remove CompressedPoV struct (#2852)
* use compressed blob in candidate-validation

* add some tests for compressed code blobs

* remove CompressedPoV and apply compression in collation-generation

* decompress BlockData before executing

* don't produce oversized collations

* add test for PoV decompression failure

* fix tests and clean up

* fix test

* address review and fix CI

* take this )
2021-04-08 22:09:36 +02:00
Robert Habermeier cfb8dfa4fe bump spec versions across the board (#2856) 2021-04-08 19:14:19 +00:00
Robert Habermeier 57038b2e46 Remove real-overseer 🎉 (#2834)
* remove real-overseer

* overseer: only activate leaves which support parachains

* integrate HeadSupportsParachains into service

* remove unneeded line
2021-04-08 20:24:06 +02:00
Robert Habermeier 8eae0fa443 check for lost race before warning (#2833) 2021-04-07 22:04:15 +02:00
Robert Habermeier 251b6ca7bf remove WASM_MAGIC (#2832)
* remove WASM_MAGIC

* fix test warnings
2021-04-07 12:00:22 +03:00
Robert Habermeier e67f31cc49 update twox-hash (#2831) 2021-04-07 10:09:18 +02:00
Robert Habermeier 5a9e8b9956 update rococo genesis (#2830) 2021-04-07 10:08:43 +02:00
Robert Habermeier 5c94a5b9c7 finally get unbacked candidates to descend from root span correctly (#2819) 2021-04-05 16:37:35 +02:00
Robert HabermeierandAndronik Ordian ec5ad35e14 Network bridge metrics (#2818)
* add metrics (unused) to network bridge

* fix test compilation

* trigger metrics messages

* add some more metrics

* track sent and received notifications

* restore metrics import

* integrate into service

* Update node/network/bridge/src/lib.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

* Update node/network/bridge/src/lib.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-04-05 01:07:05 +02:00
Robert Habermeier bfc8f4fcf3 Collators: Declare to all peers (#2816)
* fix tests

* add test for rejecting declares on collators

* fix bad test
2021-04-04 16:59:00 +00:00
Robert HabermeierandAndronik Ordian 11b8e4c821 Collation protocol: stricter validators (#2810)
* guide: declare one para as a collator

* add ParaId to Declare messages and clean up

* fix build

* fix the testerinos

* begin adding keystore to collator-protocol

* remove request_x_ctx

* add core_for_group

* add bump_rotation

* add some more helpers to subsystem-util

* change signing_key API to take ref

* determine current and next para assignments

* disconnect collators who are not on current or next para

* add collator peer count metric

* notes for later

* some fixes

* add data & keystore to test state

* add a test utility for answering runtime API requests

* fix existing collator tests

* add new tests

* remove sc_keystore

* update cargo lock

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-04-03 21:48:58 +02:00
Robert Habermeier 12000de79a change some configuration for rococo (#2802) 2021-04-03 00:19:35 +00:00
Robert Habermeier c54f8848d1 add disputes members to HostConfiguration (#2806)
* add disputes members to `HostConfiguration`

* revert bad rename
2021-04-02 19:59:21 +02:00
Robert Habermeier 05a5047e40 remove training wheels (#2800) 2021-04-01 23:45:00 +02:00
Robert HabermeierandAndronik Ordian 57b56770e0 Approval Voting improvements (#2781)
* extract database from av-store itself

* generalize approval-voting over database type

* modes (without handling) and pruning old wakeups

* rework approval importing

* add our_approval_sig to ApprovalEntry

* import assignment

* guide updates for check-full-approval changes

* some aux functions

* send messages when becoming active.

* guide: network bridge sends view updates only when done syncing

* network bridge: send view updates only when done syncing

* tests for new network-bridge behavior

* add a test for updating approval entry with sig

* fix some warnings

* test load-all-blocks

* instantiate new parachains DB

* fix network-bridge empty view updates

* tweak

* fix wasm build, i think

* Update node/core/approval-voting/src/lib.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

* add some versioning to parachains_db

* warnings

* fix merge changes

* remove versioning again

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-04-01 17:33:52 +00:00
Robert Habermeier 5338f0f055 tweaks to relevant_authority_ids (#2796) 2021-04-01 19:06:58 +02:00
Robert Habermeier 0794f69306 Add dispute types and change InclusionInherent to ParasInherent (#2791)
* dispute types

* add Debug to dispute primitives in std and InherentData

* use ParachainsInherentData on node-side

* change inclusion_inherent to paras_inherent

* RuntimeDebug

* add type parameter to PersistedValidationData users

* fix test client

* spaces

* fix collation-generation test

* fix provisioner tests

* remove references to inclusion inherent
2021-04-01 18:23:27 +02:00
Robert Habermeier 5da762e728 Avoid querying the local validator in availability recovery (#2792)
* guide: don't request availability data from ourselves

* add QueryAllChunks message

* implement QueryAllChunks

* remove unused relay_parent from StoreChunk

* test QueryAllChunks

* fast paths make short roads

* test early exit behavior
2021-04-01 15:57:41 +02:00
Robert Habermeier ccfabaa0c6 Node-side subsystems for Disputes (#2566)
* dispute subsystem files

* rename

* fix linkcheck

* flesh out section README

* coordinator schema

* DisputeCoordinatorMessage

* stub & coordinator protocol

* dispute coordinator

* add some more message fields

* move links to bottom

* dispute participation

* Cleen It Up !

* runtime: store candidate receipts in dispute state

yeah, this is a little heavier. why are you reading this?

* Revert "runtime: store candidate receipts in dispute state"

This reverts commit 51c10bfd4d866e287e6bd88f317ed57ed987eaee.

* add dispute availability statement type and prepare for availability

* add 'spam slots' to disputes runtmie

* return Spam Slots info from runtime

* rework `ImportStatement` to `ImportStatements`

* some more methods for dispute coordinator

* candidates-included runtime API

* algo for providing disputes to runtime.

* handle signing with coordinator

* dispute coordinator chain ops

* remove dead file

* remove keystore from dispute participation

* adjust ApprovedAncestor to return the necssary data

* discuss how approved ancestor and determine undisputed chain are used together

* add TODO

* initiate disputes from approval voting

* route statements from candidate backing and approval voting

* fix guide build
2021-04-01 03:00:46 +02:00
Robert Habermeier e65cad69ec Fix future-polling loop in availability and add a better early-exit (#2779)
* onto the front

* fix early exit for waiting for requests

* add logging back
2021-03-31 17:35:17 +02:00