3

i wanna add a new pallet in substrate runtime.rs

this is the contract of the file :

#![cfg_attr(not(feature = "std"), no_std)]

/// Edit this file to define custom logic or remove it if it is not needed.
/// Learn more about FRAME and the core library of Substrate FRAME pallets:
/// <https://docs.substrate.io/reference/frame-pallets/>
pub use pallet::*;

#[cfg(test)]
mod mock;

#[cfg(test)]
mod tests;

#[cfg(feature = "runtime-benchmarks")]
mod benchmarking;
pub mod weights;
pub use weights::*;

#[frame_support::pallet]
pub mod pallet {
    use super::*;
    use frame_support::pallet_prelude::*;
    use frame_system::pallet_prelude::*;

    #[pallet::pallet]
    pub struct Pallet<T>(_);

    /// Configure the pallet by specifying the parameters and types on which it depends.
    #[pallet::config]
    pub trait Config: frame_system::Config {
        /// Because this pallet emits events, it depends on the runtime's definition of an event.
        type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
        /// Type representing the weight of this pallet
        type WeightInfo: WeightInfo;
    }

    // The pallet's runtime storage items.
    // https://docs.substrate.io/main-docs/build/runtime-storage/
    #[pallet::storage]
    #[pallet::getter(fn something)]
    // Learn more about declaring storage items:
    // https://docs.substrate.io/main-docs/build/runtime-storage/#declaring-storage-items
    pub type Something<T> = StorageValue<_, u32>;

    // Pallets use events to inform users when important changes are made.
    // https://docs.substrate.io/main-docs/build/events-errors/
    #[pallet::event]
    #[pallet::generate_deposit(pub(super) fn deposit_event)]
    pub enum Event<T: Config> {
        /// Event documentation should end with an array that provides descriptive names for event
        /// parameters. [something, who]
        SomethingStored { something: u32, who: T::AccountId },
    }

    // Errors inform users that something went wrong.
    #[pallet::error]
    pub enum Error<T> {
        /// Error names should be descriptive.
        NoneValue,
        /// Errors should have helpful documentation associated with them.
        StorageOverflow,
    }

    // Dispatchable functions allows users to interact with the pallet and invoke state changes.
    // These functions materialize as "extrinsics", which are often compared to transactions.
    // Dispatchable functions must be annotated with a weight and must return a DispatchResult.
    #[pallet::call]
    impl<T: Config> Pallet<T> {
        /// An example dispatchable that takes a singles value as a parameter, writes the value to
        /// storage and emits an event. This function must be dispatched by a signed extrinsic.
        #[pallet::call_index(0)]
        #[pallet::weight(T::WeightInfo::do_something())]
        pub fn do_something(origin: OriginFor<T>, something: u32) -> DispatchResult {
            // Check that the extrinsic was signed and get the signer.
            // This function will return an error if the extrinsic is not signed.
            // https://docs.substrate.io/main-docs/build/origins/
            let who = ensure_signed(origin)?;

            // Update storage.
            <Something<T>>::put(something);

            // Emit an event.
            Self::deposit_event(Event::SomethingStored { something, who });
            // Return a successful DispatchResultWithPostInfo
            Ok(())
        }

        /// An example dispatchable that may throw a custom error.
        #[pallet::call_index(1)]
        #[pallet::weight(T::WeightInfo::cause_error())]
        pub fn cause_error(origin: OriginFor<T>) -> DispatchResult {
            let _who = ensure_signed(origin)?;

            // Read a value from storage.
            match <Something<T>>::get() {
                // Return an error if the value has not been set.
                None => return Err(Error::<T>::NoneValue.into()),
                Some(old) => {
                    // Increment the value read from storage; will error in the event of overflow.
                    let new = old.checked_add(1).ok_or(Error::<T>::StorageOverflow)?;
                    // Update the value in storage with the incremented result.
                    <Something<T>>::put(new);
                    Ok(())
                },
            }
        }
    }
}

and i added this line in runtime cargo.toml :

pallet-acn = { version = "4.0.0-dev", default-features = false, path = "../../../frame/acn" }

"pallet-acn/std",

i add this code in runtime file :

impl pallet_acn::Config for Runtime {
    type RuntimeEvent = RuntimeEvent;
    type WeightInfo = pallet_acn::weights::SubstrateWeight<Runtime>;
}

construct_runtime!(
        ACN:pallet_acn,
)

and i wanna run the cargo check , i faced this error :

the function or associated item `offchain_worker` exists for struct `Executive<Runtime, Block<Header<u32, BlakeTwo256>, UncheckedExtrinsic<MultiAddress<AccountId32, u32>, RuntimeCall, MultiSignature, (CheckNonZeroSender<Runtime>, CheckSpecVersion<Runtime>, CheckTxVersion<Runtime>, CheckGenesis<Runtime>, CheckMortality<Runtime>, CheckNonce<Runtime>, CheckWeight<Runtime>, ChargeAssetTxPayment<Runtime>)>>, ChainContext<Runtime>, Runtime, (Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime, Instance1>, Pallet<Runtime, Instance2>, Pallet<Runtime>, Pallet<Runtime, Instance1>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime, Instance1>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime, Instance3>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime, Instance2>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>, Pallet<Runtime>), (MigrateToV2<Runtime>, Migration<Runtime>, Migration<Runtime>)>`, but its trait bounds were not satisfied

and when i removed this two line , every thing will be fine .

Complete Error File

Runtime File

whats the problem ?

1
  • Can you include your Cargo.toml files for your pallet and runtime?
    – Bruno
    Commented Jun 22, 2023 at 18:08

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.