Substrate #2

성시완·2022년 4월 23일
0

Tutorial 2

Add the Nicks Pallet to your Runtime

Node 템플릿에서 사용할 수 있는 framework와 모듈 등에 대해 설명한다


Runtime 이란?
: 시간이 지남에 따라 블록체인의 상태가 어떻게 변화할 것인지 결정하는 로직
(유효한 트랜잭션에 대한 정의나 트랜잭션에 따른 상태 변화 결정)
Pallet 이란?
: 블록체인 고유의 Runtime을 결정하는 컴포넌트들(블록체인의 성격 결정)
노드에 미리 적용시킨 스마트 컨트랙트??

튜토리얼 2장에서는 다음과 같은 목표를 달성할 수 있다

  1. Frame Pallet을 노드와 런타임에 통합하는 방법 습득
  2. 나만의 Pallet의 구성 요소를 Customizing하는 것에 익숙해지기
  3. Custom Pallet을 crates.io에 publish하는 법 습득(러스트 커뮤니티)

이번 튜토리얼에서는 주어진 Nick Pallet을 나의 Node 템플릿에 적용하는 실습을 한다

Nick Pallet은 보증금을 내고 나만의 별명을 생성할 수 있고, 그것을 나의 계정과 연동시킬 수 있게 만드는 Pallet이다

Add the Nicks pallet to the node template

Nick pallet을 node 템플릿에 추가하려면 먼저 runtime/Cargo.toml(패키지 매니저인 듯)의 dependencies에 Nick pallet을 추가해줘야 한다

  • 이때 default-features = false를 작성하는 이유는 Runtime을 컴파일할 때 디폴트로 Nick Pallet이 실행되는 것을 막기 위해서이다

Substrate의 Runtime은 Rust 표준 라이브러리 함수를 사용하는 native Rust binary(std)와 Rust 표준 라이브러리를 사용하지 않는 WebAssembly(no-std) 모두를 사용하여 컴파일된다

그런데 Nick pallet은 Rust 언어를 사용했기 때문에 Rust binary(std)로 컴파일되어야 한다. 이를 실현하기 위해 'pallet-nicks/std'를 std의 features 리스트에 넣어준다


configuration trait for the Nicks pallet

모든 pallet은 config라는 Rust 특성을 가진다
config는 pallet이 필요한 parameter와 type을 알려준다
(pallet의 성격을 나타낸다고 볼 수 있다)

Nick pallet의 config trait

Implementation of the Balances pallet

Config 인터페이스를 구현
1. parameter_types!에 상수 value들을 정의하고
2. parameter들과 type들을 정의한 Config 인터페이스를 impl 블록으로 기입한다

Implement the Nicks pallet Config trait

Start the blockchain node and use the Nicks pallet

./target/release/node-template --dev으로 node 템플릿을 실행하고,
yarn start로 front-end template을 실행하면
Pallet Interactor에 'nicks'가 존재하는 것을 알 수 있다

그 후
1) Extrinsic을 선택
2) nicks pallet 선택
3) set_name 선택
4) nickname 기입(8자부터 32자)
5) signed 눌러서 function 실행

특정 계정의 nickname 확인
1) Query 선택
2) name_of 선택
3) 찾고자 하는 계정의 주소 기입
4) signed 눌러서 function 실행
5) 16진수로 인코딩된 nickname과 보증금 금액 표시

특정 계정의 nickname 강제 삭제
1) Extrisic 선택
2) kill_name 선택
3) 해당 계정 기입
4) Sudo 버튼 눌러서 function 실행

{이후 해당 계정으로 clearname function 실행하면
construct_runtime!의 10번째 Pallet의 error enum의 3번째 variant(Unnamed) 발생

profile
메모장 // 화이팅

0개의 댓글