Skip to content
  1. Aug 05, 2021
  2. Jul 05, 2021
  3. Jun 23, 2021
  4. Jun 16, 2021
  5. Jun 12, 2021
  6. Jun 11, 2021
  7. Jun 08, 2021
    • cheme's avatar
      Compact proof. (#295) · e8b4b364
      cheme authored
      
      
      * compact, need to be made optional and look into/compress child trie
      roots/state.
      
      * proto with child trie support
      
      * Missing set_offchain_storage overload.
      
      * right name
      
      * Ignore offchain indexing in validation function.
      
      * patch trie-db
      
      * decompress from iter
      
      * use compressed proof
      
      * remove wasm blob from proof (no inject plugged yet)
      
      * change lock
      
      * update trie
      
      * change in toml
      
      * Revert "change in toml"
      
      This reverts commit e588583b79e1a64e2a54157b40968aa6b586fbbe.
      
      * use patch to branches
      
      * i
      
      * i:wq
      
      * switch branch
      
      * ii
      
      * ok, needed to patch the runtime by putting substrate patch in polkadot
      project.
      
      * test passing with this conf
      
      * actual lazy code fetch
      
      * patch issue
      
      * Code reorg
      
      * restore commented tests.
      
      * update deps.
      
      * remove polka patch
      
      * fixes
      
      * remove patch
      
      * revert cargo.lock
      
      * cargo update -p sp-trie polkadot-service
      
      * fix collator test (using parent state root).
      
      * Update pallets/parachain-system/src/validate_block/implementation.rs
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Remove encode_witness test function.
      
      * Update pallets/parachain-system/src/validate_block/implementation.rs
      
      * Fix compilation
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      e8b4b364
  8. May 26, 2021
    • Bastian Köcher's avatar
      Pov recovery for parachains (#445) · 07b3c44b
      Bastian Köcher authored
      
      
      * Start with a failing integration test & some refactorings
      
      * More work
      
      * Make it "work"
      
      * Add `NullConsensus` for the test
      
      * More refactorings
      
      * Move stuff over to its own crate
      
      * Refactorings
      
      * Integrate it into `service` and make the test working
      
      * Docs and some exit condition
      
      * Use the real import queue
      
      * Fix tests
      
      * Update client/pov-recovery/src/active_candidate_recovery.rs
      
      Co-authored-by: default avatarBernhard Schuster <[email protected]>
      
      * Fetch slot duration from the relay chain
      
      * Docs
      
      * Fixes
      
      Co-authored-by: default avatarBernhard Schuster <[email protected]>
      07b3c44b
  9. May 17, 2021
  10. May 10, 2021
    • Bastian Köcher's avatar
      Aura consensus for parachains (#371) · 8accc88e
      Bastian Köcher authored
      
      
      * Update polkadot
      
      * Migrate all uses of MQC heads to merkle proofs
      
      * Mass rename `relay_parent_storage_root`
      
      * Restore parachain-system tests
      
      * Update polkadot and libp2p swarm for testing
      
      * Collapse match into an if let
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Start with something
      
      * Update Substrate & Polkadot
      
      * Start to make it compile
      
      * Make it compile
      
      * Begin with something
      
      * Yep
      
      * I'm a hacker
      
      * Bring back the builder
      
      * Make it work in some way
      
      * Compile
      
      * Parachains use their own "slot"
      
      * Adds cumulus-pallet-aura
      
      * Wrap AuRa import queue to disable equivocation checking by default
      
      * Pass slot duration
      
      * Check the seal when validating a block
      
      * Adds missing file
      
      * Try to make the seal working
      
      * Fix it
      
      * Some fixes
      
      * Bring in the latest features to cleanup the code
      
      * Update and make it compile
      
      * Improve the import
      
      * Start fixing
      
      * More work
      
      * Fix fix fix
      
      * Make everything compile
      
      * Small cleanups
      
      * Rename and more docs
      
      * Docs
      
      * Fixes fixes fixes
      
      * Update rococo-parachains/src/chain_spec.rs
      
      * Update client/consensus/aura/src/lib.rs
      
      Co-authored-by: default avatarAndré Silva <[email protected]>
      
      * Update client/consensus/aura/src/lib.rs
      
      Co-authored-by: default avatarAndré Silva <[email protected]>
      
      * Update primitives/parachain-inherent/Cargo.toml
      
      Co-authored-by: default avatarAndré Silva <[email protected]>
      
      * Update primitives/parachain-inherent/Cargo.toml
      
      * Update primitives/parachain-inherent/Cargo.toml
      
      * Update primitives/parachain-inherent/Cargo.toml
      
      Co-authored-by: default avatarSergei Shulepov <[email protected]>
      Co-authored-by: default avatarAndré Silva <[email protected]>
      8accc88e
  11. May 02, 2021
  12. Apr 14, 2021
    • Gavin Wood's avatar
      XCM revamp & Ping pallet (#391) · 86f9a991
      Gavin Wood authored
      
      
      * Add spambot
      
      * Fixes
      
      * Add some extra functions to spambot, bump version
      
      * Lock..
      
      * Aggregate HRMP (XCMP/HMP) messages. Payloads for spambot.
      
      * Fix tests, bump Polkadot.
      
      * Fix HMP tests
      
      * Rename Hrmp -> Xcmp for handler/sender
      
      * Use master branch
      
      * Test Xcm message passing & rename away from HMP
      
      * Docs
      
      * Introduce fee payment mechanics into XCM.
      
      * Rename spambot -> ping
      
      * Lock
      
      * XCMP message dispatch system reimagining
      
      - Moved most of the logic into xcm-handler pallet
      - Altered the outgoing XCMP API from push to pull
      - Changed underlying outgoing queue data structures to avoid multi-page read/writes
      - Introduced queuing for incoming messages
      - Introduced signal messages as a flow-control sub-stream
      - Introduced flow-control with basic threshold back-pressure
      - Introduced overall weight limitation on messages executed
      - Additonal alterations to XCM APIs for the new system
      
      * Should process any remaining XCM messages when we're not doing anything else.
      
      * Update API usage and preparation for the big build.
      
      * Some build fixes
      
      * Build fixes
      
      * xcm-handler builds
      
      * Fix warnings
      
      * Docs
      
      * Parachains system builds
      
      * Parachain runtime building
      
      * Fix build
      
      * Introduce transfer_asset specialisation.
      
      * Fixes
      
      * Two-stage upgrade for parachains.
      
      * Fixes
      
      * Fixes
      
      * Updates for message sending.
      
      * Repotting/renaming. Add primitives/utility.
      
      * Remove real-overseer and bump refs
      
      * Configure & document Rococo XCM runtime.
      
      * Add shell runtime, some companion changes for #8589
      
      * Bumps & fixes
      
      * Fix test
      
      * Build fix
      
      * Update pallets/xcmp-queue/src/lib.rs
      
      Co-authored-by: default avatarAmar Singh <[email protected]>
      
      * Make tests compile
      
      * Apply suggestions from code review
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * remove unused
      
      * remove unused event stuff
      
      * Adds proper validation-worker to make integration tests work
      
      * Apply suggestions from code review
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Apply suggestions from code review
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * import saturating
      
      * remove panic test
      
      Co-authored-by: default avatarRobert Habermeier <[email protected]>
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      Co-authored-by: default avatarAmar Singh <[email protected]>
      Co-authored-by: default avatarShawn Tabrizi <[email protected]>
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      86f9a991
  13. Mar 03, 2021
  14. Feb 27, 2021
    • Bastian Köcher's avatar
      Change the way we store, handle and validate the validation data (#342) · d6bc185e
      Bastian Köcher authored
      Currently validation data is shared by using a well known key between
      the parachain system pallet and the validate block implementation. This
      pr changes this by passing the parachain system directly to the validate
      block implementation to make use of it. Besides that, we also store the
      validation params in some thread local variable to make it inspectable
      by parachain system. This moves the validation of validation data and
      validation params to the parachain system pallet directly, instead of
      having this hidden inside the validate block implementation.
      
      Fixes: https://github.com/paritytech/cumulus/issues/217
      d6bc185e
  15. Feb 11, 2021
  16. Feb 10, 2021
    • Bastian Köcher's avatar
      The great refactor (#325) · 119e0859
      Bastian Köcher authored
      * Move pallets to pallets folder and rename them
      
      * Move genesis file to service
      
      * Rename primitives to primitives-core
      
      * Delete cumulus-runtime
      
      * Move stuff to client folder and rename
      119e0859
  17. Feb 02, 2021
    • Sergey Pepyakin's avatar
      MQC authorization (#308) · 274b3f61
      Sergey Pepyakin authored
      
      
      * MQC auth
      
      Update polkadot
      
      WIP
      
      * Update polkadot
      
      * Silly syntax errors
      
      * Fix typo
      
      * Leave some comments and docs
      
      * Apply suggestions from code review
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Introduce the MessageQueueChain structure
      
      * Move the HRMP channel relevance check below
      
      * Fix the `receive_hrmp_after_pause` test
      
      * ValidationData is passed by reference
      
      * Replace "to cumulus" with "to the collator"
      
      * Update the test so that they are same as in polkadot
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      274b3f61
  18. Jan 29, 2021
  19. Jan 21, 2021
    • Sergey Pepyakin's avatar
      parachain-system (#296) · 615ac5fe
      Sergey Pepyakin authored
      * rename parachain-{upgrade -> system}
      
      * Merge message-broker into parachain-system
      
      * Remove message-broker and clean up
      
      * Update docs
      
      * Test upward messages sending
      
      And also update the relay-sproof-builder so that it allows to set the
      relay dispatch queue size for the given parachain.
      
      * Test horizontal message sending
      
      * Remove old inherent definitions
      615ac5fe
  20. Jan 19, 2021
  21. Jan 14, 2021
  22. Jan 13, 2021
    • Sergey Pepyakin's avatar
      Inform the PVF with the latest relevant relay chain state (#279) · b424d0f5
      Sergey Pepyakin authored
      * Update polkadot
      
      * Extend cumulus primitives with some relay chain exports
      
      Follow https://github.com/paritytech/polkadot/pull/2194
      
       to see the
      polkadot PR
      
      * collator: collect the state proof
      
      This commit changes cumulus-collator so that it takes the relay chain
      state at the relay parent and creates a storage proof that contains all
      the required data for PVF.
      
      * parachain-upgrade: use the proofs instead
      
      This change is needed to make cumulus logic to not longer depend on the
      transient validation data. As part of this change, in order to preserve
      the current behavior `code_upgrade_allowed` now is computed on the
      parachain side, rather than provided by polkadot.
      
      Turned out that this requires to know the self parachain id so it was
      added where needed.
      
      * message-broker: use relay state to track limits
      
      this should make sending messages safe from accidentally running over
      the relay chain limits that were previously unknown.
      
      * Update polkadot
      
      So that `relay_storage_root` is available through `ValidationParams`
      
      * Check `relay_storage_root` matches expected
      
      Check that `relay_storage_root` submitted by the collator matches the
      one that we receive in `validate_block` through `ValidationParams`
      
      * Add a missing check for `dmq_mqc_head` while we are at it
      
      * Update polkadot
      
      * Fix tests that use the relay storage root
      
      * Apply suggestions from code review
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Update message-broker/src/lib.rs
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Remove unneeded (&_)
      
      * Fix unwraps
      
      * Polish basti's suggestion
      
      * Fix merge
      
      * Bring back the System::can_set_code check
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      b424d0f5
  23. Dec 21, 2020
  24. Dec 17, 2020
    • Shawn Tabrizi's avatar
      Add XCM Handler (#267) · afc50e8a
      Shawn Tabrizi authored
      * initial mock
      
      * integrate xcm-handler into runtime
      
      * expose xcm send error
      
      * oops
      
      * better comment
      afc50e8a
  25. Dec 16, 2020
  26. Dec 15, 2020
    • Sergey Pepyakin's avatar
      Integrate HRMP (#258) · c84c9b6b
      Sergey Pepyakin authored
      
      
      * HRMP message ingestion
      
      * Plumb hrmp_watermark to build_collation
      
      * Plumb hrmp_watermark to ValidationResult
      
      * Plumb hrmp outbound messages
      
      * Implement message-broker part of HRMP
      
      * Kill UPWARD_MESSAGES as well
      
      Otherwise, they will get resent each block
      
      * Add sudo versions for easier testing
      
      * Remove the xcmp module
      
      Not useful for the moment
      
      * Doc for HRMP message handler
      
      * Estimate the weight upper bound for on_finalize
      
      * Remove a redundant type annotation
      
      * fix spelling of a method
      
      * Apply suggestions from code review
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Deabbreviate dmp and hrmp in the message ingestion type
      
      * Don't use binary_search since it's broken by a following rotate
      
      Instead use the linear search. We can afford linear search here since
      due to limited scalability of HRMP we can only have at most a couple of
      dozens of channels.
      
      * Fix the watermark
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      c84c9b6b
  27. Nov 22, 2020
    • Bastian Köcher's avatar
      Wait for relay chain block import before validatiing a block announcement (#227) · e5b4e8ca
      Bastian Köcher authored
      * Start with something
      
      * Whatever
      
      * Update
      
      * MOARE
      
      * Make cumulus-network compile and tests work
      
      * Update more and fixes
      
      * More stuff
      
      * More fixes
      
      * Make collator build
      
      * Make test almost work
      
      * Remove contracts runtime
      
      * More test work
      
      * Make service compile
      
      * Fix test-service
      
      * Fix test client
      
      * More fixes
      
      * Fix collator test
      
      * Fix network tests (again)
      
      * Make everything compile, finally
      
      * Fix tests
      
      * Write test that should fail
      
      * Add `WaitOnRelayChainBlock`
      
      * Update git versions
      
      * Make it all work
      
      * Update logging
      
      * Switch to provided method for pushing an extrinsic
      
      * Try to debug CI
      
      * Aaaa
      
      * Only use Debug
      
      * Updates
      
      * Use native execution to hopefully make CI happy...
      e5b4e8ca
  28. Nov 20, 2020
  29. Nov 16, 2020
  30. Nov 11, 2020
  31. Nov 09, 2020
  32. Nov 08, 2020
    • Bastian Köcher's avatar
      Update Cumulus for Parachains V1 (#224) · 28338431
      Bastian Köcher authored
      
      
      * Start with something
      
      * Whatever
      
      * Update
      
      * MOARE
      
      * Make cumulus-network compile and tests work
      
      * Update more and fixes
      
      * More stuff
      
      * More fixes
      
      * Make collator build
      
      * Make test almost work
      
      * Remove contracts runtime
      
      * More test work
      
      * Make service compile
      
      * Fix test-service
      
      * Fix test client
      
      * More fixes
      
      * Fix collator test
      
      * Fix network tests (again)
      
      * Make everything compile, finally
      
      * Fix tests
      
      * Update to latest masters
      
      * Remove ignore
      
      * Switch to different branch in polkadot for now
      
      * Update reference
      
      * Make it compile with latest changes
      
      * Update collator/src/lib.rs
      
      Co-authored-by: default avatarRobert Habermeier <[email protected]>
      
      * Update to latest upstream
      
      * Update to latest master
      
      * Fix test
      
      Co-authored-by: default avatarRobert Habermeier <[email protected]>
      28338431
  33. Oct 07, 2020
    • Cecile Tonglet's avatar
      Uniformize tests (#220) · 7b4ea8d8
      Cecile Tonglet authored
      * Initial commit
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * Copy runtime module from rococo
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * Also copy dependencies pallets and primitives
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * test-service
      
      * Move integration test
      
      * CLEANUP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * Not sure what went wrong...
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * CLEANUP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * fmt
      
      * CLEANUP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * CLEANUP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * Remove pallet contracts (not used)
      
      * Remove pallet parachain-info and token-dealer (not used)
      
      * Sort dependencies alphabetically
      
      * CLEANUP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * CumulusTestNode for testing
      
      * Speed up block generation
      
      * Fix improper shutdown
      
      * rustfmt
      
      * runtime: replace const by storage
      
      * Fix for previous commit
      
      * Remove some generics
      
      * Move generate_genesis_state to cumulus-primitives
      
      * fmt
      
      * Remove message_example
      
      * fixup! Remove message_example
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * Half the solution to previous commit :(
      
      * Revert "Fix for previous commit"
      
      This reverts commit 60010bab6797487093ac8c790b3a536f7ca0895b.
      
      * Revert "runtime: replace const by storage"
      
      This reverts commit c64b3a46f0325a98922015e0cbf3570e2e431774.
      
      Not working for some reason...
      
      * Use helper
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * Remove test-primitives
      
      * Revert "Half the solution to previous commit :("
      
      This reverts commit 9a8f89f9f06252198e6405057043c6b313f1aea4.
      
      * Revert "Revert "Half the solution to previous commit :(""
      
      This reverts commit 6a93f0f09d74ccdc3738dd78a777c483427c03ce.
      
      * Test with some extra extrinsics
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * CLEANUP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * WIP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * CLEANUP
      
      Forked at: 56753b77
      Parent branch: origin/master
      
      * Remove message broker
      7b4ea8d8
  34. Aug 04, 2020
    • Bastian Köcher's avatar
      Add parachains for rococo (#144) · 23c1954c
      Bastian Köcher authored
      * Add parachains for rococo
      
      * Fix chain specs
      
      * Update to revert log rotation
      
      * Support selecting the chain in `export-genesis-state`
      
      * Add subcommand for exporting the genesis wasm of a Parachain
      
      * Update stuff
      
      * Fix `export-genesis-wasm`
      
      * Update the polkadot ref
      
      * Add bootNodes address
      
      * Add bootNodes address - track
      
      * Add bootNodes address - trick
      
      * Fix incorrect peer id (trick)
      
      * Fixes https://github.com/paritytech/cumulus/issues/157
      
      
      
      * Update chainspecs
      
      * Update specs again
      
      * Set correct sudo account
      
      * Update properties
      
      * Update readme
      
      * Update `Cargo.lock`
      
      * Switch to rococo-branch
      
      Co-authored-by: default avatarEvaldo <[email protected]>
      Co-authored-by: default avatarCecile Tonglet <[email protected]>
      23c1954c
  35. Jul 29, 2020
  36. Jun 18, 2020
    • Bastian Köcher's avatar
      Implement basic upward & downward messages (#118) · c9aaddf6
      Bastian Köcher authored
      * Start by replacing branch names and set `DownwardMessage`
      
      * Add the upward-message crate
      
      * Add Kusama & Polkadot
      
      * More work on getting the upward messages working
      
      * Fix build
      
      * Begin to integrate it into the test Parachain
      
      * Update
      
      * Make everything compile again
      
      * Switch to westend and print parachain account on startup
      
      * Use MultiSignature etc
      
      * Fix validate block
      
      * Some downward messages work
      
      * Update git reference
      
      * More downward messages integration
      
      * Update test runtime for downward messages
      
      * Enable downward message handler and withdraw send tokens
      
      * Add some docs
      
      * Begin to implement simple XCMP
      
      * More work
      
      * Fixes and make parachain id configurable
      
      * Make parachain ID be part of the genesis
      
      * Finishing the XCMP message demo
      
      * Update and fixes tests
      
      * Update branch
      c9aaddf6
  37. Jun 03, 2020
  38. May 15, 2020
  39. May 05, 2020
    • Peter Goodspeed-Niklaus's avatar
      runtime upgrade (#70) · 0db3088d
      Peter Goodspeed-Niklaus authored
      * Initial commit
      
      * Update to 3e65111
      
      * Add cfg_attr ... no_std
      
      * Fix version
      
      * WIP: add really simple validate_block insert validity check
      
      * WIP: create a parachain upgrade pallet
      
      This pallet will eventually make life much easier for people attempting
      to upgrade parachains on their validator nodes, but for the moment,
      key sections remain unimplemented while dependency details are worked
      out.
      
      * Implement basic admin-auth pallet functionality.
      
      This compiles, which means it's probably mostly correct. However,
      it's pretty far from being finished. Work yet to come:
      
      - Integrate with the democracy pallet somehow to eliminate the
        requirement for the root user to initiate this process.
      - Figure out what to do in the event that the parachain blocks
        and relay chain blocks get out of sync / delayed.
      - Add testing... somehow. (What's reasonable to test?)
      
      Open questions:
      
      - Is the block number parameter in `on_initialize` the parachain
        block number, or the relay chain block number? If, as I suspect,
        it's the parachain block number, how do we deal with the fact that
        the real upgrade should happen on a very specific parachain block
        number?
      - In line 68, is it reasonable to use `if n >= apply_block`, or should
        that line require strict equality?
      - Is it reasonable to store/retrieve `CurrentBlockNumber` on every block,
        or is there a more streamlined way to pass that data between functions?
        Maybe it can be inserted into `struct Module` somehow?
      - Can we somehow parametrize ValidationUpgradeDelayBlocks by T in
        order to eliminate the `.into()` call?
      
      * use a better storage name
      
      * Add checks ensuring runtime versions increase
      
      Largely cribbed from https://github.com/paritytech/substrate/blob/a439a7aa5a9a3df2a42d9b25ea04288d3a0866e8/frame/system/src/lib.rs#L467-L494
      
      * fix tests
      
      * WIP: add tests from frame/system set_code
      
      Currently doesn't build: line 230 is the problem. Removing or
      commenting that line results in the new tests failing due to a
      missing block number. Adding it, in an attempt to fix the problem,
      fails to compile with this error:
      
      ```
         Compiling parachain-upgrade-pallet v2.0.0 (/home/coriolinus/Documents/Projects/coriolinus/parachain-upgrade-pallet)
      error[E0599]: no function or associated item named `set_block_number` found for struct `Module<tests::Test>` in the current scope
         --> src/lib.rs:230:21
          |
      47  | / decl_module! {
      48  | |     pub struct Module<T: Trait> for enum Call where origin: T::Origin {
      49  | |         // Initializing events
      50  | |         // this is needed only if you are using events in your pallet
      ...   |
      100 | |     }
      101 | | }
          | |_- function or associated item `set_block_number` not found for this
      ...
      230 |               System::set_block_number(123);
          |                       ^^^^^^^^^^^^^^^^
          |                       |
          |                       function or associated item not found in `Module<tests::Test>`
          |                       help: there is a method with a similar name: `current_block_number`
          |
          = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
      
      error: aborting due to previous error
      
      For more information about this error, try `rustc --explain E0599`.
      error: could not compile `parachain-upgrade-pallet`.
      ```
      
      That error is very weird, because the function does in fact exist:
      https://github.com/paritytech/substrate/blob/a439a7aa5a9a3df2a42d9b25ea04288d3a0866e8/frame/system/src/lib.rs#L897
      
      
      
      * cause tests to pass
      
      Turns out that in fact there was some setup required in order to
      get everything testing properly, but now we have a set of passing
      unit tests which test some of the more common error cases.
      
      * Add overlapping upgrades test
      
      This currently fails, and I don't yet know why. TODO!
      
      * Fix some logic errors
      
      - In particular, only remove the pending validation function from
        storage when it's time to apply it.
      - Don't store our own copy of the current block number.
      
      * WIP: delegate most code upgrade permissions checks
      
      They're defined in System::can_set_code, so may as well use them.
      
      Unfortunately, the tests all fail for this right now, and I don't
      yet understand why. Pushing to get immutable line number references.
      
      * fix tests after delegating runtime checks to can_set_code
      
      * WIP: events test
      
      Right now, the events struct doesn't seem to contain enough information
      to validate the particular events that we should have fired. Almost
      certainly, this is a usage error on my part.
      
      * fully initialize and finalize in event test
      
      This doesn't change the results, though.
      
      * fix events test
      
      This was complicated to figure out. For the record, testing events
      requires:
      
      - a private module which publicly exports the crate's event type
      - impl_outer_event macro to construct an enum wrapping the event
        types from the listed modules
      - system::Trait and local Trait both declare `type Event = TestEvent;`
      - (optional) group events with `System::<Test>::initialize(...)` and
        `System::<Test>::finalize()` calls.
      
      It's not entirely clear why both events show up during the initialization
      phase; my suspicion is that this is an artifact of not mocking a
      particular extrinsic, such that they end up in initialization by default.
      
      * cleanup and move crate to subdirectory
      
      this prepares us to merge this pallet into the cumulus repo
      
      * provisionally incorporate polkadot changes to hook everything together
      
      This feels like the logical next step, and compiles, at least. Still,
      there are some big TODOs remaining:
      
      - merge the polkadot PR upstream and reset the polkadot branch in
        `runtime/Cargo.toml`
      - in `runtime/src/validate_block/implementation.rs:116`, we should
        almost certainly return `Some(something)` sometime. When, precisely,
        and how to keep track of the appropriate data are all still open
        questions.
      
      * WIP: further updates to work with the polkadot implementation
      
      Hopefully we can upstream `ValidationFunctionParams` into the
      polkadot trait defs so we can just copy the struct out of
      `ValidationParams`, but no huge loss if not.
      
      This should be more or less everything required at this level.
      Next up: fix up `pallet-parachain-upgrade` so it reads from
      `VALIDATION_FUNCTION_PARAMS` to determine upgrade legality and
      upgrade block, and writes to `NEW_VALIDATION_CODE` when appropriate.
      
      * update pallet-parachain-upgrade appropriately to handle new expectations
      
      Implements the pallet side of the new flow. Basic tests appear to work.
      
      Next up:
      
      - make the "real blob" test work
      - add a bunch of additional tests of all the corners
      
      * remove test which set a real WASM blob
      
      This test didn't directly test any of the code in this pallet;
      it existed because we were just copying tests out of the substrate
      implementation. Now that we have real code of our own to test,
      (and because it's not compatible with the `BlockTests` abstraction,)
      we don't need that test anymore.
      
      Also added a `Drop` impl to `BlockTests` ensuring they get run at
      least once.
      
      * add test that storage gets manipulated as expected
      
      * get validate_block tests compiling again
      
      * Check validation function size against polkadot parameters
      
      Generate a user-handlable error message if it's too big, so that
      nothing panics later.
      
      * demonstrate that block tests run
      
      * don't actually store any magic values in parachain storage
      
      We're allowed to use it as a transport layer between validate_block
      and the parachain upgrade pallet, but actually editing it or, in
      particular, attempting to persist data there which didn't originate
      in the extrinsic, breaks things.
      
      This means that we can't keep the :code insertion check, because
      the validate_block layer doesn't know when it is legal to actually
      upgrade the parachain. However, the rest of the features survive,
      and all tests currently pass, so I'm counting it as a win.
      
      Next up: look into adding an inherent which publishes the
      ValidationFunctionParams struct to arbitrary pallets.
      
      * Add reference to polkadot_client to Collator
      
      This enables us to get the validation function parameters at
      runtime, which unblocks creating an inherent containing them.
      
      * remove unused imports
      
      * Remove VFPX; build VFP from existing data structures
      
      I almost don't want to know how long both global_validation
      and local_validation have existed in the produce_candidate
      function signature; they were precisely what I needed,
      without needing to add anything to the Collator struct at all.
      
      Oh well, at least I noticed it before putting the PR up for review.
      
      Next up: create a proper inherent definition for the
      ValidationFunctionParams.
      
      * WIP: add cumulus-validation-function-params crate
      
      Modeled on the substrate timestamp crate.
      It's not currently obvious to me why it is desirable to publish
      an entire crate for what amounts to a single const definition;
      going to ask about that.
      
      * refactor: get rid of validation-function-params crate
      
      Everything about the VFPs has been moved into a module of runtime
      
      * WIP: get VFP from inherent, when possible
      
      Doesn't compile for weird trait errors; probable next steps: just
      copy over the relevant code directly.
      
      * ensure VFPs are available during block production and validation
      
      * cleanup in preparation for review request
      
      * Copy cumulus-primitives crate from bkchr-message-broker
      
      That branch is visible as #80; this message copies the crate as of
      d4b2045573796955de4e5bf8f74b6c48b44c3bee.
      
      This isn't even a cherry-pick, because the commit which introduced
      the primitives crate also did some work which from the perspective
      of this PR is irrelevant. With any luck, by coping the crate directly,
      there won't be too many merge conflicts when the second of these
      open PRs is merged.
      
      * move mod validation_function_params to cumulus_primitives
      
      There is some very weird behavior going on with cargo check: every
      individual crate checks out fine, as verified with this invocation:
      
      for crate in $(fd Cargo.toml | xargs dirname); do
          if [ "$crate" == . ] || [[ "$crate" == *test* ]]; then continue; fi;
          name=$(toml2json "$crate/Cargo.toml" | jq -r '.package.name')
          if ! cargo check -p "$name" >/dev/null 2>/dev/null; then
              echo "failed to build $name"
          fi
      done
      
      However, `cargo check .` no longer works; it is suddenly demanding
      clang in order to build an indirect dependency. I'm not going to
      keep messing around with this anymore; it's more profitable for the
      moment to knock out the rest of the requested changes. Still, this
      behavior is weird enough that I really don't have any idea why
      it might be happening.
      
      * convert indentation to tabs
      
      * rename parachain upgrade pallet per PR review
      
      * use compact form for dependencies
      
      * remove pallet readme
      
      Move pertinent documentation into pallet's rustdoc.
      
      * Add weight data in compliance with updated substrate requirements
      
      The substrate API changed, so now we _have_ to invent some kind of
      weight data for the dispatchables. This commit does so, with the
      caveat that the numbers are pulled straight out of nowhere. Benchmarking
      remains a TODO item.
      
      * use anonymous fatal error type for brevity
      
      * Create, use a Call for setting VFPs
      
      Modeled on Timestamp; makes the ProvideInherent impl work much better.
      
      * fix pallet tests
      
      * Apply suggestions from code review
      
      Co-Authored-By: default avatarBastian Köcher <[email protected]>
      
      * fix formatting
      
      * add license header
      
      * refactor primitive inherents / keys into appropriate modules
      
      * impl From<(GlobalValidationSchedule, LocalValidationData)> for ValidationFunctionParams
      
      * extract inherent data vfp injection into a function
      
      * collapse parachain dependency into compact form
      
      * always store vfps under same storage key
      
      * fix docs
      
      * use minimum weight for VFP inherent
      
      * rename module methods for clarity
      
      * fix tests: set_code -> schedule_upgrade
      
      * Apply pending validation function at inherent creation, not init
      
      Initialization happens before inherent creation, which means that
      at the time of `on_initialize`, the VFPs for the current block
      have not yet been loaded. This is a problem, because it means that
      updates would happen one block late, every time.
      
      Moving that logic into inherent creation means that we always have
      current information to work with.
      
      * typo: default_features -> default-features
      
      * do not panic in create_inherent
      
      * revert f741cf0f2bc; don't change behavior, but use correct spelling
      
      * move block initialization logic from inherent creation into the inherent
      
      * re-disable default features
      
      It is very difficult to come up with a coherent theory of what's
      going on with these default features. Builds were all broken as of
      3eb1618. Renaming them in f741cf0 seemed to fix that behavior.
      Then they broke again locally, prompting aaee1c0. This commit
      restores the status quo as of f741cf0; with any luck, the build
      will succeed both locally and in CI.
      
      * regenerate Cargo.lock
      
      This updates several packages, but by inspection, they are all published
      crates from crates.io; by semver, this should not cause any behavioral
      changes.
      
      This also updates the lockfile format to the new format.
      
      The point of this commit is to deal with the fact that `sc-client`
      no longer exists.
      
      * fix checks given new dependencies
      
      Appropriate weight declarations have changed; this follows them,
      still using timestamp examples.
      
      Note that these weights are almost certainly wrong.
      
      * fix tests given new dependencies
      
      * add another check preventing block VFPs from contaminating validity checks
      
      * Add OnValidationFunctionParams trait so other modules can callback
      
      There isn't yet an obvious use case for other modules to get the
      validation function params from this one, but we may as well support
      it on the off chance.
      
      * Add get_validation_function_params
      
      This getter allows other modules to simply get the validation
      function parameters, if they have been updated for this block.
      Otherwise, it returns None, and they can try again later.
      
      * upgrade substrate: panic on div by 0
      
      * Apply whitespace suggestions from code review
      
      These suggestions should make no semantic difference.
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Apply semantic from code review
      
      These changes affect the semantics of the code; I'll follow up by ensuring that everything still works.
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * add documentation to ValidationFunction type
      
      * removing panicing private fn validation_function_params()
      
      * expect validation function params to be in inherent data
      
      * move OnValidationFunctionParams to primitives
      
      * resolve weird formatting
      
      * move mod validation_function_params into its own file
      
      * add license to new file
      
      Co-authored-by: default avatarRicardo Rius <[email protected]>
      Co-authored-by: default avatarRicardo Rius <[email protected]>
      Co-authored-by: default avatarJoshy Orndorff <[email protected]>
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      0db3088d
  40. Apr 21, 2020