Skip to content
  1. May 27, 2024
  2. May 20, 2024
  3. May 17, 2024
  4. May 16, 2024
  5. May 15, 2024
  6. May 13, 2024
  7. May 06, 2024
  8. May 02, 2024
  9. Apr 29, 2024
  10. Apr 26, 2024
  11. Apr 25, 2024
    • Svyatoslav Nikolsky's avatar
      Add option to only relay free headers to substrate-relay (#2884) · 2573d65e
      Svyatoslav Nikolsky authored
      * added FreeHeadersInterval to pallet-bridge-grandpa configuration
      
      * added is_free_execution_expected parameter to the submit_finality_proof_ex + check it from the transaction extension
      
      * move transaction extensions to a separate folder
      
      * move grandpa call result check from RefundTransactionExtensionAdapter to RefundBridgedGrandpaMessages
      
      * added RefundBridgedMessages to refund and bump priority of standalone messages transactions
      
      * check_obsolete_submit_finality_proof may now boost transaction priority (this is not used yet - see next commit)
      
      * added CheckAndBoostBridgeGrandpaTransactions that checks whether bridge GRANDPA transactions are obsolete and, if not, it may apply priority boost to
      
      * relayer may be slashed to explicit account
      
      * slash registered relayer if it has submitted failed GRANDPA transaction
      
      * allow accepting some parachain headers for free
      
      * added FreeParachainUpdateForFreeRelayHeader
      
      * fix benchmarks compilation
      
      * added WeightInfoExt for pallet-bridge-grandpa to include extra wight coming from CheckAndBoostBridgeGrandpaTransactions
      
      * added free_headers_interval to the (runtime) FinalityApi of the chain
      
      * added --only-free-headers CLI parameter (not used yet) to finality and complex relay
      
      * actually use HeadersToRelay::Free in finality-relay
      
      * actually support only-free-headers mode in parachains relay
      
      * removed inactual comment (free_source_headers_interval is cached at relay level)
      
      * added comment re free-headers-only support in on-demand parachains relay
      
      * added --only-free-headers support to standalone parachains relay
      
      * fixed dependency in runtime-codegen
      
      * update RBH and WBH runtimes + ask for free execution if we are running in HeadersToRelay::Free mode
      
      * add missing standalone RBH<>WBH finality relay
      
      * also refund for submitting initial parachain head
      
      * make FreeHeadersRemaining an Option => we know that when we are outside of tx body, it is `None` and otherwise it is `Some`
      
      * add some traces to relay
      
      * add more traces to pallets
      
      * check for reorgs in signed ext for parachains module
      
      * fix benchmarks compilation
      
      * free interval instead of fixed free headers
      
      * updated relays for new free headers criteria
      
      * fixed trace
      
      * CannotAcceptMoreFreeHeaders -> FreeHeadersLimitExceded
      
      * additional_call_result_check -> check_call_result_ex
      
      * is_granda_call_succeeded -> is_grandpa_call_successful
      
      * move tx priority boost from check_obsolete_submit_finality_proof to extension
      
      * lost changes
      
      * dec counter when importing new para header
      
      * limit maximal "free" parachain head size
      
      * added grandpa_and_parachain_pallets_share_free_headers_counter test
      
      * with free intervals (instead of fixed free headers) we need to check `improved_by` from extension code
      
      * fix test name
      
      * added CheckAndBoostBridgeParachainsTransactions to boost parachain transactions priority
      
      * check parachain id in CheckAndBoostBridgeParachainsTransactions
      
      * use submit_parachain_head_call_ex in tests
      
      * removed commented code
      
      * changed condition for consistency
      
      * include overweight from runtime signed extensions into submit_parachain_heads call weight
      
      * fixed comment
      
      * removed obsolete code comment
      
      * added important comment + test
      
      * some fixes
      
      * fix no-std compile
      
      * again fix lost change
      
      * use submit_parachain_heads_ex for Rococo<>Westend bridge
      
      * fix for mandatory + interval check in ext
      
      * deleted moved files (merge conflict)
      
      * update polkadot-sdk refs + fix compilation
      
      * removed another moved file
      
      * bump chain versions
      
      * bump relayer version
      
      * lock up
      v1.5.0
      2573d65e
  12. Apr 22, 2024
  13. Apr 20, 2024
  14. Apr 19, 2024
  15. Apr 18, 2024
  16. Apr 15, 2024
  17. Apr 11, 2024
  18. Apr 10, 2024
  19. Apr 09, 2024
    • Serban Iorga's avatar
      Backport changes from polakdot-sdk (#2920) · cfe1e7de
      Serban Iorga authored
      * Migrate fee payment from `Currency` to `fungible` (#2292)
      
      Part of https://github.com/paritytech/polkadot-sdk/issues/226
      Related https://github.com/paritytech/polkadot-sdk/issues/1833
      
      - Deprecate `CurrencyAdapter` and introduce `FungibleAdapter`
      - Deprecate `ToStakingPot` and replace usage with `ResolveTo`
      - Required creating a new `StakingPotAccountId` struct that implements
      `TypedGet` for the staking pot account ID
      - Update parachain common utils `DealWithFees`, `ToAuthor` and
      `AssetsToBlockAuthor` implementations to use `fungible`
      - Update runtime XCM Weight Traders to use `ResolveTo` instead of
      `ToStakingPot`
      - Update runtime Transaction Payment pallets to use `FungibleAdapter`
      instead of `CurrencyAdapter`
      - [x] Blocked by https://github.com/paritytech/polkadot-sdk/pull/1296
      
      ,
      needs the `Unbalanced::decrease_balance` fix
      
      (cherry picked from commit bda4e75ac49786a7246531cf729b25c208cd38e6)
      
      * Upgrade `trie-db` from `0.28.0` to `0.29.0` (#3982)
      
      - What does this PR do?
      1. Upgrades `trie-db`'s version to the latest release. This release
      includes, among others, an implementation of `DoubleEndedIterator` for
      the `TrieDB` struct, allowing to iterate both backwards and forwards
      within the leaves of a trie.
      2. Upgrades `trie-bench` to `0.39.0` for compatibility.
      3. Upgrades `criterion` to `0.5.1` for compatibility.
      - Why are these changes needed?
      Besides keeping up with the upgrade of `trie-db`, this specifically adds
      the functionality of iterating back on the leafs of a trie, with
      `sp-trie`. In a project we're currently working on, this comes very
      handy to verify a Merkle proof that is the response to a challenge. The
      challenge is a random hash that (most likely) will not be an existing
      leaf in the trie. So the challenged user, has to provide a Merkle proof
      of the previous and next existing leafs in the trie, that surround the
      random challenged hash.
      
      Without having DoubleEnded iterators, we're forced to iterate until we
      find the first existing leaf, like so:
      ```rust
              // ************* VERIFIER (RUNTIME) *************
              // Verify proof. This generates a partial trie based on the proof and
              // checks that the root hash matches the `expected_root`.
              let (memdb, root) = proof.to_memory_db(Some(&root)).unwrap();
              let trie = TrieDBBuilder::<LayoutV1<RefHasher>>::new(&memdb, &root).build();
      
              // Print all leaf node keys and values.
              println!("\nPrinting leaf nodes of partial tree...");
              for key in trie.key_iter().unwrap() {
                  if key.is_ok() {
                      println!("Leaf node key: {:?}", key.clone().unwrap());
      
                      let val = trie.get(&key.unwrap());
      
                      if val.is_ok() {
                          println!("Leaf node value: {:?}", val.unwrap());
                      } else {
                          println!("Leaf node value: None");
                      }
                  }
              }
      
              println!("RECONSTRUCTED TRIE {:#?}", trie);
      
              // Create an iterator over the leaf nodes.
              let mut iter = trie.iter().unwrap();
      
              // First element with a value should be the previous existing leaf to the challenged hash.
              let mut prev_key = None;
              for element in &mut iter {
                  if element.is_ok() {
                      let (key, _) = element.unwrap();
                      prev_key = Some(key);
                      break;
                  }
              }
              assert!(prev_key.is_some());
      
              // Since hashes are `Vec<u8>` ordered in big-endian, we can compare them directly.
              assert!(prev_key.unwrap() <= challenge_hash.to_vec());
      
              // The next element should exist (meaning there is no other existing leaf between the
              // previous and next leaf) and it should be greater than the challenged hash.
              let next_key = iter.next().unwrap().unwrap().0;
              assert!(next_key >= challenge_hash.to_vec());
      ```
      
      With DoubleEnded iterators, we can avoid that, like this:
      ```rust
              // ************* VERIFIER (RUNTIME) *************
              // Verify proof. This generates a partial trie based on the proof and
              // checks that the root hash matches the `expected_root`.
              let (memdb, root) = proof.to_memory_db(Some(&root)).unwrap();
              let trie = TrieDBBuilder::<LayoutV1<RefHasher>>::new(&memdb, &root).build();
      
              // Print all leaf node keys and values.
              println!("\nPrinting leaf nodes of partial tree...");
              for key in trie.key_iter().unwrap() {
                  if key.is_ok() {
                      println!("Leaf node key: {:?}", key.clone().unwrap());
      
                      let val = trie.get(&key.unwrap());
      
                      if val.is_ok() {
                          println!("Leaf node value: {:?}", val.unwrap());
                      } else {
                          println!("Leaf node value: None");
                      }
                  }
              }
      
              // println!("RECONSTRUCTED TRIE {:#?}", trie);
              println!("\nChallenged key: {:?}", challenge_hash);
      
              // Create an iterator over the leaf nodes.
              let mut double_ended_iter = trie.into_double_ended_iter().unwrap();
      
              // First element with a value should be the previous existing leaf to the challenged hash.
              double_ended_iter.seek(&challenge_hash.to_vec()).unwrap();
              let next_key = double_ended_iter.next_back().unwrap().unwrap().0;
              let prev_key = double_ended_iter.next_back().unwrap().unwrap().0;
      
              // Since hashes are `Vec<u8>` ordered in big-endian, we can compare them directly.
              println!("Prev key: {:?}", prev_key);
              assert!(prev_key <= challenge_hash.to_vec());
      
              println!("Next key: {:?}", next_key);
              assert!(next_key >= challenge_hash.to_vec());
      ```
      - How were these changes implemented and what do they affect?
      All that is needed for this functionality to be exposed is changing the
      version number of `trie-db` in all the `Cargo.toml`s applicable, and
      re-exporting some additional structs from `trie-db` in `sp-trie`.
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      (cherry picked from commit 4e73c0fcd37e4e8c14aeb83b5c9e680981e16079)
      
      * Update polkadot-sdk refs
      
      * Fix Cargo.lock
      
      ---------
      
      Co-authored-by: default avatarLiam Aharon <[email protected]>
      Co-authored-by: default avatarFacundo Farall <[email protected]>
      cfe1e7de
  20. Apr 02, 2024
  21. Apr 01, 2024
    • Serban Iorga's avatar
      Address migration comments (#2910) · 8c4c99d1
      Serban Iorga authored
      * Use workspace.[authors|edition]
      
      * Add repository.workspace = true
      
      * Upgrade dependencies to the polkadot-sdk versions
      
      * Upgrade async-std version
      
      * Update jsonrpsee version
      
      * cargo update
      
      * use ci-unified image
      8c4c99d1