Skip to content
  1. Oct 06, 2022
    • Adrian Catangiu's avatar
      Add pluggable BEEFY payload constructors (#12428) · b91d2dfd
      Adrian Catangiu authored
      * primitives/beefy: move Payload to its own file
      
      * primitives/beefy: add Payload tests
      
      * primitives/beefy: add MmrRootProvider as custom BEEFY payload provider
      
      * client/beefy: use generic BEEFY 'PayloadProvider'
      
      * primitives/beefy: rename Payload::new to Payload::from_single_entry for clarity
      
      * fix visibility
      
      * fix cargo doc
      b91d2dfd
  2. Oct 05, 2022
  3. Oct 04, 2022
  4. Oct 03, 2022
    • Adrian Catangiu's avatar
      Beefy on-demand justifications as a custom RequestResponse protocol (#12124) · 2a27545a
      Adrian Catangiu authored
      
      
      * client/beefy: create communication module and move gossip there
      
      * client/beefy: move beefy_protocol_name module to communication
      
      * client/beefy: move notification module under communication
      
      * client/beefy: add incoming request_response protocol handler
      
      * client/beefy: keep track of connected peers and their progress
      
      * client/beefy: add logic for generating Justif requests
      
      * client/beefy: cancel outdated on-demand justification requests
      
      * try Andre's suggestion for JustificationEngine
      
      * justif engine add justifs validation
      
      * client/beefy: impl OnDemandJustificationsEngine async next()
      
      * move beefy proto name test
      
      * client/beefy: initialize OnDemandJustificationsEngine
      
      * client/tests: allow for custom req-resp protocols
      
      * client/beefy: on-demand-justif: implement simple peer selection strategy
      
      * client/beefy: fix voter initialization
      
      Fix corner case where voter gets a single burst of finality
      notifications just when it starts.
      
      The notification stream was consumed by "wait_for_pallet" logic,
      then main loop would subscribe to finality notifications, but by that
      time some notifications might've been lost.
      
      Fix this by subscribing the main loop to notifications before waiting
      for pallet to become available. Share the same stream with the main loop
      so that notifications for blocks before pallet available are ignored,
      while _all_ notifications after pallet available are processed.
      
      Add regression test for this.
      
      Signed-off-by: default avataracatangiu <[email protected]>
      
      * client/beefy: make sure justif requests are always out for mandatory blocks
      
      * client/beefy: add test for on-demand justifications sync
      
      * client/beefy: tweak main loop event processing order
      
      * client/beefy: run on-demand-justif-handler under same async task as voter
      
      * client/beefy: add test for known-peers
      
      * client/beefy: reorg request-response module
      
      * client/beefy: add issue references for future work todos
      
      * client/beefy: consolidate on-demand-justifications engine state machine
      
      Signed-off-by: default avataracatangiu <[email protected]>
      
      * client/beefy: fix for polkadot companion
      
      * client/beefy: implement review suggestions
      
      * cargo fmt and clippy
      
      * fix merge damage
      
      * fix rust-doc
      
      * fix merge damage
      
      * fix merge damage
      
      * client/beefy: add test for justif proto name
      
      Signed-off-by: default avataracatangiu <[email protected]>
      2a27545a
  5. Sep 30, 2022
  6. Sep 26, 2022
  7. Sep 21, 2022
  8. Sep 16, 2022
    • Adrian Catangiu's avatar
      client/beefy: fix voter initialization (#12274) · d9a4d835
      Adrian Catangiu authored
      
      
      Fix corner case where voter gets a single burst of finality
      notifications just when it starts.
      
      The notification stream was consumed by "wait_for_pallet" logic,
      then main loop would subscribe to finality notifications, but by that
      time some notifications might've been lost.
      
      Fix this by subscribing the main loop to notifications before waiting
      for pallet to become available. Share the same stream with the main loop
      so that notifications for blocks before pallet available are ignored,
      while _all_ notifications after pallet available are processed.
      
      Add regression test for this.
      
      Signed-off-by: default avataracatangiu <[email protected]>
      d9a4d835
  9. Sep 05, 2022
    • Adrian Catangiu's avatar
      beefy: initialize voter from genesis and fix initial sync (#11959) · 84acfd5f
      Adrian Catangiu authored
      
      
      * client/beefy: use backend instead of client where possible
      
      * client/beefy: initialize voter from genesis
      
      Now that we have justifications import, we can drop the "lean beefy"
      behaviour and start building justifications chain from Genesis with
      containing all past sessions' mandatory blocks justifications.
      
      * client/beefy: walk finality tree_route to catch session changes
      
      * client/beefy: fix block import
      
      During initial block import blocks are not finalized, so trying to
      validate and append justifications within block import fails (for
      initial network sync imported blocks).
      
      Changes:
      
      - Move justification validation to _after_ `inner.block_import()`,
        so block is imported in backend and runtime api can be called to
        get the BEEFY authorities for said block.
      - Move append-to-backend for imported BEEFY justification to voter,
        because it already has the required logic to BEEFY-finalize blocks
        only after GRANDPA finalized them.
      - Mark voting rounds as concluded when finalizing through
        imported justifications as well as when finalizing through voting.
      
      * client/beefy: valid justifications are one per block number
      
      The only way we'd get _different_ _validated_ justifications for same
      block number is if authorities are double voting, which will be handled
      later.
      
      * client/beefy: process incoming justifs during major sync
      
      * client/beefy: correct voter initialization
      
      BEEFY voter should resume voting from either:
        - last BEEFY finalized block,
        - session start,
      whichever is closest to head.
      
      * client/beefy: test voter initialization
      
      * client/beefy: impl review suggestions
      
      Signed-off-by: default avataracatangiu <[email protected]>
      84acfd5f
  10. Sep 03, 2022
    • Dmitry Markin's avatar
      Use custom type for ProtocolName (#12172) · 24d09fe8
      Dmitry Markin authored
      * Add ProtocolName custom type
      
      * Use new ProtocolName in sc_network_common
      
      * Use new ProtocolName in sc_network
      
      * Use new ProtocolName for BEEFY and GRANDPA
      
      * Use new ProtocolName for notifications
      
      * Use new ProtocolName in sc_network (part 2)
      
      * Use new ProtocolName in sc_network_gossip
      
      * Use new ProtocolName in sc_offchain
      
      * Remove unused imports
      
      * Some more fixes
      
      * Add tests
      
      * Fix minor import issues
      
      * Re-export ProtocolName in sc_network
      
      * Revert "Re-export ProtocolName in sc_network"
      
      This reverts commit 8d8ff71927e7750757f29c9bbd88dc0ba181d214.
      
      * Re-export ProtocolName in sc_network
      
      * Remove dependency on sc-network-common from beefy-gadget
      24d09fe8
  11. Aug 26, 2022
  12. Aug 25, 2022
  13. Aug 15, 2022
  14. Aug 04, 2022
  15. Aug 02, 2022
  16. Jul 29, 2022
    • Adrian Catangiu's avatar
      Lean BEEFY to Full BEEFY - don't skip (older) mandatory blocks and import justifications (#11821) · 1c6867c6
      Adrian Catangiu authored
      
      
      * client/beefy: don't accept vote for older rounds
      
      * client/beefy: clean up and reorg the worker struct
      
      * client/beefy: first step towards Full BEEFY
      
      The first step from Lean->Full BEEFY is to have the worker
      enforce uninterrupted line of BEEFY finalized mandatory blocks.
      
      There is one mandatory block per session (the first block in the
      session). As such, votes processing and votes generation now
      enforces that all mandatory blocks are finalized in strict
      monotonically increasing sequence and no block 'N' will be worked
      on if there is any GRANDPA finalized but BEEFY non-final mandatory
      block 'M', where 'M < N'.
      
      Implementation details:
      
      - Introduced 'VoterOracle' to separate the voting decisions logic,
        and track new/pending sessions.
      
      - New sessions get queued up with the worker operating either:
        1. up-to-date - all mandatory blocks leading up to current GRANDPA
           finalized: queue has ONE element, the 'current session' where
           `mandatory_done == true`,
        2. lagging behind GRANDPA: queue has [1, N] elements, where all
           `mandatory_done == false`.
           In this state, everytime a session gets its mandatory block
           BEEFY finalized, the session is popped off the queue,
           eventually getting to operating mode `1. up-to-date`.
      
      - Votes get triaged and those that fall withing the `VoterOracle`
        allowed window get processed, the others get dropped if stale,
        or buffered for later processing (when they reach the window).
      
      - Worker general code was also updated to fall in one of two roles:
        1. react to external events and change internal 'state',
        2. generate events/votes based on internal 'state'.
      
      Signed-off-by: default avataracatangiu <[email protected]>
      
      * client/beefy: sketch idea for block import and sync
      
      Signed-off-by: default avataracatangiu <[email protected]>
      
      * client/beefy: add BEEFY block import
      
      * client/beefy: process justifications from block import
      
      * client/beefy: add TODOs for sync protocol
      
      * client/beefy: add more docs and comments
      
      * client/beefy-rpc: fix RPC error
      
      * client/beefy: verify justification validity on block import
      
      * client/beefy: more tests
      
      * client/beefy: small fixes
      
      - first handle and note the self vote before gossiping it,
      - don't shortcircuit on err when processing pending votes.
      
      * client/beefy: remove invalid justifications at block import
      
      * todo: beefy block import tests
      
      * RFC: ideas for multiple justifications per block
      
      * Revert "RFC: ideas for multiple justifications per block"
      
      This reverts commit 8256fb07d3124db69daf252720b3c0208202624d.
      
      * client/beefy: append justif to backend on block import
      
      * client/beefy: groundwork for block import test
      
      * client/beefy: groundwork2 for block import test
      
      * client/beefy: groundwork3 for block import test
      
      * client/beefy: add block import test
      
      * client/beefy: add required trait bounds to block import builder
      
      * remove client from beefy block import, backend gets the job done
      
      Signed-off-by: default avataracatangiu <[email protected]>
      1c6867c6
  17. Jul 26, 2022
    • Sebastian Kunert's avatar
      Prepare for rust 1.62.1 (#11903) · 9f409dc0
      Sebastian Kunert authored
      
      
      * Update UI test output for rust 1.62.1
      
      * switch ci to staging image to check that everything works
      
      * fix artifacts node-bench-regression-guard
      
      * Imeplement `scale_info::TypeInfo` manually to silence aggressive rust warning
      
      * Fix more clippy lints
      
      * Make clippy happy by relying on auto-deref were possible
      
      * Add tracking issue to the comments
      
      * pin ci image
      
      Co-authored-by: default avataralvicsam <[email protected]>
      9f409dc0
  18. Jul 25, 2022
  19. Jul 12, 2022
    • Nazar Mokrynskyi's avatar
      Network sync refactoring (part 4) (#11412) · 5896072b
      Nazar Mokrynskyi authored
      
      
      * Remove direct dependency of `sc-network` on `sc-network-light`
      
      * Move `WarpSyncProvider` trait and surrounding data structures into `sc-network-common`
      
      * Move `WarpSyncProvider` trait and surrounding data structures into `sc-network-common`
      
      * Create `sync` module in `sc-network-common`, create `ChainSync` trait there (not used yet), move a bunch of associated data structures from `sc-network-sync`
      
      * Switch from concrete implementation to `ChainSync` trait from `sc-network-common`
      
      * Introduce `OpaqueStateRequest`/`OpaqueStateResponse` to remove generics from `StateSync` trait
      
      * Introduce `OpaqueBlockRequest`/`OpaqueBlockResponse`, make `scheme` module of `sc-network-sync` private
      
      * Surface `sc-network-sync` into `sc-service` and make `sc-network` not depend on it anymore
      
      * Remove now unnecessary dependency from `sc-network`
      
      * Replace crate links with just text since dependencies are gone now
      
      * Remove `warp_sync` re-export from `sc-network-common`
      
      * Update copyright in network-related files
      
      * Address review comments about documentation
      
      * Apply review suggestion
      
      * Rename `extra_requests` module to `metrics`
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      5896072b
  20. Jun 20, 2022
  21. Jun 14, 2022
  22. May 21, 2022
  23. May 17, 2022
  24. May 11, 2022
  25. May 10, 2022
    • David's avatar
      jsonrpsee integration (#8783) · 29c0c6a4
      David authored
      
      
      * Add tokio
      
      * No need to map CallError to CallError
      
      * jsonrpsee proc macros (#9673)
      
      * port error types to `JsonRpseeError`
      
      * migrate chain module to proc macro api
      
      * make it compile with proc macros
      
      * update branch
      
      * update branch
      
      * update to jsonrpsee master
      
      * port system rpc
      
      * port state rpc
      
      * port childstate & offchain
      
      * frame system rpc
      
      * frame transaction payment
      
      * bring back CORS hack to work with polkadot UI
      
      * port babe rpc
      
      * port manual seal rpc
      
      * port frame mmr rpc
      
      * port frame contracts rpc
      
      * port finality grandpa rpc
      
      * port sync state rpc
      
      * resolve a few TODO + no jsonrpc deps
      
      * Update bin/node/rpc-client/src/main.rs
      
      * Update bin/node/rpc-client/src/main.rs
      
      * Update bin/node/rpc-client/src/main.rs
      
      * Update bin/node/rpc-client/src/main.rs
      
      * Port over system_ rpc tests
      
      * Make it compile
      
      * Use prost 0.8
      
      * Use prost 0.8
      
      * Make it compile
      
      * Ignore more failing tests
      
      * Comment out WIP tests
      
      * fix nit in frame system api
      
      * Update lockfile
      
      * No more juggling tokio versions
      
      * No more wait_for_stop ?
      
      * Remove browser-testing
      
      * Arguments must be arrays
      
      * Use same argument names
      
      * Resolve todo: no wait_for_stop for WS server
      Add todo: is parse_rpc_result used?
      Cleanup imports
      
      * fmt
      
      * log
      
      * One test passes
      
      * update jsonrpsee
      
      * update jsonrpsee
      
      * cleanup rpc-servers crate
      
      * jsonrpsee: add host and origin filtering (#9787)
      
      * add access control in the jsonrpsee servers
      
      * use master
      
      * fix nits
      
      * rpc runtime_version safe
      
      * fix nits
      
      * fix grumbles
      
      * remove unused files
      
      * resolve some todos
      
      * jsonrpsee more cleanup (#9803)
      
      * more cleanup
      
      * resolve TODOs
      
      * fix some unwraps
      
      * remove type hints
      
      * update jsonrpsee
      
      * downgrade zeroize
      
      * pin jsonrpsee rev
      
      * remove unwrap nit
      
      * Comment out more tests that aren't ported
      
      * Comment out more tests
      
      * Fix tests after merge
      
      * Subscription test
      
      * Invalid nonce test
      
      * Pending exts
      
      * WIP removeExtrinsic test
      
      * Test remove_extrinsic
      
      * Make state test: should_return_storage work
      
      * Uncomment/fix the other non-subscription related state tests
      
      * test: author_insertKey
      
      * test: author_rotateKeys
      
      * Get rest of state tests passing
      
      * asyncify a little more
      
      * Add todo to note #msg change
      
      * Crashing test for has_session_keys
      
      * Fix error conversion to avoid stack overflows
      Port author_hasSessionKeys test
      fmt
      
      * test author_hasKey
      
      * Add two missing tests
      Add a check on the return type
      Add todos for James's concerns
      
      * RPC tests for state, author and system (#9859)
      
      * Fix test runner
      
      * Impl Default for SubscriptionTaskExecutor
      
      * Keep the minimul amount of code needed to compile tests
      
      * Re-instate `RpcSession` (for now)
      
      * cleanup
      
      * Port over RPC tests
      
      * Add tokio
      
      * No need to map CallError to CallError
      
      * Port over system_ rpc tests
      
      * Make it compile
      
      * Use prost 0.8
      
      * Use prost 0.8
      
      * Make it compile
      
      * Ignore more failing tests
      
      * Comment out WIP tests
      
      * Update lockfile
      
      * No more juggling tokio versions
      
      * No more wait_for_stop ?
      
      * Remove browser-testing
      
      * Arguments must be arrays
      
      * Use same argument names
      
      * Resolve todo: no wait_for_stop for WS server
      Add todo: is parse_rpc_result used?
      Cleanup imports
      
      * fmt
      
      * log
      
      * One test passes
      
      * Comment out more tests that aren't ported
      
      * Comment out more tests
      
      * Fix tests after merge
      
      * Subscription test
      
      * Invalid nonce test
      
      * Pending exts
      
      * WIP removeExtrinsic test
      
      * Test remove_extrinsic
      
      * Make state test: should_return_storage work
      
      * Uncomment/fix the other non-subscription related state tests
      
      * test: author_insertKey
      
      * test: author_rotateKeys
      
      * Get rest of state tests passing
      
      * asyncify a little more
      
      * Add todo to note #msg change
      
      * Crashing test for has_session_keys
      
      * Fix error conversion to avoid stack overflows
      Port author_hasSessionKeys test
      fmt
      
      * test author_hasKey
      
      * Add two missing tests
      Add a check on the return type
      Add todos for James's concerns
      
      * offchain rpc tests
      
      * Address todos
      
      * fmt
      
      Co-authored-by: default avatarJames Wilson <[email protected]>
      
      * fix drop in state test
      
      * update jsonrpsee
      
      * fix ignored system test
      
      * fix chain tests
      
      * remove some boiler plate
      
      * Port BEEFY RPC (#9883)
      
      * Merge master
      
      * Port beefy RPC (ty @niklas!)
      
      * trivial changes left over from merge
      
      * Remove unused code
      
      * Update jsonrpsee
      
      * fix build
      
      * make tests compile again
      
      * beefy update jsonrpsee
      
      * fix: respect rpc methods policy
      
      * update cargo.lock
      
      * update jsonrpsee
      
      * update jsonrpsee
      
      * downgrade error logs
      
      * update jsonrpsee
      
      * Fix typo
      
      * remove unused file
      
      * Better name
      
      * Port Babe RPC tests
      
      * Put docs back
      
      * Resolve todo
      
      * Port tests for System RPCs
      
      * Resolve todo
      
      * fix build
      
      * Updated jsonrpsee to current master
      
      * fix: port finality grandpa rpc tests
      
      * Move .into() outside of the match
      
      * more review grumbles
      
      * jsonrpsee: add `rpc handlers` back (#10245)
      
      * add back RpcHandlers
      
      * cargo fmt
      
      * fix docs
      
      * fix grumble: remove needless alloc
      
      * resolve TODO
      
      * fmt
      
      * Fix typo
      
      * grumble: Use constants based on BASE_ERROR
      
      * grumble: DRY whitelisted listening addresses
      grumble: s/JSONRPC/JSON-RPC/
      
      * cleanup
      
      * grumbles: Making readers aware of the possibility of gaps
      
      * review grumbles
      
      * grumbles
      
      * remove notes from niklasad1
      
      * Update `jsonrpsee`
      
      * fix: jsonrpsee features
      
      * jsonrpsee: fallback to random port in case the specified port failed (#10304)
      
      * jsonrpsee: fallback to random port
      
      * better comment
      
      * Update client/rpc-servers/src/lib.rs
      
      Co-authored-by: default avatarMaciej Hirsz <[email protected]>
      
      * Update client/rpc-servers/src/lib.rs
      
      Co-authored-by: default avatarMaciej Hirsz <[email protected]>
      
      * address grumbles
      
      * cargo fmt
      
      * addrs already slice
      
      Co-authored-by: default avatarMaciej Hirsz <[email protected]>
      
      * Update jsonrpsee to 092081a0a2b8904c6ebd2cd99e16c7bc13ffc3ae
      
      * lockfile
      
      * update jsonrpsee
      
      * fix warning
      
      * Don't fetch jsonrpsee from crates
      
      * make tests compile again
      
      * fix rpc tests
      
      * remove unused deps
      
      * update tokio
      
      * fix rpc tests again
      
      * fix: test runner
      
      `HttpServerBuilder::builder` fails unless it's called within tokio runtime
      
      * cargo fmt
      
      * grumbles: fix subscription aliases
      
      * make clippy happy
      
      * update remaining subscriptions alias
      
      * cleanup
      
      * cleanup
      
      * fix chain subscription: less boiler plate (#10285)
      
      * fix chain subscription: less boiler plate
      
      * fix bad merge
      
      * cargo fmt
      
      * Switch to jsonrpsee 0.5
      
      * fix build
      
      * add missing features
      
      * fix nit: remove needless Box::pin
      
      * Integrate jsonrpsee metrics (#10395)
      
      * draft metrics impl
      
      * Use latest api
      
      * Add missing file
      
      * Http server metrics
      
      * cleanup
      
      * bump jsonrpsee
      
      * Remove `ServerMetrics` and use a single middleware for both connection counting (aka sessions) and call metrics.
      
      * fix build
      
      * remove needless Arc::clone
      
      * Update to jsonrpsee 0.6
      
      * lolz
      
      * fix metrics
      
      * Revert "lolz"
      
      This reverts commit eed6c6a56e78d8e307b4950f4c52a1c3a2322ba1.
      
      * fix: in-memory rpc support subscriptions
      
      * commit Cargo.lock
      
      * Update tests to 0.7
      
      * fix TODOs
      
      * ws server: generate subscriptionIDs as Strings
      
      Some libraries seems to expect the subscription IDs to be Strings, let's not break
      this in this PR.
      
      * Increase timeout
      
      * Port over tests
      
      * cleanup
      
      * Using error codes from the spec
      
      * fix clippy
      
      * cargo fmt
      
      * update jsonrpsee
      
      * fix nits
      
      * fix: rpc_query
      
      * enable custom subid gen through spawn_tasks
      
      * remove unsed deps
      
      * unify tokio deps
      
      * Revert "enable custom subid gen through spawn_tasks"
      
      This reverts commit 5c5eb70328fe39d154fdb55c56e637b4548cf470.
      
      * fix bad merge of `test-utils`
      
      * fix more nits
      
      * downgrade wasm-instrument to 0.1.0
      
      * [jsonrpsee]: enable custom RPC subscription ID generatation (#10731)
      
      * enable custom subid gen through spawn_tasks
      
      * fix nits
      
      * Update client/service/src/builder.rs
      
      Co-authored-by: default avatarDavid <[email protected]>
      
      * add Poc; needs jsonrpsee pr
      
      * update jsonrpsee
      
      * add re-exports
      
      * add docs
      
      Co-authored-by: default avatarDavid <[email protected]>
      
      * cargo fmt
      
      * fmt
      
      * port RPC-API dev
      
      * Remove unused file
      
      * fix nit: remove async trait
      
      * fix doc links
      
      * fix merge nit: remove jsonrpc deps
      
      * kill namespace on rpc apis
      
      * companion for jsonrpsee v0.10 (#11158)
      
      * companion for jsonrpsee v0.10
      
      * update versions v0.10.0
      
      * add some fixes
      
      * spelling
      
      * fix spaces
      
      Co-authored-by: default avatarNiklas Adolfsson <[email protected]>
      
      * send error before subs are closed
      
      * fix unsubscribe method names: chain
      
      * fix tests
      
      * jsonrpc server: print binded local address
      
      * grumbles: kill SubscriptionTaskExecutor
      
      * Update client/sync-state-rpc/src/lib.rs
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Update client/rpc/src/chain/chain_full.rs
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Update client/rpc/src/chain/chain_full.rs
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * sync-state-rpc: kill anyhow
      
      * no more anyhow
      
      * remove todo
      
      * jsonrpsee:  fix bad params in subscriptions. (#11251)
      
      * update jsonrpsee
      
      * fix error responses
      
      * revert error codes
      
      * dont do weird stuff in drop impl
      
      * rpc servers: remove needless clone
      
      * Remove silly constants
      
      * chore: update jsonrpsee v0.12
      
      * commit Cargo.lock
      
      * deps: downgrade git2
      
      * feat: CLI flag max subscriptions per connection
      
      * metrics: use old logging format
      
      * fix: read WS address from substrate output (#11379)
      
      Co-authored-by: default avatarNiklas Adolfsson <[email protected]>
      Co-authored-by: default avatarJames Wilson <[email protected]>
      Co-authored-by: default avatarMaciej Hirsz <[email protected]>
      Co-authored-by: default avatarMaciej Hirsz <[email protected]>
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      29c0c6a4
  26. May 04, 2022
    • Shawn Tabrizi's avatar
      Basic TOML Lint (#11348) · 7d520234
      Shawn Tabrizi authored
      * basic lint
      
      * lint ordering
      7d520234
    • Web3 Smith's avatar
      Update MMR Runtime API with functionality to generate MMR proof for a series... · fd45676d
      Web3 Smith authored
      
      Update MMR Runtime API with functionality to generate MMR proof for a series of leaf indices  (#10635)
      
      * updated mmr rpc api with functions for batch generation of proof
      
      * update code comments
      
      * fix build errors
      
      * added tests to mmr-rpc
      
      * add tests to pallet-mmr
      
      * update comments
      
      * minor comment fix
      
      * remove unused variables
      
      * fix rust doc errors
      
      * refactor mmr runtime api
      
      * fix tests
      
      * minor fix
      
      * minor fix
      
      * fix node-runtime
      
      * revert to initial api
      
      * impl from proof fot batchproof
      
      * minor fix
      
      * minor fix
      
      * use explicit functions to convert btw batch proof and single proof
      
      * minor fix
      
      * add new variant to mmr error
      
      * fmt
      
      * update conversion to single leaf proof
      
      * fix style nit
      
      Co-authored-by: default avatarAdrian Catangiu <[email protected]>
      fd45676d
    • Adrian Catangiu's avatar
      BEEFY voter bugfixes (#11335) · 1e2424ec
      Adrian Catangiu authored
      
      
      * beefy: gadget should always use current validator set
      
      The gadget/client-voter was using previous' session validator set
      to sign the 1st block in the new session (to have chained validator
      set handoffs).
      
      This is not necessary because:
      1. BEEFY piggy-backs on GRANDPA and only works on canonical chain,
         so it need not concern itself with the validity of the block header
         (which contains digest with the new session's validator set). It
         can safely assume header is valid and simply use new validator set.
      2. The BEEFY payload itself already contains a merkle root for the
         next validator set keys. So at the BEEFY-payload layer we already
         have a validated/trusted hand-off of authority.
      
      Signed-off-by: default avataracatangiu <[email protected]>
      
      * beefy: buffer votes for not yet finalized blocks
      
      Signed-off-by: default avataracatangiu <[email protected]>
      
      * beefy: add buffered votes regression test
      1e2424ec
  27. Apr 30, 2022
  28. Apr 28, 2022
  29. Apr 21, 2022
  30. Apr 13, 2022
    • Adrian Catangiu's avatar
      Expose MMR root through runtime API - use it in BEEFY client (#11183) · 80ce5c57
      Adrian Catangiu authored
      * beefy-gadget: allow custom runtime api provider
      
      * beefy-gadget: use mock runtime api in tests
      
      * pallet-mmr: expose mmr root from state through runtime API
      
      * beefy-gadget: get mmr root from runtime state
      
      * pallet-beefy-mmr: remove MmrRoot from header digests
      
      * frame/mmr: move mmr primitives out of frame
      
      * frame/mmr: completely move primitives out of frame
      
      * address review comments
      
      * beefy-mmr: bring back mmr root from header digest
      
      * clippy fixes for rustc 1.60
      
      * address review comments
      80ce5c57
  31. Apr 03, 2022
  32. Mar 25, 2022
    • Adrian Catangiu's avatar
      Implement Lean BEEFY (#10882) · 498e8c18
      Adrian Catangiu authored
      
      
      Simplified BEEFY worker logic based on the invariant that GRANDPA
      will always finalize 1st block of each new session, meaning BEEFY
      worker is guaranteed to receive finality notification for the
      BEEFY mandatory blocks.
      
      Under these conditions the current design is as follows:
      - session changes are detected based on BEEFY Digest present in
        BEEFY mandatory blocks,
      - on each new session new `Rounds` of voting is created, with old
        rounds being dropped (for gossip rounds, last 3 are still alive
        so votes are still being gossiped),
      - after processing finality for a block, the worker votes if
        a new voting target has become available as a result of said
        block finality processing,
      - incoming votes as well as self-created votes are processed
        and signed commitments are created for completed BEEFY voting
        rounds,
      - the worker votes if a new voting target becomes available
        once a round successfully completes.
      
      On worker startup, the current validator set is retrieved from
      the BEEFY pallet. If it is the genesis validator set, worker
      starts voting right away considering Block #1 as session start.
      
      Otherwise (not genesis), the worker will vote starting with
      mandatory block of the next session.
      
      Later on when we add the BEEFY initial-sync (catch-up) logic,
      the worker will sync all past mandatory blocks Signed Commitments
      and will be able to start voting right away.
      
      BEEFY mandatory block is the block with header containing the BEEFY
      `AuthoritiesChange` Digest, this block is guaranteed to be finalized
      by GRANDPA.
      
      This session-boundary block is signed by the ending-session's
      validator set. Next blocks will be signed by the new session's
      validator set. This behavior is consistent with what GRANDPA does
      as well.
      
      Also drop the limit N on active gossip rounds. In an adversarial
      network, a bad actor could create and gossip N invalid votes with
      round numbers larger than the current correct round number. This
      would lead to votes for correct rounds to no longer be gossiped.
      
      Add unit-tests for all components, including full voter consensus
      tests.
      
      Signed-off-by: default avatarAdrian Catangiu <[email protected]>
      Co-authored-by: default avatarTomasz Drwięga <[email protected]>
      Co-authored-by: David Salami <Wizdave97>
      498e8c18
  33. Mar 18, 2022
  34. Mar 04, 2022