mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-08-02 15:45:41 +00:00
4c810609d6
The first step towards https://github.com/paritytech/polkadot-sdk/issues/3155 Brings all templates under the following structure ``` templates | parachain | | polkadot-launch | | runtime --> parachain-template-runtime | | pallets --> pallet-parachain-template | | node --> parachain-template-node | minimal | | runtime --> minimal-template-runtime | | pallets --> pallet-minimal-template | | node --> minimal-template-node | solochain | | runtime --> solochain-template-runtime | | pallets --> pallet-template (the naming is not consistent here) | | node --> solochain-template-node ``` The only note-worthy changes in this PR are: - More `Cargo.toml` fields are forwarded to use the one from the workspace. - parachain template now has weights and benchmarks - adds a shell pallet to the minimal template - remove a few unused deps A list of possible follow-ups: - [ ] Unify READMEs, create a parent README for all - [ ] remove references to `docs.substrate.io` in templates - [ ] make all templates use `#[derive_impl]` - [ ] update and unify all licenses - [ ] Remove polkadot launch, use https://github.com/paritytech/polkadot-sdk/blob/35349df993ea2e7c4769914ef5d199e787b23d4c/cumulus/zombienet/examples/small_network.toml instead.
110 lines
3.9 KiB
Rust
110 lines
3.9 KiB
Rust
#![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/v3/runtime/frame>
|
|
pub use pallet::*;
|
|
|
|
#[cfg(test)]
|
|
mod mock;
|
|
|
|
#[cfg(test)]
|
|
mod tests;
|
|
|
|
pub mod weights;
|
|
|
|
#[cfg(feature = "runtime-benchmarks")]
|
|
mod benchmarking;
|
|
|
|
#[frame_support::pallet]
|
|
pub mod pallet {
|
|
use frame_support::{dispatch::DispatchResultWithPostInfo, pallet_prelude::*};
|
|
use frame_system::pallet_prelude::*;
|
|
|
|
/// 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>;
|
|
/// A type representing the weights required by the dispatchables of this pallet.
|
|
type WeightInfo: crate::weights::WeightInfo;
|
|
}
|
|
|
|
#[pallet::pallet]
|
|
pub struct Pallet<T>(_);
|
|
|
|
// The pallet's runtime storage items.
|
|
// https://docs.substrate.io/v3/runtime/storage
|
|
#[pallet::storage]
|
|
// Learn more about declaring storage items:
|
|
// https://docs.substrate.io/v3/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/v3/runtime/events-and-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(u32, 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,
|
|
}
|
|
|
|
#[pallet::hooks]
|
|
impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {}
|
|
|
|
// 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(Weight::from_parts(10_000, 0) + T::DbWeight::get().writes(1))]
|
|
pub fn do_something(origin: OriginFor<T>, something: u32) -> DispatchResultWithPostInfo {
|
|
// 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/v3/runtime/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(().into())
|
|
}
|
|
|
|
/// An example dispatchable that may throw a custom error.
|
|
#[pallet::call_index(1)]
|
|
#[pallet::weight(Weight::from_parts(10_000, 0) + T::DbWeight::get().reads_writes(1,1))]
|
|
pub fn cause_error(origin: OriginFor<T>) -> DispatchResultWithPostInfo {
|
|
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 => Err(Error::<T>::NoneValue)?,
|
|
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(().into())
|
|
},
|
|
}
|
|
}
|
|
}
|
|
}
|