mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-30 22:27:56 +00:00
Bridges subtree update (#2602)
## Summary This PR aligns Rococo/Westend bridge with latest Bridges repo development: - https://github.com/paritytech/parity-bridges-common/pull/2727 - https://github.com/paritytech/parity-bridges-common/pull/2728 - https://github.com/paritytech/parity-bridges-common/pull/2729 Part of: https://github.com/paritytech/parity-bridges-common/issues/2452
This commit is contained in:
@@ -82,8 +82,8 @@ impl<H: HeaderT> GrandpaJustification<H> {
|
||||
.saturating_add(BlockNumberOf::<C>::max_encoded_len().saturated_into())
|
||||
.saturating_add(HashOf::<C>::max_encoded_len().saturated_into());
|
||||
|
||||
let max_expected_votes_ancestries_size = C::REASONABLE_HEADERS_IN_JUSTIFICATON_ANCESTRY
|
||||
.saturating_mul(C::AVERAGE_HEADER_SIZE_IN_JUSTIFICATION);
|
||||
let max_expected_votes_ancestries_size =
|
||||
C::REASONABLE_HEADERS_IN_JUSTIFICATON_ANCESTRY.saturating_mul(C::AVERAGE_HEADER_SIZE);
|
||||
|
||||
// justification is round number (u64=8b), a signed GRANDPA commit and the
|
||||
// `votes_ancestries` vector
|
||||
|
||||
@@ -266,23 +266,28 @@ pub trait ChainWithGrandpa: Chain {
|
||||
/// to submitter.
|
||||
const REASONABLE_HEADERS_IN_JUSTIFICATON_ANCESTRY: u32;
|
||||
|
||||
/// Maximal size of the chain header. The header may be the header that enacts new GRANDPA
|
||||
/// authorities set (so it has large digest inside).
|
||||
/// Maximal size of the mandatory chain header. Mandatory header is the header that enacts new
|
||||
/// GRANDPA authorities set (so it has large digest inside).
|
||||
///
|
||||
/// This isn't a strict limit. The relay may submit larger headers and the pallet will accept
|
||||
/// the call. The limit is only used to compute maximal refund amount and doing calls which
|
||||
/// exceed the limit, may be costly to submitter.
|
||||
const MAX_HEADER_SIZE: u32;
|
||||
const MAX_MANDATORY_HEADER_SIZE: u32;
|
||||
|
||||
/// Average size of the chain header from justification ancestry. We don't expect to see there
|
||||
/// headers that change GRANDPA authorities set (GRANDPA will probably be able to finalize at
|
||||
/// least one additional header per session on non test chains), so this is average size of
|
||||
/// headers that aren't changing the set.
|
||||
/// Average size of the chain header. We don't expect to see there headers that change GRANDPA
|
||||
/// authorities set (GRANDPA will probably be able to finalize at least one additional header
|
||||
/// per session on non test chains), so this is average size of headers that aren't changing the
|
||||
/// set.
|
||||
///
|
||||
/// This isn't a strict limit. The relay may submit justifications with larger headers in its
|
||||
/// ancestry and the pallet will accept the call. The limit is only used to compute maximal
|
||||
/// refund amount and doing calls which exceed the limit, may be costly to submitter.
|
||||
const AVERAGE_HEADER_SIZE_IN_JUSTIFICATION: u32;
|
||||
/// This isn't a strict limit. The relay may submit justifications with larger headers and the
|
||||
/// pallet will accept the call. However, if the total size of all `submit_finality_proof`
|
||||
/// arguments exceeds the maximal size, computed using this average size, relayer will only get
|
||||
/// partial refund.
|
||||
///
|
||||
/// We expect some headers on production chains that are above this size. But they are rare and
|
||||
/// if rellayer cares about its profitability, we expect it'll select other headers for
|
||||
/// submission.
|
||||
const AVERAGE_HEADER_SIZE: u32;
|
||||
}
|
||||
|
||||
impl<T> ChainWithGrandpa for T
|
||||
@@ -295,7 +300,67 @@ where
|
||||
const MAX_AUTHORITIES_COUNT: u32 = <T::Chain as ChainWithGrandpa>::MAX_AUTHORITIES_COUNT;
|
||||
const REASONABLE_HEADERS_IN_JUSTIFICATON_ANCESTRY: u32 =
|
||||
<T::Chain as ChainWithGrandpa>::REASONABLE_HEADERS_IN_JUSTIFICATON_ANCESTRY;
|
||||
const MAX_HEADER_SIZE: u32 = <T::Chain as ChainWithGrandpa>::MAX_HEADER_SIZE;
|
||||
const AVERAGE_HEADER_SIZE_IN_JUSTIFICATION: u32 =
|
||||
<T::Chain as ChainWithGrandpa>::AVERAGE_HEADER_SIZE_IN_JUSTIFICATION;
|
||||
const MAX_MANDATORY_HEADER_SIZE: u32 =
|
||||
<T::Chain as ChainWithGrandpa>::MAX_MANDATORY_HEADER_SIZE;
|
||||
const AVERAGE_HEADER_SIZE: u32 = <T::Chain as ChainWithGrandpa>::AVERAGE_HEADER_SIZE;
|
||||
}
|
||||
|
||||
/// Returns maximal expected size of `submit_finality_proof` call arguments.
|
||||
pub fn max_expected_submit_finality_proof_arguments_size<C: ChainWithGrandpa>(
|
||||
is_mandatory_finality_target: bool,
|
||||
precommits: u32,
|
||||
) -> u32 {
|
||||
let max_expected_justification_size =
|
||||
GrandpaJustification::<HeaderOf<C>>::max_reasonable_size::<C>(precommits);
|
||||
|
||||
// call arguments are header and justification
|
||||
let max_expected_finality_target_size = if is_mandatory_finality_target {
|
||||
C::MAX_MANDATORY_HEADER_SIZE
|
||||
} else {
|
||||
C::AVERAGE_HEADER_SIZE
|
||||
};
|
||||
max_expected_finality_target_size.saturating_add(max_expected_justification_size)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use frame_support::weights::Weight;
|
||||
use sp_runtime::{testing::H256, traits::BlakeTwo256, MultiSignature};
|
||||
|
||||
struct TestChain;
|
||||
|
||||
impl Chain for TestChain {
|
||||
type BlockNumber = u32;
|
||||
type Hash = H256;
|
||||
type Hasher = BlakeTwo256;
|
||||
type Header = sp_runtime::generic::Header<u32, BlakeTwo256>;
|
||||
type AccountId = u64;
|
||||
type Balance = u64;
|
||||
type Nonce = u64;
|
||||
type Signature = MultiSignature;
|
||||
|
||||
fn max_extrinsic_size() -> u32 {
|
||||
0
|
||||
}
|
||||
fn max_extrinsic_weight() -> Weight {
|
||||
Weight::zero()
|
||||
}
|
||||
}
|
||||
|
||||
impl ChainWithGrandpa for TestChain {
|
||||
const WITH_CHAIN_GRANDPA_PALLET_NAME: &'static str = "Test";
|
||||
const MAX_AUTHORITIES_COUNT: u32 = 128;
|
||||
const REASONABLE_HEADERS_IN_JUSTIFICATON_ANCESTRY: u32 = 2;
|
||||
const MAX_MANDATORY_HEADER_SIZE: u32 = 100_000;
|
||||
const AVERAGE_HEADER_SIZE: u32 = 1_024;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn max_expected_submit_finality_proof_arguments_size_respects_mandatory_argument() {
|
||||
assert!(
|
||||
max_expected_submit_finality_proof_arguments_size::<TestChain>(true, 100) >
|
||||
max_expected_submit_finality_proof_arguments_size::<TestChain>(false, 100),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user