底层框架v2与框架v1有何不同

94 阅读3分钟

区块链是一种特殊类型的数据库。它与典型的数据库的不同之处在于其存储信息的方式。区块链将数据存储在区块中,然后将区块链在一起。区块链已经改变了我们对问题的看法。它带来了大量的好处。

  • 区块链技术解决了网络中的信任等关键问题。
  • 与其他平台或记录系统相比,区块链技术利用了先进的安全性。
  • 通过使用区块链,组织可以降低大量与第三方供应商相关的成本。

基板是一个模块化的框架,使你能够通过组成定制或预建的组件来创建专门的区块链。我们可以用三种方式之一来使用基底。

  • 基层节点
  • 底层框架
  • 基板核心

为什么是Frame v2?

Rust支持不同种类的宏。所有种类的宏基本上都是做同样的事情,以可编程的方式获取一些代码并编写一些更多的代码。现有的FRAME宏使用声明式宏,基本上你可以定义自己的自定义语法。FRAME v2使用类似属性的宏。类似属性的宏类似于自定义的派生宏,但不是为派生属性生成代码,而是允许你创建新属性

托盘

Frame v1中的托盘骨架

use support::{decl_module, decl_event, decl_storage}

pub trait Config: frame_system::Config {
     type Event: From<Event<Self>> + Into<<Self as frame_system::Config>::Event>;
}

decl_event!(
    pub enum Event<T> where AccountId = <T as frame_system::Config>::AccountId {
        SomethingStored(u32, AccountId),
	}
);

decl_storage! { 
    trait Store for Module<T: Config> as TemplateModule {
         Something get(fn something): Option<u32>;
       }
  }

decl_module! {
    pub struct Module<T: Config> for enum Call where origin: T::Origin {
        fn deposit_event() = default;
    }
}

一个FRAME v1的托盘通常由5部分组成:

  • Imports and Dependencies用于Imports和Dependencies。
  • Runtime Configuration Trait用于编写所有类型和常量的运行时间。
  • 运行时事件用于定义pallet的事件。
  • 运行时存储用于声明存储项目。
  • Pallet声明用于定义函数,所有定义行为的Pallet都有一个共同的函数,可以发射一个事件。

Frame v2的托盘骨架

#[frame_support::pallet]
pub mod pallet {
	use frame_support::{dispatch::DispatchResult, pallet_prelude::*};
	use frame_system::pallet_prelude::*;

#[pallet::config]
	pub trait Config: frame_system::Config {
		type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
	}

#[pallet::storage]
	#[pallet::getter(fn something)]
	pub type Something<T> = StorageValue<_, u32>;


#[pallet::event]
	#[pallet::metadata(T::AccountId = "AccountId")]
	#[pallet::generate_deposit(pub(super) fn deposit_event)]
	pub enum Event<T: Config> {
		SomethingStored(u32, T::AccountId),
	}


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

一个FRAME v2的托盘通常由7个部分组成:

  • 进口和依赖,用于进口和依赖。
  • Pallet类型的声明,作为实现特质和方法的占位符。
  • 运行时配置特 质用来编写运行时的所有类型和常量。
  • 运行时存储用于声明存储项。
  • 运行时事件(Runtime Events)用于定义Pallet的事件。
  • 钩子用于编写托盘的逻辑。
  • Extrinsics用于编写可从运行时外部调用的函数。

综上所述。

FRAME v2的宏已经被设计得更加模块化,因此错误会以更友好的方式报告给用户,让用户更容易发现问题。新旧两个宏都扩展到相同的Rust最终代码,因此它们完全可以相互兼容。

我希望你能了解Frame版本1和版本2的区别。

谢谢你的阅读!!