* GRANDPA justifications: equivocation detection primitives
- made the justification verification logic more customizable
- added support for parsing multiple justifications and extracting
equivocations
- split the logic into multiple files
- split the errors into multiple enums
* Use `HeaderChainError` in parachains module
* Use MessageProofError instead of 'static str in some places
* Avoid implementing Into<'static str> for some errors
We avoid deriving `Debug` for the structs that we use in the runtime and
we derive `RuntimeDebug` instead in order to avoid bloating th eruntime
with static strs. But implementing `Into<'static str>` does the same. So
in some places it makes sense to replace `Into<'static str>` with `Debug`.
* Move the messages error definition
Move the messages error definition outside of `mod target`
* Small changes
* Define generic bridge pallets call structs
* polkadot-core SignedExtension simplifications
- we don't seem to need to pass the Call as a generic param
- we can use codec(skip) instead of implementing Encode and Decode
* Split BridgeHubRococo and BridgeHubWococo calls
* code review fixes
* SignedBlock: get justification by consensus engine id
* Define ConsensusLogReader
Making the check for authority changes more generic
* cod review changes
Unify the operating mode for bridge pallets
- define the OperationMode trait and BasicOperatingMode enum
- use the OperationMode trait in all the bridge pallets
- use BasicOperatingMode instead of IsHalted for the Grandpa pallet
- use BasicOperatingMode as part of MessagesOperatingMode
Signed-off-by: Serban Iorga <serban@parity.io>
* fix clippy warnings
* try to reenable proper clippy on CI
* fix clippy error
* more Eqs
* ignore clippy::derive-partial-eq-without-eq - clippy seems to be broken now :/
* fix(spellcheck): test of fixing
* fix(hunspell): improved many typos etc.
* fix(hunspell): all errors solved
* fix(hunspell): extended scope of files - the build should fail
* Return error code.
* Fix spelling, sort dictionary.
* fix(hunspell): added fix to gitlabs check
* fix(typo): one typo and test of verification on github
* fix(typo): one typo
Co-authored-by: Tomasz Drwięga <tomasz@parity.io>
* Stop passing raw encoded justifications to pallet API
By having the API accept a struct-ified justification we are able to
better utilize the justifications fields for weight calculations.
* Update relayer code to use decoded justifications
* Add justification to `expect()` statement
* Fix some imports
* Make justification wrapper contain decoded justification
* Rename some fields
* Get rid of warnings
* Appease Clippy
* Only decode justification once at init time
* Remove unnecessary method
* Remove justification wrapper
This became kinda unnecessary since we could implement the FinalityProof
trait on GrandpaJustification directly.
* Remove unused Config types from `pallet-finality-verifier`
* Remove unused AncestryChecker trait
* Remove ancestry proof parameter from relayer calls
* Update docs to reflect current state of pallet
* Remove mock ancestry checker
* Remove unused error
* Write headers outside of function used for authority set changes
* Move justification verification into helper function
* Add documentation suggestions
Co-authored-by: Tomasz Drwięga <tomusdrw@users.noreply.github.com>
* Clean up module level documentation a bit
Co-authored-by: Tomasz Drwięga <tomusdrw@users.noreply.github.com>
* Use no-op ancestry checker
* Check that current header height is greater than last finalized
* Ensure that incoming headers are strictly greater than last finalized
* Ensure that header numbers always increase in tests
* Revert "Pin Rust Nightly to 2020-12-17 (#652)"
This reverts commit e54e6f7e3d34c28d698e637f9099162b3c1917e9.
* fix clippy
* clippy again
* more clippy in test code
* and new cargo fmt
* another try
* Make AncestryProof type more flexible
* Only import single finalized header instead of a chain
* Fix unchecked header import tests
* Add option for limiting ancestry proof size
* Update finality verifier Config in runtimes
* Update some documentation
* Fix Clippy warning
* Allow AncestryChecker to return proof size
Stops us from abusing the `Size` trait
* Remove Size impl for Vec<T>
* Remove size contraints for ancestry proofs
With different proof types its unclear how to "size" should be interpreted,
so we remove this requirement all together to avoid confusion.
* Add Finality Verifier pallet to runtimes
* Implement simple ancestry checker
* Use the new checker in runtimes
* Remove unused import warning
* Bump max allowed ancestry proof size
* Add a few optimization suggestions when verifying ancestry
* Use session length as upper bound for ancestry proof size
* Remove unused time units
* Add method for unchecked header imports
* Update docs for importing unchecked headers
* Import unchecked headers in HeaderChain implementation
* Fix Clippy warnings
* Move unchecked header import out of Verifier struct
* Clean up unchecked import tests
* Change HeaderChain API to accept iterator of headers
* Use chains of headers in tests
* Remove unused Result return type when appending finalized headers
* Add test which shows that genesis changes are not enacted
* Use initial header's hash for unchecked authority set changes
* Appease Clippy
* Check ancestry before making unchecked writes
* Fix typo
* Fix Clippy warning
* Add note about `ancestry_proof` structure
* Use best hash storage item directly
Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com>
* Add skeleton for `pallet-finality-verifier`
* Sketch out implementation for importing finality proofs
* Get pallet compiling
* Introduce skeleton for mock runtime
* Start using real Grandpa types in finality pallet
* Redefine types in header chain primitives crate
* Implement HeaderChain for Substrate bridge pallet
* Plug Substrate Bridge Pallet into verifier mock
* Fix compilation of `header-chain` primitives
* Start writing to base pallet storage
* Add first "cross-pallet" test
* Move keyring primitives used in tests to shared crate
* Stop pulling `std` deps into `no_std` builds
* Revert "Stop pulling `std` deps into `no_std` builds"
This reverts commit f74dd660652f98b7336936d1534a4e63cc9169a5.
* Revert "Move keyring primitives used in tests to shared crate"
This reverts commit b774fa730b2cdc40545afff308a66b0840266001.
* Use new SS58Prefix type in mock
* Start using `bp-test-utils` in finality pallet
* Start using real justification code
* Get a test working with real justification verification
* Add basic tests for invalid proofs
* Get rid of AncestryProof config type
* Add error types to transaction outcome
* Bound number of headers allowed in a single ancestry proof
* Disallow invalid authority sets
* Remove unused items
* Add some documentation
* Get rid of Clippy warnings
* Rename BaseHeaderChain to TransactionVerifier
* Remove unused code
* Make dummy trait implementations more generic
* Fix more Clippy complaints
* Update tests to use fix for duplicate headers
* Fix benchmarking compilation
* Rename TransactionVerifier to InclusionProofVerifier