Skip to content

Compact trait bounds overflow #65

@ascjones

Description

@ascjones

When integrating the latest scale-info master into substrate (see https://github.com/paritytech/substrate/compare/aj-metadata-vnext) I receive the following error:

image

It appears to have been introduced in #53.

Removing the TypeInfo derive on MultiAddress makes it compile:

diff --git a/primitives/runtime/src/multiaddress.rs b/primitives/runtime/src/multiaddress.rs
index a47201008..d09cd7aca 100644
--- a/primitives/runtime/src/multiaddress.rs
+++ b/primitives/runtime/src/multiaddress.rs
@@ -21,7 +21,7 @@ use codec::{Encode, Decode};
 use sp_std::vec::Vec;
 
 /// A multi-format address wrapper for on-chain accounts.
-#[derive(Encode, Decode, PartialEq, Eq, Clone, crate::RuntimeDebug, scale_info::TypeInfo)]
+#[derive(Encode, Decode, PartialEq, Eq, Clone, crate::RuntimeDebug)]
 #[cfg_attr(feature = "std", derive(Hash))]
 pub enum MultiAddress<AccountId, AccountIndex> {
 	/// It's an account ID (pubkey).
diff --git a/primitives/runtime/src/traits.rs b/primitives/runtime/src/traits.rs
index 00fae6fe6..0fdf6d55b 100644
--- a/primitives/runtime/src/traits.rs
+++ b/primitives/runtime/src/traits.rs
@@ -203,7 +203,7 @@ pub trait Lookup {
 /// context.
 pub trait StaticLookup {
 	/// Type to lookup from.
-	type Source: Codec + Clone + PartialEq + Debug + scale_info::TypeInfo;
+	type Source: Codec + Clone + PartialEq + Debug;
 	/// Type to lookup into.
 	type Target;
 	/// Attempt a lookup.

Here is the expanded derived TypeInfo impl for MultiAddress:

impl<AccountId, AccountIndex> ::scale_info::TypeInfo for MultiAddress<AccountId, AccountIndex>
        where
            AccountId: ::scale_info::TypeInfo + 'static,
            AccountIndex: ::codec::HasCompact,
            <AccountIndex as ::codec::HasCompact>::Type: ::scale_info::TypeInfo + 'static,
            AccountId: ::scale_info::TypeInfo + 'static,
            AccountIndex: ::scale_info::TypeInfo + 'static,
        {
            type Identity = Self;
            fn type_info() -> ::scale_info::Type {
                ::scale_info::Type::builder()
                    .path(::scale_info::Path::new(
                        "MultiAddress",
                        "sp_runtime::multiaddress",
                    ))
                    .type_params(<[_]>::into_vec(box [
                        ::scale_info::meta_type::<AccountId>(),
                        ::scale_info::meta_type::<AccountIndex>(),
                    ]))
                    .variant(
                        ::scale_info::build::Variants::with_fields()
                            .variant(
                                "Id",
                                ::scale_info::build::Fields::unnamed()
                                    .field_of::<AccountId>("AccountId"),
                            )
                            .variant(
                                "Index",
                                ::scale_info::build::Fields::unnamed()
                                    .compact_of::<AccountIndex>("AccountIndex"),
                            )
                            .variant(
                                "Raw",
                                ::scale_info::build::Fields::unnamed()
                                    .field_of::<Vec<u8>>("Vec<u8>"),
                            )
                            .variant(
                                "Address32",
                                ::scale_info::build::Fields::unnamed()
                                    .field_of::<[u8; 32]>("[u8; 32]"),
                            )
                            .variant(
                                "Address20",
                                ::scale_info::build::Fields::unnamed()
                                    .field_of::<[u8; 20]>("[u8; 20]"),
                            ),
                    )
            }
        };

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions