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
  • 튜토리얼 목표
  • 시작하기 전에
  • 파라체인 템플릿 빌드하기
  • 파라체인 식별자(ParaId) 예약하기
  • 파라체인 등록 절차
  • 콜레이터 노드 시작하기
  • 로컬 릴레이체인에 등록하기
  • 파라체인 트랜잭션 제출하기
  • 블록체인 상태 재설정하기
  1. 인프라블록체인
  2. 튜토리얼
  3. 구축하기

파라체인 구축하기

이 튜토리얼은 파라체인을 구축하는 방법을 알아봅니다.

Previous인프라릴레이체인 구축하기Next메시지 전달 채널 열기

Last updated 11 months ago

튜토리얼 목표

이 튜토리얼을 완료함으로써 다음 목표를 달성할 수 있습니다:

  • 릴레이 체인과 파라체인을 연결하여 멀티체인 아키텍처를 구축할 수 있습니다.

시작하기 전에

시작하기 전에 다음을 확인하세요:

  • 튜토리얼을 통해 로컬 릴레이체인을 구성 방법에 대해 확인합니다.

  • 을 구성하는 방법에 대해 확인합니다.

파라체인 템플릿 빌드하기

이 튜토리얼에서는 파라체인 템플릿 을 이용하여 인프라릴레이체인(InfraRelayChain) 에 연결하는 방법에 대해 설명합니다. 파라체인 템플릿은 파라체인 개발의 시작점으로도 사용할 수 있습니다.

파라체인 템플릿을 빌드하려면 다음을 수행하세요:

  1. 최신 인프라블록체인(InfraBlockchain) SDK를 불러옵니다.

    git clone --branch master https://github.com/InfraBlockchain/infrablockchain-substrate.git
  2. 다음 명령을 실행하여 파라체인 템플릿 런타임을 빌드합니다.

    cargo build --release --bin parachain-template-node

파라체인 식별자(ParaId) 예약하기

파라체인 식별자를 예약하려면 다음을 수행하세요:

  1. 최소 두 개이상의 밸리데이터 노드가 구동 중인 로컬 릴레이체인 네트워크를 구성합니다.

  2. 익스플로러 탭에서 왼쪽 상단 탭을 클릭하여 DEVELOPMENT 섹션을 눌러 노드를 시작할 때 설정한 RPC 포트를 이용해 로컬 릴레이체인에 연결합니다.

  3. 네트워크를 클릭하고 파라체인을 선택합니다.

  4. 파라스레드를 클릭한 다음 ParaId를 클릭합니다.

  5. 파라체인 식별자를 예약하는 트랜잭션 구성을 확인한 후 제출을 클릭합니다.

    • 파라체인 식별자를 예약하는 데 사용한 계정은 트랜잭션에 대한 요금이 청구되는 계정이며, 해당 식별자와 연관된 계정이 됩니다.

  6. 트랜잭션을 승인하기 위해 서명 및 제출을 클릭합니다.

  7. 트랜잭션을 제출한 후 네트워크를 클릭하고 탐색기를 선택합니다.

  8. registrar.Reserved 이벤트 목록을 확인하고 이벤트를 클릭하여 트랜잭션에 대한 세부 정보를 확인합니다.

이제 파라체인이 릴레이체인에 연결될 수 있도록 체인 스펙 을 준비하고 필요한 파일을 생성할 준비가 되었습니다. 이때 예약한 파라체인 식별자(paraId 2000)를 사용하여 파라체인이 릴레이체인에 연결되도록 해야 합니다.

파라체인 등록 절차

평문 체인 스펙 수정하기

로컬 릴레이체인에 파라체인을 등록하려면 평문 체인 스펙을 수정하여 예약한 파라체인 식별자를 사용해야 합니다.

파라체인 템플릿 노드의 평문 체인 스펙을 생성하려면 다음 명령을 실행하세요:

./target/release/parachain-template-node build-spec --disable-default-bootnode > plain-para-template-chainspec.json
  • 생성된 평문 체인 스펙을 텍스트 편집기에서 엽니다.

  • 이전에 예약한 파라체인 식별자로 para_id를 설정합니다.

  • 예를 들어, 예약한 식별자가 2000인 경우 para_id 필드를 2000으로 설정합니다:

    ...
    "relay_chain": "infra-relay-local",
    "para_id": 2000,
    "codeSubstitutes": {},
    "genesis": {
       ...
    }
  • parachainId 를 예약한 파라체인 식별자로 설정합니다.

  • 예를 들어, 예약한 식별자가 2000인 경우 para_id 필드를 2000으로 설정합니다:

    ...
       "parachainSystem": null,
       "parachainInfo": {
         "parachainId": 2000
       },
    ...
  • 동일한 로컬 네트워크에서 누군가와 동시에 이 튜토리얼을 완료하는 경우, 해당 노드와 피어링되지 않도록 평문 체인 스펙을 수정해야 합니다. 평문 체인 스펙 JSON 파일에서 protocolId 키를 찾고 어떤 고유한 값으로 변경해줍니다.

       "protocolId": "infrablockchain"
  • 변경 사항을 저장하고 평문 체인 스펙 파일을 닫습니다.

수정된 체인 스펙 파일에서 원시(raw) 체인 스펙 파일을 생성하려면 다음 명령을 실행하세요:

./target/release/parachain-template-node build-spec --chain plain-para-template-chainspec.json --disable-default-bootnode --raw > raw-para-template-chainspec.json

이 명령은 두 개의 콜레이터가 있는 새로운 원시(raw) 체인 스펙 파일을 생성합니다.

2023-12-01 13:00:50 Building chain spec
2023-12-01 13:00:50 assembling new collators for new session 0 at #0
2023-12-01 13:00:50 assembling new collators for new session 1 at #0

파라체인 웹어셈블리 런타임 및 제네시스 상태 추출하기

등록할 파라체인 콜레이터를 준비하려면 다음을 수행하세요:

  1. 파라체인을 위한 웹어셈블리 런타임을 내보냅니다.

    릴레이체인은 파라체인 블록의 유효성을 검사하기 위해 파라체인 등록시 각 파라체인의 웹어셈블리 런타임을 요구합니다. 파라체인에 대한 웹어셈블리 런타임을 내보내려면 다음과 유사한 명령을 실행합니다:

    ./target/release/parachain-template-node export-genesis-wasm --chain raw-para-template-chainspec.json para-2000-wasm
  2. 파라체인 제네시스 상태를 생성합니다.

    파라체인을 등록하려면 릴레이체인이 파라체인의 제네시스 상태를 알아야 합니다. 전체 제네시스 상태를 16진수로 인코딩하여 파일로 내보내려면 다음과 유사한 명령을 실행합니다:

    ./target/release/parachain-template-node export-genesis-state --chain raw-para-template-chainspec.json para-2000-genesis-state

    내보낸 런타임 및 상태는 제네시스 블록을 위한 것이어야 합니다. 이전 상태를 가진 파라체인을 릴레이체인에 연결할 수 없습니다. 모든 파라체인은 블록 높이 0 부터 시작해야 합니다.

콜레이터 노드 시작하기

콜레이터 노드는 파라체인에 특화된 특수한 노드로써 다음과 같은 역할을 수행합니다:

  • 릴레이체인의 최신 상태 가져오기

  • 파라체인 블록을 생성하여 릴레이체인에 전달하기

  1. 다음과 같이 명령어를 입력하여 콜레이터 노드를 시작합니다:

    ./target/release/parachain-template-node \
    --alice \
    --collator \
    --force-authoring \
    --chain raw-para-template-chainspec.json \
    --base-path /tmp/parachain/alice \
    --port 40333 \
    --rpc-port 8844 \
    -- \
    --execution wasm \
    --chain ../infrablockspace/raw-infra-relay-chainspec.json \
    --port 30343 \
    --rpc-port 9977
  • 이 명령에서 -- 인자 이전에 전달된 인수는 콜레이터를 위한 것입니다.

  • -- 이후의 내장된 릴레이체인 노드를 위한 것입니다.

  • --collator 옵션을 통해 해당 노드가 콜레이터 노드임을 명시합니다.

  • 이 명령에서는 파라체인의 원시(raw) 체인 스펙과 릴레이체인의 원시(raw) 체인 스펙을 모두 지정합니다.

  • 이 예제에서는 infrablockspace 디렉토리에 있는 raw-infra-relay-chainspec.json이라는 로컬 릴레이체인의 원시(raw) 체인 스펙을 사용합니다.

  • 두 번째 --chain 명령줄이 로컬 릴레이체인의 원시(raw) 체인 스펙 파일 경로를 지정하도록 확인하세요.

  • 다른 파라체인 노드를 시작하는 경우 동일한 릴레이체인 스펙 파일을 사용하지만 다른 기본 경로와 포트 번호를 사용해야 합니다.

  • 콜레이터 노드를 시작한 터미널에서 다음과 유사한 출력을 볼 수 있어야 합니다:

    Parachain Collator Template
    ✌️  version 0.1.0-336530d3bdd
    ❤️  by Anonymous, 2020-2023
    📋 Chain specification: Local Testnet
    🏷  Node name: Alice
    👤 Role: AUTHORITY
    💾 Database: RocksDb at /tmp/parachain/alice/chains/local_testnet/db/full
    no effect anymore and will be removed in the future!
    Parachain Account: 5Ec4AhPUwPeyTFyuhGuBbD224mY85LKLMSqSSo33JYWCazU4
    Is collating: yes
    [Relaychain] 🏷  Local node identity is: 12D3KooWR8wJbGWrjzKTpuXQvbuM1rE2GAE9JVEFEwAyNX6LV9nN
    [Relaychain] 💻 Operating system: ...
    ......
    [Relaychain] 📦 Highest known block at #95
    ...
    [Parachain] 🏷  Local node identity is: 12D3KooWF464pkLaHbsfc4DzDkYuhdVE4zSqBHR1gPapLvwsfZtg
    ...
  • 템플릿 콜레이터 노드가 독립적인 노드로 실행되고 콜레이터 노드에 내장된 릴레이체인 노드가 로컬 릴레이체인 검증자 노드와 피어로 연결되는 것을 볼 수 있어야 합니다.(내장된 릴레이체인이 로컬 릴레이체인 노드와 피어링되지 않는 경우 방화벽을 비활성화하거나 릴레이 노드의 주소를 bootnodes 매개변수에 추가해 보세요.)

로컬 릴레이체인에 등록하기

로컬 릴레이체인과 콜레이터 노드가 실행 중인 상태에서 로컬 릴레이체인에 파라체인을 등록할 준비가 되었습니다. 실제 퍼블릭 메인 네트워크에서 파라체인 등록은 일반적으로 거버넌스 과정을 통해 이루어지지만 본 튜토리얼에서는 Sudo 트랜잭션을 이용해 진행해 나갈 예정입니다.

파라체인 등록 과정:

  1. 최소 두개 이상의 밸리데이터 노드로 구성된 로컬 릴레이체인이 실행 중인지 확인합니다.

  2. 개발자를 클릭하고 Sudo를 선택합니다.

  3. paraSudoWrapper 를 선택한 다음 sudoScheduleParaInitialize(id, genesis) 를 선택합니다.

  • 트랜잭션 매개변수 설정:

    • id: 예약한 ParaId를 입력합니다.본 튜토리얼에서는 예약한 식별자가 2000인 경우입니다.

    • genesisHead: 파일 업로드를 클릭하고 파라체인을 위해 내보낸 제네시스 상태를 업로드합니다. 본 튜토리얼에서는 para-2000-genesis 파일을 선택합니다.

    • validationCode: 파일 업로드를 클릭하고 파라체인을 위해 내보낸 웹어셈블리 런타임을 업로드합니다. 본 튜토리얼에서는 para-2000-wasm 파일을 선택합니다.

    • paraKind: 예를 선택합니다.

  1. Sudo 제출을 클릭합니다.

  2. 트랜잭션 세부 정보를 검토한 다음 서명 및 제출을 클릭하여 트랜잭션을 승인합니다.

    트랜잭션을 제출한 후 네트워크를 클릭하고 탐색기를 선택합니다.

  3. 최근 이벤트 목록에서 sudo.Sudid 및 paras.PvfCheckAccepted 이벤트를 확인하고 이벤트를 클릭하여 트랜잭션에 대한 세부 정보를 확인합니다.

  4. 파라체인 등록이 완료되면 익스플로러에서 확인할 수 있습니다. 네트워크를 클릭하고 파라체인을 선택하세요.

  5. 새로운 epoch 가 시작될 때까지 기다립니다.

    • 릴레이체인은 각 파라체인의 최신 블록(헤드)을 추적합니다.

    • 이것이 멀티체인 아키텍처인 인프라블록체인(InfraBlockchain) 공유된 보안(shared security) 를 달성하는 방법입니다.

    • 다음 epoch 에서 파라체인이 릴레이체인에 연결된 후 콜레이터 노드를 시작할 때 설정한 포트로 이동하면 익스플로러에서 해당 파라체인에 대한 정보를 볼 수 있습니다.

파라체인 트랜잭션 제출하기

이제 파라체인이 실행되고 릴레이체인에 연결되었으므로 익스플로러를 사용하여 파라체인에 트랜잭션을 제출할 수 있습니다.

트랜잭션을 제출하려면 다음을 수행하세요:

  1. 응용 프로그램의 왼쪽 상단에 있는 네트워크 선택기를 클릭합니다.

  2. 사용자 정의 엔드포인트를 파라체인의 WebSocket 포트에 연결하도록 변경합니다. 이 튜토리얼의 설정을 따르면 포트 8844에 연결합니다.

  3. 계정을 클릭하고 전송을 선택하여 Alice에서 다른 계정으로 자금을 보냅니다.

    • 자금을 보낼 계정을 선택합니다.

    • 금액을 입력합니다.

    • 전송 생성을 클릭합니다.

    • 트랜잭션을 검토한 다음 서명 및 제출을 클릭하여 전송을 승인합니다.

  4. 계정을 클릭하여 전송이 완료되고 파라체인 트랜잭션이 성공적으로 수행되었는지 확인합니다.

블록체인 상태 재설정하기

테스트 및 개발 목적의 네트워크에서는 노드를 시작할 때 마다 블록체인 상태가 초기화되고 처음부터 다시 시작됩니다. 그러나 체인 상태를 삭제하거나 데이터베이스를 수동으로 삭제하는 경우 데이터를 복구하거나 체인 상태를 복원할 수 없으므로 주의해야 합니다. 보존하려는 데이터가 있는 경우 파라체인 상태를 초기화하기 전에 데이터의 사본을 보관하도록 해야 합니다.

본 튜토리얼에서는 테스트 및 개발 목적이 아닌 실제 네트워크를 시뮬레이션 하는 로컬 환경의 네트워크입니다. 따라서 새롭게 다시 시작하려면 로컬 릴레이체인 노드와 파라체인의 체인 상태를 완전히 제거해야 합니다.

블록체인 상태를 재설정하려면 다음을 수행하세요:

  1. 파라체인 템플릿 노드가 실행 중인 터미널에서 Control-c를 누릅니다.

  2. 다음 명령을 실행하여 파라체인 콜레이터 상태를 제거합니다:

    rm -rf /tmp/parachain
  3. alice 검증자 노드 또는 bob 검증자 노드가 실행 중인 터미널에서 Control-c를 누릅니다.

  4. 다음 명령을 실행하여 검증자 상태를 제거합니다:

    rm -rf /tmp/relay

릴레이체인에 연결된 파라체인은 각각의 고유 식별자인 ParaID를 예약해야 합니다. 이 식별자를 통해 릴레이체인은 파라체인을 식별하고 연결시킬 수 있습니다. 이 식별자는 이나 가 차지한 슬롯을 식별하는 데 사용될 수 있기 때문에 ParaID라고 합니다.

브라우저에서 를 엽니다.

더 자세한 내용은 을 참고하시기 바랍니다.

브라우저에서 를 엽니다. 위의 파라체인 식별자를 예약할 때 처럼, RPC 및 웹소켓 포트를 이용해 릴레이체인에 연결합니다.

Sudo 등록 이벤트 보기

릴레이체인 블록이 확정되면 을 완료한 파라체인 블록도 확정됩니다.

브라우저에서 를 엽니다.

로컬 릴레이체인 준비
커스텀 체인 스펙
파라체인
파라스레드
인프라블록체인 익스플로러
다음
인프라블록체인 익스플로러
검증 과정
인프라블록체인 익스플로러
로컬 네트워크 연결
파라체인으로 이동
파라체인 식별자 예약
파라체인 등록을 위해 Sudo 선택
PVF Check Accepted