infrablockchain-docs
ko
ko
  • 인프라블록체인
    • 배우기
      • 아키텍처
        • 아키텍처
        • 네트워크 참여자
        • 파라체인
          • 시스템 파라체인
      • 프로토콜
        • 시스템 토큰
        • 트랜잭션 수수료
        • Proof of Transaction
      • Substrate
        • 배우기
          • 기초 지식
            • 암호학
            • 블록체인 기본 개념
            • 합의
            • 네트워크와 노드
            • 트랜잭션과 블록 기본 사항
            • 트랜잭션 수명주기
            • 오프체인 작업
            • 라이트 클라이언트
            • Substrate를 위한 Rust
            • 라이브러리 소개
            • 아키텍처와 Rust 라이브러리
            • 파일 구조
            • 계정, 주소 및 키
            • 트랜잭션 형식
            • 난수 생성
          • 프레임
            • FRAME 팔레트
            • FRAME 매크로
            • 커스텀 팔레트
            • 팔레트 커플링
            • Origin
            • 이벤트와 에러
            • 런타임 스토리지 구조
            • 상태 전이와 스토리지
            • SCALE 인코딩
            • 트랜잭션, Weight 및 수수료
            • 런타임 API
            • 런타임 업그레이드
            • 런타임 개발
          • 계정 데이터 구조
          • 주소 형식
          • 용어집
          • cli
            • 아카이브
            • 메모리 프로파일러
            • 노드 템플릿
            • 사이드카
            • srtool
            • 서브키
            • subxt
            • try-runtime
            • tx-wrapper
          • 런타임 개발
            • 기본
              • Genesis 상태 구성하기
              • 런타임 상수 구성
              • 체인 스펙을 커스텀하기
              • 팔레트 가져오기
              • 도우미 함수 사용하기
            • 합의 모델
              • 작업 증명을 사용하는 체인 구성
              • 하이브리드 노드 생성하기
            • 오프체인 워커
              • 오프체인 HTTP 요청하기
              • 오프체인 인덱싱
              • 오프체인 로컬 스토리지
            • 팔레트 설계
              • 크라우드펀딩 구성하기
              • 스토리지 구조체 (struct) 생성하기
              • 잠금 가능한 통화 구현
              • 무작위성 적용하기
              • 느슨한 팔레트 결합 사용하기
              • 타이트한 팔레트 결합 사용하기
            • 파라체인 개발
              • HRMP 채널 추가하기
              • 로컬 파라체인 노드 추가하기
              • 릴레이 체인에 연결하기
              • 솔로 체인을 변환하기
              • 론칭 준비
              • 콜레이터 선택
              • 파라체인 업그레이드
            • 스토리지 마이그레이션
              • 기본 저장소 마이그레이션
              • 스토리지 마이그레이션 트리거
            • 테스트
              • 기본 테스트 설정하기
              • 전송 함수 테스트하기
            • 도구
              • 체인을 위한 txwrapper 생성
              • REST 엔드포인트를 사용하여 체인 데이터 가져오기
              • try-runtime 사용하기
              • Wasm 바이너리 검증하기
            • 가중치
              • 벤치마크 추가
              • 수수료 계산하기
              • 조건부 가중치 사용
              • 사용자 정의 가중치 사용하기
        • 빌드하기
          • 제작할 것을 결정하세요
          • 빌드 프로세스
          • 결정론적 런타임 빌드
          • 체인 스펙
          • Genesis 구성
          • 애플리케이션 개발
          • RPC
          • 문제 해결
        • 튜토리얼
          • 설치하기
            • 개발자 도구
            • 리눅스 개발 환경
            • macOS 개발 환경
            • Rust 툴체인
            • Rust 문제 해결 방법
            • Windows 개발 환경
          • 빠른 시작
            • 코드 탐색하기
            • 런타임 수정하기
            • 노드 시작하기
            • Substrate 한눈에 보기
          • 블록체인 구축
            • 신뢰할 수 있는 노드 추가
            • 특정 노드 승인
            • 로컬 블록체인 구축하기
            • 네트워크 시뮬레이션
            • 실행 중인 네트워크 업그레이드
          • 애플리케이션 로직 구축
            • 런타임에 팔레트 추가하기
            • 오프체인 워커 추가
            • 사용자 정의 팔레트 게시
            • 함수 호출의 출처 지정하기
            • 사용자 정의 팔레트에서 매크로 사용하기
          • 유용한 도구들
            • EVM 계정에 접근하기
            • 이더리움 통합
            • 사이드카 엔드포인트 탐색하기
            • 경량 클라이언트 노드 통합
          • 스마트 컨트랙트
            • 스마트 컨트랙트
            • 토큰 계약 작성하기
            • 스마트 컨트랙트 개발하기
            • 첫 번째 계약 준비하기
            • 스마트 컨트랙트 문제 해결
            • 값 저장을 위한 맵 사용
      • XCM
        • XCM
        • XCM 형식
    • 서비스 체인
      • 인프라DID
      • 인프라EVM
      • URAuth(Universal Resource Auth)
    • 데브 옵스
      • 체인 빌드
      • 배포
      • 모니터링
    • 튜토리얼
      • 기초
        • 시스템 토큰 관리 프로세스
        • 시스템 토큰을 트랜잭션 수수료로 사용해보기
        • 트랜잭션에 투표 포함 시키기
        • 밸리데이터 보상 받기
      • 구축하기
        • 인프라릴레이체인 구축하기
        • 파라체인 구축하기
        • 메시지 전달 채널 열기
        • XCM을 이용하여 토큰 전송하기
        • Asynchronous Backing 적용하기
      • 테스트
        • 벤치마크
        • 런타임 확인
        • 디버그
        • 테스트 네트워크에서 파라체인 시뮬레이션하기
        • 단위 테스트
      • 서비스체인
        • 인프라DID
          • 구축하기
          • 공개키 추가하기
          • 서비스 엔드포인트 등록하기
          • DID 생성하기
        • 인프라EVM
          • 구축하기
          • EVM에 자금 입금 및 인출하기
          • ERC20 토큰 컨트랙트 배포하기
          • ERC721 토큰 컨트랙트 배포하기
          • ERC1155 토큰 컨트랙트 배포하기
  • 뉴날 데이터 마켓
Powered by GitBook
On this page
  • 노드 템플릿에 대해
  • 매니페스트 파일
  • 핵심 클라이언트 소스 코드
  • 기본 노드 템플릿 런타임
  1. 인프라블록체인
  2. 배우기
  3. Substrate
  4. 튜토리얼
  5. 빠른 시작

코드 탐색하기

노드 템플릿의 내용을 자세히 살펴보세요.

Previous빠른 시작Next런타임 수정하기

Last updated 1 year ago

에서 개발 모드에서 로컬 Substrate 노드를 컴파일하고 시작했습니다. 이 특정 노드인 substrate-node-template은 시작하기 위해 몇 가지 공통 모듈만 간단히 제공하는 간소화된 환경을 제공합니다. 세부 사항에 너무 깊게 들어가지 않고도, 노드 템플릿 코드의 기본 구성 요소를 탐색함으로써 많은 것을 배울 수 있습니다.

노드 템플릿에 대해

노드 템플릿에는 P2P 네트워킹, 간단한 합의 메커니즘, 트랜잭션 처리와 같은 기본적인 블록체인 요소가 포함되어 있습니다. 노드 템플릿에는 또한 계정, 잔액, 트랜잭션 수수료 작업을 다루고 관리자 작업을 수행하는 데 필요한 몇 가지 기본 기능도 포함되어 있습니다. 이러한 핵심 기능 세트는 특정 기능을 구현하는 여러 사전 정의 모듈인 팔레트(pallets)를 통해 제공됩니다.

예를 들어, 다음과 같은 핵심 모듈이 노드 템플릿에 사전 정의되어 있습니다:

  • pallet_balances: 계정 자산 및 계정 간 이체를 관리합니다.

  • pallet_transaction_payment: 수행된 트랜잭션의 수수료를 관리합니다.

  • pallet_sudo: 관리자 권한이 필요한 작업을 수행합니다.

노드 템플릿은 또한 사용자 정의 팔레트를 구현하는 방법을 보여주는 시작용 pallet_template도 제공합니다.

이제 노드 템플릿에 포함된 기능을 개요로 알게 되었으니, substrate-node-template 디렉토리와 하위 디렉토리의 코드를 자세히 살펴보겠습니다.

매니페스트 파일

Substrate는 Rust 기반 프레임워크이기 때문에 각 패키지에는 패키지를 컴파일하는 데 필요한 정보를 담고 있는 매니페스트 파일인 Cargo.toml 파일이 있습니다. substrate-node-template의 루트 디렉토리에 위치한 Cargo.toml 파일을 열면, 노드 템플릿 워크스페이스를 구성하는 멤버 패키지를 설명하는 내용을 볼 수 있습니다. 예를 들면:

[workspace]
members = [
    "node",
    "pallets/template",
    "runtime",
]
[profile.release]
panic = "unwind"

이 매니페스트에서는 노드 템플릿 워크스페이스에 세 개의 패키지가 포함되어 있는 것을 알 수 있습니다:

  • node 패키지는 P2P 네트워킹, 블록 생성, 블록 최종화, 트랜잭션 풀 관리 등 많은 핵심 블록체인 서비스를 위한 Rust 모듈을 제공합니다.

  • pallets 하위 디렉토리의 template 패키지는 사용자 정의 모듈을 구축할 때 기능을 구현하는 방법을 보여주는 시작용 템플릿입니다.

  • runtime 패키지는 노드 템플릿에 포함된 계정, 잔액, 트랜잭션 수수료 및 기타 기능을 처리하는 모든 응용 로직을 제공합니다.

runtime/Cargo.toml 파일과 pallets/template/Cargo.toml 파일을 열면 다른 라이브러리와 기본 요소가 종속성으로 나열되어 있지만, 이러한 패키지를 컴파일하는 데 필요한 내용을 대략적으로 파악할 수 있습니다. 예를 들어, 런타임에 대한 매니페스트는 frame_system, frame_support 및 이전에 언급한 pallet_balances, pallet_transaction_payment, pallet_sudo 모듈을 포함하는 기본 런타임을 나타냅니다.

핵심 클라이언트 소스 코드

Substrate의 가장 중요한 측면 중 하나는 노드가 코어 클라이언트(core client)와 런타임(runtime) 두 가지 주요 부분으로 구성된다는 것입니다. 노드 템플릿은 또한 node/src 디렉토리에 있는 코어 클라이언트 서비스를 위한 별도의 패키지와 runtime/src 디렉토리에 있는 런타임을 위한 별도의 패키지로 구성되어 있습니다.

기본적으로 node/src 디렉토리에는 다음과 같은 Rust 모듈이 포함되어 있습니다:

  • benchmarking.rs

  • chain_spec.rs

  • cli.rs

  • command.rs

  • lib.rs

  • main.rs

  • rpc.rs

  • service.rs

대부분의 코어 클라이언트 서비스는 node/src/service.rs Rust 모듈에 캡슐화되어 있습니다. 이 파일이나 node/src 디렉토리의 다른 Rust 모듈을 수정해야 할 일은 드물지만, 수정할 가능성이 있는 파일은 chain_spec.rs 파일입니다. chain_spec.rs 파일은 개발 및 로컬 테스트넷 체인의 기본 구성, 기본 사전 자금이 제공된 개발 계정 및 블록 생성 권한이 사전 구성된 노드에 대한 정보를 포함합니다. 사용자 정의 체인을 생성하는 경우, 이 파일을 사용하여 노드가 연결되는 네트워크와 로컬 노드가 통신하는 다른 노드를 식별합니다.

기본 노드 템플릿 런타임

Substrate는 모듈식이고 유연한 블록체인 구축 프레임워크를 제공하기 때문에 워크스페이스의 모든 패키지를 변경할 수 있습니다. 그러나 대부분의 응용 프로그램 개발 작업은 런타임과 런타임을 구성하는 모듈인 팔레트에서 수행됩니다. 자신의 프로젝트에 맞게 런타임을 사용자 정의하기 전에, 기본 노드 템플릿에 있는 내용을 약간 살펴보는 것이 좋습니다.

기본 매니페스트

이미 다음과 같이 런타임의 기본 종속성과 기능을 나열하는 런타임의 기본 매니페스트를 보았습니다:

pallet-balances = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/polkadot-sdk.git", branch = "polkadot-vX.Y.Z" }

pallet-sudo = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/polkadot-sdk.git", branch = "polkadot-vX.Y.Z" }

pallet-transaction-payment = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/polkadot-sdk.git", branch = "polkadot-vX.Y.Z" }

기본 소스 코드

런타임의 주요 소스 코드는 runtime/src/lib.rs 파일에 있습니다. 이 파일을 코드 편집기에서 열면 처음에는 복잡해 보일 수 있습니다. 이 파일에 대한 세부 사항은 문서의 다른 부분에서 다루는 뉘앙스가 있지만, 본질적으로 소스 코드는 다음과 같은 작업을 수행합니다:

  • frame_system 및 frame_support 핵심 서비스를 가져옵니다.

  • 런타임의 버전 정보를 지정합니다.

  • 포함할 팔레트를 선언합니다.

  • 포함된 각 팔레트의 유형과 매개변수를 선언합니다.

  • 포함된 각 팔레트에 대한 상수 및 변수 값을 설정합니다.

  • 포함된 각 팔레트에 대한 Config 트레이트를 구현합니다.

  • 포함된 팔레트로부터 런타임을 구성합니다.

  • 팔레트 성능을 평가하기 위한 벤치마킹 프레임워크를 준비합니다.

  • 코어 클라이언트가 런타임에 호출할 수 있도록 인터페이스를 구현합니다.

각 멤버 패키지는 자체의 매니페스트인 Cargo.toml 파일을 가지고 있으며, 해당 멤버 패키지를 컴파일하는 데 필요한 종속성 및 구성 설정과 같은 패키지별 정보를 포함하고 있습니다. 예를 들어, 워크스페이스의 node 멤버를 위한 Cargo.toml 파일은 패키지의 이름이 node-template이며, 노드 템플릿이 필수적인 블록체인 서비스를 제공할 수 있도록 하는 핵심 라이브러리와 기본 요소를 나열하고 있습니다. 라이브러리와 기본 요소에 대해서는 에서 자세히 알아보게 될 것입니다. 지금은 각 패키지에 대한 종속성 및 기타 중요한 정보를 설명하는 매니페스트의 중요성을 이해하는 것으로 충분합니다.

또한 frame-system, frame-support, frame-executive와 같은 핵심 패키지에 대한 종속성도 있습니다. 이러한 핵심 서비스에 대해서는 에서 자세히 알아보게 될 것입니다. 지금은 이러한 모듈과 기타 모듈이 노드 템플릿의 런타임을 컴파일하는 데 필요하다는 점에 주목해주세요.

런타임을 구성하는 방법, 벤치마킹 정의, 런타임 인터페이스 사용에 대해서는 및 섹션의 주제에서 자세히 알아보게 될 것입니다. 지금은 런타임이 어떻게 구성되고 기본 팔레트가 Config 트레이트를 사용하여 구현되는지에 대한 일반적인 감각만 가지고 있으면 됩니다.

노드 시작하기
아키텍처 및 Rust 라이브러리
핵심 FRAME 서비스
빌드
테스트