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
  • 시작하기 전에
  • 튜토리얼 목표
  • 계정 및 키 생성하기
  • 커스텀 체인 스펙 생성하기
  • 체인 스펙을 원시 형식(raw format)으로 변환하기
  • 개인 네트워크 시작하기
  • 첫 번째 노드 시작하기
  • 노드 작업 정보 보기
  • 키스토어에 키 추가하기
  • 다른 참여자가 참여할 수 있도록 하기
  • 다음 단계로 넘어가기
  1. 인프라블록체인
  2. 배우기
  3. Substrate
  4. 튜토리얼
  5. 블록체인 구축

신뢰할 수 있는 노드 추가

개인 블록체인 네트워크를 위한 계정 키와 커스텀 체인 스펙 생성하기

Previous블록체인 구축Next특정 노드 승인

Last updated 1 year ago

이 튜토리얼은 권한이 있는 프라이빗 밸리데이터로 이루어진 작은 독립형 블록체인 네트워크를 시작하는 방법을 보여줍니다.

에서 배운 대로, 모든 블록체인은 네트워크의 노드들이 특정 시점에서 데이터의 상태에 대해 동의하는 것을 요구하며, 이 상태에 대한 동의는 합의라고 합니다.

Substrate 노드 템플릿은 권한(authority) 라운드 또는 Aura 합의로도 알려진 권한 증명 합의 모델을 사용합니다. Aura 합의 프로토콜은 블록 생성을 권한이 있는 계정의 회전 목록으로 제한합니다. 권한이 있는 계정들은 라운드 로빈 방식으로 블록을 생성하며, 일반적으로 네트워크에서 신뢰할 수 있는 참여자로 간주됩니다.

이 합의 모델은 제한된 참여자 수를 위한 솔로 블록체인을 시작하는 간단한 방법을 제공합니다. 이 튜토리얼에서는 네트워크에 참여할 노드에 권한을 부여하기 위해 필요한 키를 생성하는 방법, 네트워크에 대한 구성 및 정보를 다른 권한이 부여된 계정과 공유하는 방법, 승인된 밸리데이터 집합으로 네트워크를 시작하는 방법을 살펴볼 것입니다.

시작하기 전에

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

  • 을 설치하여 Substrate 개발 환경을 구성했는지 확인하세요.

  • 을 완료하고 Substrate 노드 템플릿을 로컬에 설치했는지 확인하세요.

  • 에서 설명한 대로 미리 정의된 계정을 사용하여 단일 컴퓨터에서 노드를 시작했는지 확인하세요.

  • 소프트웨어 개발 및 커맨드 라인 인터페이스 사용에 대해 일반적으로 알고 있는지 확인하세요.

  • 블록체인 및 스마트 컨트랙트 플랫폼에 대해 일반적으로 알고 있는지 확인하세요.

튜토리얼 목표

이 튜토리얼을 완료하면 다음 목표를 달성할 수 있습니다:

  • 네트워크 권한자(authority)로 사용할 키 쌍 생성하기.

  • 커스텀 체인 스펙 파일 생성하기.

  • 두 개의 프라이빗 노드 시작하기.

계정 및 키 생성하기

키 생성 옵션

이 튜토리얼에서는 미리 정의된 키 쌍을 사용하여 튜토리얼을 완료할 수 있지만, 이러한 키는 실제 환경에서 사용해서는 안 됩니다. 미리 정의된 키 쌍이나 보안이 더 강화된 subkey 프로그램 대신에 Substrate 노드 템플릿과 key 하위 커맨드를 사용하여 키를 생성하는 생성하는 방법을 설명합니다.

노드 템플릿을 사용하여 로컬 키 생성하기

생산용 블록체인에 사용할 키를 생성할 때는 인터넷에 연결된 적이 없는 오프라인 컴퓨터를 사용하는 것이 좋습니다. 최소한 인터넷에 연결을 끊은 후에 공개 또는 제어되지 않는 공공 또는 개인 블록체인에서 사용할 키를 생성해야 합니다.

그러나 이 튜토리얼에서는 인터넷에 연결된 상태에서 로컬로 무작위 키를 생성하기 위해 node-template 커맨드 라인 옵션을 사용할 수 있습니다.

노드 템플릿을 사용하여 키를 생성하려면 다음 단계를 따르세요:

  1. 컴퓨터에서 터미널 쉘을 엽니다.

  2. Substrate 노드 템플릿을 컴파일한 루트 디렉토리로 이동합니다.

  3. 다음 명령을 실행하여 무작위 비밀 문구와 키를 생성합니다:

    ./target/release/node-template key generate --scheme Sr25519 --password-interactive
  4. 생성된 키에 대한 비밀번호를 입력합니다.

    이 명령은 키를 생성하고 다음과 유사한 출력을 표시합니다:

    Secret phrase:  pig giraffe ceiling enter weird liar orange decline behind total despair fly
    Secret seed:       0x0087016ebbdcf03d1b7b2ad9a958e14a43f2351cd42f2f0a973771b90fb0112f
    Public key (hex):  0x1a4cc824f6585859851f818e71ac63cf6fdc81018189809814677b2a4699cf45
    Account ID:        0x1a4cc824f6585859851f818e71ac63cf6fdc81018189809814677b2a4699cf45
    Public key (SS58): 5CfBuoHDvZ4fd8jkLQicNL8tgjnK8pVG9AiuJrsNrRAx6CNW
    SS58 Address:      5CfBuoHDvZ4fd8jkLQicNL8tgjnK8pVG9AiuJrsNrRAx6CNW

    이제 aura를 사용하여 블록을 생성하기 위한 Sr25519 키를 가지고 있습니다. 이 예제에서 계정의 Sr25519 공개 키는 5CfBuoHDvZ4fd8jkLQicNL8tgjnK8pVG9AiuJrsNrRAx6CNW입니다.

  5. key 하위 명령을 사용하여 방금 생성한 계정의 비밀 문구를 사용하여 키를 파생시킵니다.

    예를 들어, 다음과 유사한 명령을 실행합니다:

    ./target/release/node-template key inspect --password-interactive --scheme Ed25519 "pig giraffe ceiling enter weird liar orange decline behind total despair fly"
  6. 키를 생성할 때 사용한 비밀번호를 입력합니다.

    이 명령은 다음과 유사한 출력을 표시합니다:

    Secret phrase `pig giraffe ceiling enter weird liar orange decline behind total despair fly` is account:
    Secret seed:       0x0087016ebbdcf03d1b7b2ad9a958e14a43f2351cd42f2f0a973771b90fb0112f
    Public key (hex):  0x2577ba03f47cdbea161851d737e41200e471cd7a31a5c88242a527837efc1e7b
    Public key (SS58): 5CuqCGfwqhjGzSqz5mnq36tMe651mU9Ji8xQ4JRuUTvPcjVN
    Account ID:        0x2577ba03f47cdbea161851d737e41200e471cd7a31a5c88242a527837efc1e7b
    SS58 Address:      5CuqCGfwqhjGzSqz5mnq36tMe651mU9Ji8xQ4JRuUTvPcjVN

    이제 grandpa를 사용하여 블록을 최종화하기 위한 Ed25519 키를 가지고 있습니다. 이 예제에서 계정의 Ed25519 공개 키는 5CuqCGfwqhjGzSqz5mnq36tMe651mU9Ji8xQ4JRuUTvPcjVN입니다.

두 번째 키 쌍 생성하기

이 튜토리얼에서는 개인 네트워크가 두 개의 노드로 구성되므로 두 개의 키 쌍이 필요합니다. 튜토리얼을 계속 진행하기 위해 다음 옵션 중 하나를 선택할 수 있습니다:

  • 미리 정의된 계정 중 하나의 키를 사용할 수 있습니다.

  • 이전 섹션의 단계를 반복하여 로컬 컴퓨터에서 다른 신원으로 두 번째 키 쌍을 생성할 수 있습니다.

  • 로컬 컴퓨터에서 두 번째 신원을 시뮬레이션하기 위해 자식 키 쌍을 파생시킬 수 있습니다.

  • 개인 네트워크에 참여할 수 있는 키를 생성하기 위해 다른 참여자를 모집할 수 있습니다.

이 튜토리얼에서는 두 번째 키 쌍으로 다음을 사용합니다:

  • Sr25519: aura에 대한 5EJPj83tJuJtTVE2v7B9ehfM7jNT44CBFaPWicvBwYyUKBS6.

  • Ed25519: grandpa에 대한 5FeJQsfmbbJLTH1pvehBxrZrT5kHvJFj84ZaY5LK7NU87gZS.

커스텀 체인 스펙 생성하기

블록체인에 사용할 키를 생성한 후, 해당 키 쌍을 사용하여 커스텀 체인 스펙을 생성하고, 이 커스텀 체인 스펙을 밸리데이터라고 불리는 신뢰할 수 있는 네트워크 참여자와 공유할 수 있도록 준비합니다.

다른 사람들이 개인 블록체인 네트워크에 참여할 수 있도록 하려면, 그들이 고유한 키를 생성하도록 해야 합니다. 네트워크 참여자의 키를 수집한 후, local 체인 스펙을 대체할 커스텀 체인 스펙을 생성할 수 있습니다.

이 튜토리얼에서는 두 노드 네트워크를 보여주기 위해 local 체인 스펙을 수정한 커스텀 체인 스펙을 생성합니다. 만약 필요한 키를 가지고 있다면, 네트워크에 더 많은 노드를 추가하는 방법은 동일한 단계를 따르면 됩니다.

로컬 체인 스펙 수정하기

완전히 새로운 체인 스펙을 작성하는 대신, 미리 정의된 local 체인 스펙을 수정할 수 있습니다.

로컬 사양을 기반으로 새로운 체인 스펙을 생성하려면 다음 단계를 따르세요:

  1. 컴퓨터에서 터미널 쉘을 엽니다.

  2. Substrate 노드 템플릿을 컴파일한 루트 디렉토리로 이동합니다.

  3. 다음 명령을 실행하여 local 체인 스펙을 customSpec.json이라는 파일로 내보냅니다:

    ./target/release/node-template build-spec --disable-default-bootnode --chain local > customSpec.json

    customSpec.json 파일을 텍스트 편집기에서 열면 여러 필드가 포함되어 있는 것을 볼 수 있습니다. 그 중 하나는 cargo build --release 명령을 사용하여 빌드한 런타임의 WebAssembly (Wasm) 바이너리입니다. WebAssembly (Wasm) 바이너리는 큰 덩어리이므로 필드를 변경해야 하는지 미리보기하기 위해 처음 몇 줄과 마지막 몇 줄을 볼 수 있습니다.

  4. 다음 명령을 실행하여 customSpec.json 파일의 처음 몇 필드를 미리보기합니다:

    head customSpec.json

    이 명령은 파일의 처음 필드를 표시합니다. 예를 들어:

    {
      "name": "Local Testnet",
      "id": "local_testnet",
      "chainType": "Local",
      "bootNodes": [],
      "telemetryEndpoints": null,
      "protocolId": null,
      "properties": null,
      "consensusEngine": null,
      "codeSubstitutes": {},
  5. 다음 명령을 실행하여 customSpec.json 파일의 마지막 필드를 미리보기합니다:

    tail -n 80 customSpec.json

    이 명령은 Wasm 바이너리 필드를 포함한 마지막 섹션을 표시합니다. 이 섹션에는 런타임에서 사용되는 sudo 및 balances 팔렛 등 몇 가지 팔렛의 세부 정보가 포함되어 있습니다.

  6. 텍스트 편집기에서 customSpec.json 파일을 엽니다.

  7. name 필드를 수정하여 이 체인 스펙을 커스텀 체인 스펙으로 식별합니다.

    예를 들어:

    "name": "My Custom Testnet",
  8. aura 필드를 수정하여 블록을 생성할 권한이 있는 노드를 지정합니다. 네트워크 참여자마다 Sr25519 SS58 주소 키를 추가합니다.

    "aura": { "authorities": [
        "5CfBuoHDvZ4fd8jkLQicNL8tgjnK8pVG9AiuJrsNrRAx6CNW", 
        "5CXGP4oPXC1Je3zf5wEDkYeAqGcGXyKWSRX2Jm14GdME5Xc5"
      ]
    },
  9. grandpa 필드를 수정하여 블록을 최종화할 권한이 있는 노드를 지정합니다. 네트워크 참여자마다 Ed25519 SS58 주소 키와 투표 가중치를 추가합니다.

    "grandpa": {
        "authorities": [
          [
            "5CuqCGfwqhjGzSqz5mnq36tMe651mU9Ji8xQ4JRuUTvPcjVN",
            1
          ],
          [
            "5DpdMN4bVTMy67TfMMtinQTcUmLhZBWoWarHvEYPM4jYziqm",
            1
          ]
        ]
      },

    grandpa 섹션의 authorities 필드에는 두 개의 데이터 값이 있음에 유의하세요. 첫 번째 값은 주소 키입니다. 두 번째 값은 가중(Weighted) 투표를 지원하기 위해 사용됩니다. 이 예제에서 각 밸리데이터의 가중치는 1 투표입니다.

  10. 변경 사항을 저장하고 파일을 닫습니다.

밸리데이터 추가하기

앞에서 보았듯이, aura 및 grandpa 섹션을 수정하여 체인 스펙에 권한 주소를 추가하거나 변경할 수 있습니다. 이 기술을 사용하여 원하는 만큼 많은 밸리데이터를 추가할 수 있습니다.

밸리데이터를 추가하려면 다음을 수행하세요:

  • aura 섹션을 수정하여 Sr25519 주소를 포함합니다.

  • grandpa 섹션을 수정하여 Ed25519 주소와 투표 가중치를 포함합니다.

각 밸리데이터에 대해 고유한 키를 사용해야 합니다. 두 개의 밸리데이터가 동일한 키를 가지고 있는 경우 충돌하는 블록이 생성됩니다.

체인 스펙을 원시 형식(raw format)으로 변환하기

밸리데이터 정보가 포함된 체인 스펙을 준비한 후, 사용하기 전에 원시 스펙 형식으로 변환해야 합니다. 원시 체인 스펙에는 변환되지 않은 사양과 동일한 정보가 포함되어 있습니다. 그러나 원시 체인 스펙에는 노드가 로컬 저장소에서 데이터를 참조하는 데 사용하는 인코딩된 저장소 키도 포함되어 있습니다. 원시 체인 스펙을 배포하면 각 노드가 올바른 저장소 키를 사용하여 데이터를 저장하도록 보장할 수 있습니다.

체인 스펙을 원시 형식으로 변환하려면 다음을 수행하세요:

  1. 컴퓨터에서 터미널 쉘을 엽니다.

  2. Substrate 노드 템플릿을 컴파일한 루트 디렉토리로 이동합니다.

  3. 다음 명령을 실행하여 customSpec.json 체인 스펙을 customSpecRaw.json 파일로 원시 형식으로 변환합니다:

    ./target/release/node-template build-spec --chain=customSpec.json --raw --disable-default-bootnode > customSpecRaw.json

개인 네트워크 시작하기

계속하기 전에 다음을 확인하세요:

  • 적어도 두 개 이상의 권한을 갖고 있는 계정에 대한 계정 키를 생성하거나 수집했는지 확인하세요.

  • 커스텀 체인 스펙을 업데이트하여 블록 생성 (aura) 및 블록 최종화 (grandpa)를 위한 키를 포함했는지 확인하세요.

  • 커스텀 체인 스펙을 원시 형식으로 변환하고, 원시 체인 스펙을 개인 네트워크에 참여하는 노드에게 배포했는지 확인하세요.

이러한 단계를 완료한 경우, 개인 블록체인에서 첫 번째 노드를 시작할 준비가 되었습니다.

첫 번째 노드 시작하기

개인 블록체인 네트워크의 첫 번째 참여자로서, 첫 번째 노드인 부트노드를 시작하는 책임이 있습니다.

첫 번째 노드를 시작하려면 다음을 수행하세요:

  1. 컴퓨터에서 터미널 쉘을 엽니다.

  2. Substrate 노드 템플릿을 컴파일한 루트 디렉토리로 이동합니다.

  3. 다음 명령을 실행하여 커스텀 체인 스펙을 사용하여 첫 번째 노드를 시작합니다:

    ./target/release/node-template \
       --base-path /tmp/node01 \
       --chain ./customSpecRaw.json \
       --port 30333 \
       --rpc-port 9945 \
       --telemetry-url "wss://telemetry.polkadot.io/submit/ 0" \
       --validator \
       --rpc-methods Unsafe \
       --name MyNode01 \
       --password-interactive

노드01 키를 생성할 때 사용한 비밀번호를 입력하라는 메시지가 표시됩니다.

다음 명령줄 옵션을 사용하여 노드를 시작하는데 유의하세요:

  • --base-path 명령줄 옵션은 이 첫 번째 노드와 관련된 체인을 위한 커스텀 위치를 지정합니다.

  • --chain 명령줄 옵션은 커스텀 체인 스펙을 지정합니다.

  • --validator 명령줄 옵션은 이 노드가 체인의 밸리데이터임을 나타냅니다.

  • --rpc-methods Unsafe 명령줄 옵션은 이 블록체인이 실제 환경에서 사용되지 않고 있기 때문에 안전하지 않은 통신 모드를 사용하여 튜토리얼을 계속할 수 있도록 허용합니다.

  • --name 명령줄 옵션을 사용하여 텔레메트리 UI에서 노드에 대한 사람이 읽을 수 있는 이름을 지정할 수 있습니다.

이 명령은 미리 정의된 계정 대신에 자체 키를 사용하여 노드를 시작합니다. 알려진 키가 있는 미리 정의된 계정을 사용하지 않으므로, 별도의 단계에서 키를 키스토어에 추가해야 합니다.

노드 작업 정보 보기

로컬 노드를 시작한 후, 작업에 대한 정보가 터미널 쉘에 표시됩니다. 해당 터미널에서 다음과 유사한 출력을 확인하세요:

2021-11-03 15:32:14 Substrate Node
2021-11-03 15:32:14 ✌️  version 3.0.0-monthly-2021-09+1-bf52814-x86_64-macos
2021-11-03 15:32:14 ❤️  by Substrate DevHub <https://github.com/substrate-developer-hub>, 2017-2021
2021-11-03 15:32:14 📋 Chain specification: My Custom Testnet
2021-11-03 15:32:14 🏷 Node name: MyNode01
2021-11-03 15:32:14 👤 Role: AUTHORITY
2021-11-03 15:32:14 💾 Database: RocksDb at /tmp/node01/chains/local_testnet/db
2021-11-03 15:32:14 ⛓  Native runtime: node-template-100 (node-template-1.tx1.au1)
2021-11-03 15:32:15 🔨 Initializing Genesis block/state (state: 0x2bde…8f66, header-hash: 0x6c78…37de)
2021-11-03 15:32:15 👴 Loading GRANDPA authority set from genesis on what appears to be first startup.
2021-11-03 15:32:15 ⏱  Loaded block-time = 6s from block 0x6c78abc724f83285d1487ddcb1f948a2773cb38219c4674f84c727833be737de
2021-11-03 15:32:15 Using default protocol ID "sup" because none is configured in the chain specs
2021-11-03 15:32:15 🏷 Local node identity is: 12D3KooWLmrYDLoNTyTYtRdDyZLWDe1paxzxTw5RgjmHLfzW96SX
2021-11-03 15:32:15 📦 Highest known block at #0
2021-11-03 15:32:15 〽️ Prometheus exporter started at 127.0.0.1:9615
2021-11-03 15:32:15 Listening for new connections on 127.0.0.1:9945.
2021-11-03 15:32:20 💤 Idle (0 peers), best: #0 (0x6c78…37de), finalized #0 (0x6c78…37de), ⬇ 0 ⬆ 0

다음 정보를 확인하세요:

  • 출력에는 커스텀 체인 스펙이 사용되고 있는 것이 나타납니다. 이는 --chain 명령줄 옵션을 사용하여 지정한 커스텀 체인 스펙입니다.

  • 출력에는 --validator 명령줄 옵션을 사용하여 이 노드가 밸리데이터임을 나타내고 있습니다.

  • 출력에는 블록 해시 (state: 0x2bde…8f66, header-hash: 0x6c78…37de)로 제네시스 블록이 초기화되고 있음을 나타냅니다.

  • 출력에는 노드의 로컬 신원이 표시됩니다. 이 예제에서 노드 신원은 12D3KooWLmrYDLoNTyTYtRdDyZLWDe1paxzxTw5RgjmHLfzW96SX입니다.

  • 출력에는 노드에 사용되는 IP 주소가 로컬 호스트 127.0.0.1임을 나타냅니다.

이러한 값은 이 특정 튜토리얼 예제에 대한 것입니다. 출력의 값은 노드에 특정되며, 다른 네트워크 참여자가 부트노드에 연결할 수 있도록 자신의 노드에 대한 값을 제공해야 합니다.

자체 키를 키스토어에 추가하고 노드를 다시 시작한 후, 블록이 생성되는 것을 확인하기 전에 노드를 중지하세요.

키스토어에 키 추가하기

첫 번째 노드를 시작한 후에는 아직 블록이 생성되지 않았습니다. 다음 단계는 네트워크의 각 노드에 대해 키스토어에 두 가지 유형의 키를 추가하는 것입니다.

각 노드에 대해 다음을 수행하세요:

  • 블록 생성 (aura)을 가능하게 하기 위해 aura 권한 키를 추가합니다.

  • 블록 최종화 (grandpa)를 가능하게 하기 위해 grandpa 권한 키를 추가합니다.

키를 키스토어에 추가하는 방법은 여러 가지가 있습니다. 이 튜토리얼에서는 key 하위 명령을 사용하여 로컬에서 생성된 비밀 키를 삽입하는 방법을 사용할 수 있습니다.

키를 키스토어에 삽입하려면 다음을 수행하세요:

  1. 컴퓨터에서 터미널 쉘을 엽니다.

  2. Substrate 노드 템플릿을 컴파일한 루트 디렉토리로 이동합니다.

  3. 다음 명령을 실행하여 aura 키를 삽입합니다. key 하위 명령을 사용하여 생성된 비밀 키를 사용합니다.

    ./target/release/node-template key insert --base-path /tmp/node01 \
       --chain customSpecRaw.json \
       --scheme Sr25519 \
       --suri <your-secret-seed> \
       --password-interactive \
       --key-type aura

    <your-secret-seed>를 첫 번째 키 쌍을 생성할 때 사용한 비밀 문구 또는 비밀 키로 대체하세요. 이 튜토리얼에서 사용한 비밀 문구는 pig giraffe ceiling enter weird liar orange decline behind total despair fly이므로 --suri 명령줄 옵션에 해당 문자열을 지정합니다.

    예를 들어:

    --suri "pig giraffe ceiling enter weird liar orange decline behind total despair fly"

    지정된 파일 위치에서 키를 삽입할 수도 있습니다. 사용 가능한 명령줄 옵션에 대한 정보는 다음 명령을 실행하세요:

    ./target/release/node-template key insert --help
  4. 키를 생성할 때 사용한 비밀번호를 입력합니다.

  5. 다음 명령을 실행하여 grandpa 키를 삽입합니다. key 하위 명령을 사용하여 생성된 비밀 키를 사용합니다.

    ./target/release/node-template key insert \
       --base-path /tmp/node01 \
       --chain customSpecRaw.json \
       --scheme Ed25519 \
       --suri <your-secret-key> \
       --password-interactive \
       --key-type gran

    <your-secret-seed>를 첫 번째 키 쌍을 생성할 때 사용한 비밀 문구 또는 비밀 키로 대체하세요. 이 튜토리얼에서 사용한 비밀 문구는 pig giraffe ceiling enter weird liar orange decline behind total despair fly이므로 --suri 명령줄 옵션에 해당 문자열을 지정합니다.

  6. 키를 생성할 때 사용한 비밀번호를 입력합니다.

  7. 다음 명령을 실행하여 node01의 키스토어에 키가 있는지 확인합니다.

    ls /tmp/node01/chains/local_testnet/keystore

    다음과 유사한 출력이 표시됩니다:

    617572617e016f19ab623ba5f487f540017c1edbab06c0b211a16d40531dbd62d94ceb24
    6772616e4ac976937e53fd836512cfd288bb438584ba366cbf9be403a0acd82c1c7c0739

다른 참여자가 참여할 수 있도록 하기

이제 다른 밸리데이터가 --bootnodes 및 --validator 명령줄 옵션을 사용하여 네트워크에 참여할 수 있도록 할 수 있습니다.

개인 네트워크에 두 번째 밸리데이터를 추가하려면 다음을 수행하세요:

  1. 두 번째 컴퓨터에서 터미널 쉘을 엽니다.

  2. Substrate 노드 템플릿을 컴파일한 루트 디렉토리로 이동합니다.

  3. 다음 명령을 실행하여 두 번째 블록체인 노드를 시작합니다:

    ./target/release/node-template \
       --base-path /tmp/node02 \
       --chain ./customSpecRaw.json \
       --port 30334 \
       --rpc-port 9946 \
       --telemetry-url "wss://telemetry.polkadot.io/submit/ 0" \
       --validator \
       --rpc-methods Unsafe \
       --name MyNode02 \
       --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWLmrYDLoNTyTYtRdDyZLWDe1paxzxTw5RgjmHLfzW96SX \
       --password-interactive

    이 명령은 base-path, name, validator 명령줄 옵션을 사용하여 이 노드를 개인 네트워크의 두 번째 밸리데이터로 식별합니다. --chain 명령줄 옵션은 사용할 체인 스펙 파일을 지정합니다. 이 파일은 모든 밸리데이터에서 _동일_해야 합니다. --bootnodes 명령줄 옵션에 올바른 정보를 설정했는지 확인하세요. 특히, 첫 번째 네트워크 노드의 로컬 노드 식별자를 지정했는지 확인하세요. 올바른 bootnode 식별자를 설정하지 않으면 다음과 같은 오류가 발생합니다:

    The bootnode you want to connect to at ... provided a different peer ID than the one you expect: ...
  4. 다음 명령을 실행하여 aura 비밀 키를 키스토어에 추가합니다. key 하위 명령을 사용하여 생성된 비밀 키를 사용합니다.

    ./target/release/node-template key insert --base-path /tmp/node02 \
       --chain customSpecRaw.json \
       --scheme Sr25519 \
       --suri <second-participant-secret-seed> \
       --password-interactive \
       --key-type aura

    <second-participant-secret-seed>를 두 번째 키 쌍을 생성할 때 사용한 비밀 문구 또는 비밀 키로 대체하세요. aura 키 유형은 블록 생성을 가능하게 하기 위해 필요합니다.

  5. 키를 생성할 때 사용한 비밀번호를 입력합니다.

  6. 다음 명령을 실행하여 grandpa 비밀 키를 키스토어에 추가합니다. key 하위 명령을 사용하여 생성된 비밀 키를 사용합니다.

    ./target/release/node-template key insert --base-path /tmp/node02 \
       --chain customSpecRaw.json \
       --scheme Ed25519 --suri <second-participant-secret-seed> \
       --password-interactive \
       --key-type gran

    <second-participant-secret-seed>를 두 번째 키 쌍을 생성할 때 사용한 비밀 문구 또는 비밀 키로 대체하세요. gran 키 유형은 블록 최종화를 가능하게 하기 위해 필요합니다.

    블록 최종화를 위해서는 최소한 밸리데이터의 3분의 2 이상이 각각의 키를 자신의 키스토어에 추가해야 합니다. 이 네트워크는 체인 스펙에 두 개의 밸리데이터가 구성되어 있으므로, 두 번째 노드가 키를 추가한 후에야 블록 최종화가 시작될 수 있습니다.

  7. 키를 생성할 때 사용한 비밀번호를 입력합니다.

  8. 다음 명령을 실행하여 node02의 키스토어에 키가 있는지 확인합니다.

    ls /tmp/node02/chains/local_testnet/keystore

    해당 명령어의 출력물은 다음과 같을 것입니다:

    617572610a6cadb3d6f55a121de4c89754dd835e634ae83249734dfad01c2fae7e9ac102
    6772616e5f273f61a4910897cec969b598a70a832fb7894ad7c741e2a559617898426f20

    grandpa 키를 넣은 후에는 노드를 재시작 하여야 블록이 확정되는 것을 볼 수 있을 것입니다.

  9. Control-c 를 이용하여 노드를 끕니다.

  10. 두번째 노드를 다음과 같은 커맨드로 재시작 합니다.

./target/release/node-template \
--base-path /tmp/node02 \
--chain ./customSpecRaw.json \
--port 30334 \
--rpc-port 9946 \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0' \
--validator \
--rpc-methods Unsafe \
--name MyNode02 \
--bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWLmrYDLoNTyTYtRdDyZLWDe1paxzxTw5RgjmHLfzW96SX \
--password-interactive

다음 단계로 넘어가기

이제 신뢰할 수 있는 참가자들과 함께 개인 블록체인을 시작하는 방법을 보았습니다.

이 튜토리얼에서 다음과 같은 내용을 배웠습니다:

  • 피어 블록체인 노드를 시작하고 중지하는 방법.

  • 자체 비밀 키 쌍을 생성하는 방법.

  • 생성한 키를 사용하는 커스텀 체인 스펙을 만드는 방법.

  • 커스텀 체인 스펙을 사용하는 개인 네트워크에 밸리데이터를 추가하는 방법.

이 튜토리얼에서 소개된 주제에 대해 더 자세히 알아보려면 다음 섹션을 참조하세요:

에서는 미리 정의된 계정과 키를 사용하여 피어 노드를 시작했습니다. 이 튜토리얼에서는 네트워크의 밸리데이터 노드에 대한 키를 생성하기 위해 직접 비밀 키를 생성합니다. 블록체인 네트워크의 각 참여자는 고유한 키를 생성하는 것이 중요하다는 점을 기억해야 합니다.

키를 생성하는 여러 가지 방법이 있습니다. 예를 들어, node-template 하위 커맨드, 독립형 커맨드 라인 프로그램, Polkadot-JS 애플리케이션 또는 타사 키 생성 도구를 사용하여 키 쌍을 생성할 수 있습니다.

키 쌍 및 서명 작업에 대한 자세한 내용은 를 참조하세요.

커스텀 체인 스펙을 모든 네트워크 참여자에게 배포한 후, 자체 개인 블록체인을 시작할 준비가 되었습니다. 이 단계는 에서 수행한 단계와 유사합니다. 하지만 이 튜토리얼의 단계를 따르면 여러 컴퓨터를 네트워크에 추가할 수 있습니다.

노드01의 키스토어에 키를 추가한 후, 이전에 사용한 에서 사용한 명령을 사용하여 노드를 다시 시작하세요.

블록체인 기본
Rust 및 Rust 도구 체인
로컬 블록체인 빌드
네트워크 시뮬레이션
네트워크 시뮬레이션
subkey
계정, 주소, 그리고 키
체인 스펙
subkey
암호학
첫 번째 노드 시작
공개 키 암호화
첫 번째 블록체인 노드 시작