커스텀 팔레트
커스텀 런타임을 구축하는 가장 일반적인 방법은 기존 팔레트를 기반으로 시작하는 것입니다. 예를 들어, 기존의 Collective와 Balances 팔레트를 사용하지만, 응용 프로그램 및 스테이킹 규칙에 필요한 커스텀 런타임 로직을 포함하는 응용 프로그램별 스테이킹 팔레트를 구축할 수 있습니다.
FRAME 팔레트는 가장 일반적인 팔레트에 대한 개요를 제공하지만, 현재 존재하는 팔레트에 대한 최신 정보를 찾는 가장 좋은 장소는 pallet_*
네이밍 규칙을 사용하는 크레이트의 Rust API 문서입니다.
필요한 팔레트를 찾지 못한 경우, FRAME 매크로를 사용하여 사용자 정의 팔레트의 뼈대를 구축할 수 있습니다.
팔레트 매크로와 속성
FRAME은 복잡한 코드 블록을 캡슐화하기 위해 Rust 매크로를 광범위하게 사용합니다. 사용자 정의 팔레트를 구축하는 데 가장 중요한 매크로는 pallet
매크로입니다. pallet
매크로는 팔레트가 제공해야 하는 핵심 속성 집합을 정의합니다. 예를 들어:
#[pallet::pallet]
은 팔레트에 데이터를 저장할 수 있는 구조체(struct)를 정의할 수 있도록 하는 필수 팔레트 속성입니다.#[pallet::config]
는 팔레트의 구성 트레이트를 정의할 수 있도록 하는 필수 팔레트 속성입니다.
pallet
매크로는 또한 팔레트가 일반적으로 제공하는 핵심 속성 집합을 정의합니다. 예를 들어:
#[pallet::call]
은 팔레트에 대한 호출 가능한 함수 호출을 구현할 수 있도록 하는 속성입니다.#[pallet::error]
는 호출 가능한 오류를 생성할 수 있도록 하는 속성입니다.#[pallet::event]
는 호출 가능한 이벤트를 생성할 수 있도록 하는 속성입니다.#[pallet::storage]
는 런타임에 저장소 인스턴스와 해당 메타데이터를 생성할 수 있도록 하는 속성입니다.
이러한 핵심 속성은 사용자 정의 팔레트를 작성할 때 필요한 결정과 일치합니다. 예를 들어, 팔레트가 저장하는 데이터와 해당 데이터가 체인 상에 저장되는지 오프 체인에 저장되는지를 고려해야 합니다. 또한 팔레트가 노출하는 호출 가능한 함수와 해당 함수 호출이 원자적(atomically) 으로 저장소를 수정하는지 여부, 팔레트가 런타임 후크에 호출을 수행하는지 여부 등을 고려해야 합니다.
매크로는 사용자 정의 런타임 로직을 구현하기 위해 작성해야 하는 코드를 단순화합니다. 그러나 일부 매크로는 함수 선언에 특정 요구 사항을 강제합니다. 예를 들어, Config
트레이트는 frame_system::Config
에 바인딩되어야 하며, #[pallet::pallet]
구조체는 pub struct Pallet<T>(_);
로 선언되어야 합니다. FRAME 팔레트에서 사용되는 매크로에 대한 개요는 FRAME 매크로를 참조하십시오.
Last updated