Reputation: 31050
Presently, in working through the substrate tutorials, I've got to the "Build the runtime with your new pallet" section. With files updated and double checked as per the tutorial.
I'm getting the following error on pre-build check (the previous tutorials had built ok, Ubuntu 20.04.3):
cargo check -p node-template-runtime
Gives:
cargo check -p node-template-runtime
Updating git repository `https://github.com/paritytech/substrate.git`
Checking sp-std v4.0.0-dev (https://github.com/paritytech/substrate.git?tag=monthly-2021-11-1#352c46a6)
Compiling node-template-runtime v4.0.0-dev (/myPath/substrate/att2/substrate-node-template/runtime)
Checking pallet-template v4.0.0-dev (/myPath/substrate/att2/substrate-node-template/pallets/template)
error[E0277]: the trait bound `Vec<u8>: MaxEncodedLen` is not satisfied
--> pallets/template/src/lib.rs:40:11
|
40 | #[pallet::generate_storage_info]
| ^^^^^^^^^^^^^^^^^^^^^ the trait `MaxEncodedLen` is not implemented for `Vec<u8>`
|
= note: required because of the requirements on the impl of `StorageInfoTrait` for `frame_support::pallet_prelude::StorageMap<_GeneratedPrefixForStorageProofs<T>, frame_support::Blake2_128Concat, Vec<u8>, (<T as frame_system::Config>::AccountId, <T as frame_system::Config>::BlockNumber), frame_support::pallet_prelude::ValueQuery>`
note: required by `storage_info`
--> /myPath/.cargo/git/checkouts/substrate-7e08433d4c370a21/352c46a/frame/support/src/traits/storage.rs:71:2
|
71 | fn storage_info() -> Vec<StorageInfo>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
For more information about this error, try `rustc --explain E0277`.
error: could not compile `pallet-template` due to previous error
warning: build failed, waiting for other jobs to finish...
error: build failed
I have the following in my Cargo.toml
:
[dependencies.sp-std]
default-features = false
git = 'https://github.com/paritytech/substrate.git'
tag = 'monthly-2021-11-1' # or the latest monthly
version = '4.0.0-dev' # or the latest version
Is there some obvious thing that might've gone wrong? How might I start to debug/fix this?
Upvotes: 5
Views: 1661
Reputation: 2992
For error of no function or associated item named "max_encoded_len" found for struct "Vec<u8>" in the current scope function or associated item not found in "Vec<u8>"
if you have a struct like
#[derive(Default, Encode, Decode, Clone, MaxEncodedLen, PartialEq, RuntimeDebug, TypeInfo)]
pub struct UserInfo {
pub id: i64,
pub username: Vec<u8>, //bytes
}
Replace Vec<u8>
with [u8; 256]
because Rust does not know the max length of that vector.
Upvotes: 1
Reputation: 406
In the latest frame_support::pallet, #[pallet::generate_storage_info]
is no longer explicitly available.
And if someone is still getting the error
the trait MaxEncodedLen is not implemented for xxx
add #[pallet::without_storage_info]
after #[pallet::pallet]
Upvotes: 7
Reputation: 1082
For now, all that is needed it to remove the #[pallet::generate_storage_info]
macro line.
Future users should not have this error. See https://github.com/substrate-developer-hub/substrate-docs/issues/627
Upvotes: 2