mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-07 06:08:03 +00:00
781cd7aac5
* Remark storage * Fixed benches * Update frame/remark/src/lib.rs Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * Fixed build * Fixed build Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
86 lines
2.6 KiB
Rust
86 lines
2.6 KiB
Rust
// This file is part of Substrate.
|
|
|
|
// Copyright (C) 2017-2022 Parity Technologies (UK) Ltd.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//! Remark storage pallet. Indexes remarks and stores them off chain.
|
|
|
|
// Ensure we're `no_std` when compiling for Wasm.
|
|
#![cfg_attr(not(feature = "std"), no_std)]
|
|
|
|
mod benchmarking;
|
|
pub mod weights;
|
|
|
|
#[cfg(test)]
|
|
mod mock;
|
|
#[cfg(test)]
|
|
mod tests;
|
|
|
|
use sp_std::prelude::*;
|
|
|
|
// Re-export pallet items so that they can be accessed from the crate namespace.
|
|
pub use pallet::*;
|
|
pub use weights::WeightInfo;
|
|
|
|
#[frame_support::pallet]
|
|
pub mod pallet {
|
|
use super::*;
|
|
use frame_support::pallet_prelude::*;
|
|
use frame_system::pallet_prelude::*;
|
|
|
|
#[pallet::config]
|
|
pub trait Config: frame_system::Config {
|
|
/// The overarching event type.
|
|
type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
|
|
/// Weight information for extrinsics in this pallet.
|
|
type WeightInfo: WeightInfo;
|
|
}
|
|
|
|
#[pallet::error]
|
|
pub enum Error<T> {
|
|
/// Attempting to store empty data.
|
|
Empty,
|
|
/// Attempted to call `store` outside of block execution.
|
|
BadContext,
|
|
}
|
|
|
|
#[pallet::pallet]
|
|
#[pallet::without_storage_info]
|
|
pub struct Pallet<T>(_);
|
|
|
|
#[pallet::call]
|
|
impl<T: Config> Pallet<T> {
|
|
/// Index and store data off chain.
|
|
#[pallet::weight(T::WeightInfo::store(remark.len() as u32))]
|
|
pub fn store(origin: OriginFor<T>, remark: Vec<u8>) -> DispatchResultWithPostInfo {
|
|
ensure!(!remark.is_empty(), Error::<T>::Empty);
|
|
let sender = ensure_signed(origin)?;
|
|
let content_hash = sp_io::hashing::blake2_256(&remark);
|
|
let extrinsic_index = <frame_system::Pallet<T>>::extrinsic_index()
|
|
.ok_or_else(|| Error::<T>::BadContext)?;
|
|
sp_io::transaction_index::index(extrinsic_index, remark.len() as u32, content_hash);
|
|
Self::deposit_event(Event::Stored { sender, content_hash: content_hash.into() });
|
|
Ok(().into())
|
|
}
|
|
}
|
|
|
|
#[pallet::event]
|
|
#[pallet::generate_deposit(pub(super) fn deposit_event)]
|
|
pub enum Event<T: Config> {
|
|
/// Stored data off chain.
|
|
Stored { sender: T::AccountId, content_hash: sp_core::H256 },
|
|
}
|
|
}
|