런타임 상수 구성

런타임에서 상수 값을 선언하는 것은 고정된 값 또는 어떤 요소에 따라 동적으로 변경되는 값들을 정의하는 유용한 도구입니다. 이 가이드에서는 u32 값을 스토리지에서 재설정하는 데 사용되는 팔레트 상수를 생성하는 방법을 보여줍니다. 이 값은 SingleValue라고 부르며, add_value라는 메서드를 사용하여 수정할 수도 있습니다.

팔레트의 타입, 이벤트 및 오류 구성

  1. 팔레트에서 상수를 정의하세요.

    • MaxAddend는 메타데이터에 표시되는 값입니다.

    • ClearFrequency는 블록 번호를 추적하고 SingleValue를 재설정하는 데 사용됩니다.

    #[pallet::config]
    pub trait Config: frame_system::Config {
    	type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
    
    	#[pallet::constant] // 상수를 메타데이터에 넣습니다.
    	/// 호출당 추가되는 최대 금액입니다.
    	type MaxAddend: Get<u32>;
    
    	/// 저장된 값이 삭제되는 빈도입니다.
    	type ClearFrequency: Get<Self::BlockNumber>;
    }
  2. 스토리지 항목과 이벤트를 선언하세요.

    저장 속성 매크로를 사용하여 매 블록 주기마다 수정되는 값인 SingleValue를 선언하세요.

    #[pallet::storage]
    #[pallet::getter(fn single_value)]
    pub(super) type SingleValue<T: Config> = StorageValue<_, u32, ValueQuery>;
  3. 팔레트의 이벤트를 정의하세요.

    #[pallet::event]
    #[pallet::generate_deposit(pub(super) fn deposit_event)]
    pub enum Event<T: Config> {
    	/// 값이 추가되었습니다. 매개변수는 (초기 금액, 추가된 금액, 최종 금액)입니다.
    	Added(u32, u32, u32),
    	/// 값이 지워졌습니다. 매개변수는 지워지기 전의 값입니다.
    	Cleared(u32)
    }
  4. 오버플로우를 처리하는 오류를 추가하세요.

    #[pallet::error]
    pub enum Error<T> {
    	/// 연산이 오버플로우를 발생시킵니다.
    	Overflow
    }

팔레트 메서드와 런타임 상수 생성

  1. on_finalize를 구성하세요.

    on_finalize 함수에서 ClearFrequency 개수의 블록마다 SingleValue를 0으로 설정합니다. 이 로직을 #[pallet::hooks] 속성 아래에 지정하세요.

  2. 사용자가 값을 지정할 수 있는 메서드를 생성하세요.

    add_value 메서드는 각 호출이 MaxAddend 값보다 작게 추가될 때까지 SingleValue를 증가시킵니다.

    이 메서드에서는 다음을 수행해야 합니다.

    • 체크를 포함합니다.

    • 이전 값 추적합니다.

    • 오버플로우를 확인합니다.

    • SingleValue를 업데이트합니다.

  3. 런타임에 대한 상수 값을 제공하세요.

    runtime/src/lib.rs에서 팔레트의 MaxAddendClearFrequency에 대한 런타임 구현의 값을 선언하세요.

예제

자원

Last updated