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 노드 템플릿은 Aura를 이용하여 라운드 로빈 방식으로 블록을 생성합니다.

이 튜토리얼에서는 사전 정의된 두 개의 밸리데이터 노드를 가지고 시뮬레이션된 네트워크를 시작하는 방법을 살펴보겠습니다. 이 시뮬레이션된 네트워크에서 두 개의 노드는 서로 다른 계정과 키를 사용하여 시작되지만 하나의 컴퓨터에서 실행됩니다.

시작하기 전에

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

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

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

  • 소프트웨어 개발과 명령 줄 인터페이스 사용에 대해 일반적으로 알고 있는지 확인하세요.

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

튜토리얼 목표

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

  • 사전에 정의된 계정을 사용하여 블록체인 노드를 시작합니다.

  • 노드를 시작하는 데 사용되는 주요 커맨드 라인 옵션을 배웁니다.

  • 노드가 실행 중이며 블록을 생성하는지 확인합니다.

  • 실행 중인 네트워크에 두 번째 노드를 연결합니다.

  • 피어 컴퓨터가 블록을 생성하고 확정하는지 확인합니다.

첫 번째 블록체인 노드 시작하기

자체 Substrate 네트워크를 시작하기 전에 사전에 정의된 네트워크 사양인 local을 사용하고 미리 정의된 사용자 계정에서 실행하여 기본 원리를 배울 수 있습니다.

이 튜토리얼에서는 alice와 bob이라는 이름의 미리 정의된 계정을 사용하여 한 대의 로컬 컴퓨터에서 두 개의 Substrate 노드를 실행하여 개인 네트워크를 시뮬레이션합니다.

블록체인을 시작하려면 다음 단계를 따르세요:

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

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

  3. 다음 명령을 실행하여 이전 체인 데이터를 제거합니다:

    ./target/release/node-template purge-chain --base-path /tmp/alice --chain local

    명령은 작업을 확인하도록 요청합니다:

    "/tmp/alice/chains/local_testnet/db"를 삭제하시겠습니까? [y/N]:
  4. y를 입력하여 체인 데이터를 제거하려는 것을 확인합니다.

    새 네트워크를 시작할 때마다 이전 체인 데이터를 항상 제거해야 합니다.

  5. 다음 명령을 실행하여 alice 계정을 사용하여 로컬 블록체인 노드를 시작합니다:

    ./target/release/node-template \
    --base-path /tmp/alice \
    --chain local \
    --alice \
    --port 30333 \
    --rpc-port 9945 \
    --node-key 0000000000000000000000000000000000000000000000000000000000000001 \
    --telemetry-url "wss://telemetry.polkadot.io/submit/ 0" \
    --validator

커맨드 라인 옵션 검토

계속하기 전에 다음 옵션을 사용하여 노드를 시작하는 방법을 살펴보세요.

옵션

설명

--base-path

이 체인과 관련된 모든 데이터를 저장할 디렉토리를 지정합니다.

--chain local

사용할 체인 스펙을 지정합니다. 유효한 사전 정의된 체인 스펙으로는 local, development, staging이 있습니다.

--alice

alice 계정의 미리 정의된 키를 노드의 키스토어에 추가합니다. 이 설정으로 alice 계정이 블록 생성과 확정에 사용됩니다.

--port 30333

피어 간 (p2p) 트래픽을 수신할 포트를 지정합니다. 이 튜토리얼에서는 네트워크를 시뮬레이션하기 위해 동일한 컴퓨터에서 실행되는 두 개의 노드를 사용하므로 적어도 하나의 계정에 대해 명시적으로 다른 포트를 지정해야 합니다.

--rpc-port 9945

서버가 WebSocket 및 HTTP를 통해 수신하는 JSON-RPC 트래픽을 위한 포트를 지정합니다. 기본 포트는 9944입니다. 이 튜토리얼에서는 커스텀 웹 소켓 포트 번호(9945)를 사용합니다.

--node-key <key>

libp2p 네트워킹에 사용할 Ed25519 비밀 키를 지정합니다. 이 옵션은 개발 및 테스트에만 사용해야 합니다.

--telemetry-url

텔레메트리 데이터를 보낼 위치를 지정합니다. 이 튜토리얼에서는 누구나 사용할 수 있는 Parity에서 호스팅되는 서버로 텔레메트리 데이터를 보낼 수 있습니다.

--validator

이 노드가 네트워크의 블록 생성과 확정에 참여한다는 것을 지정합니다.

노드 템플릿에 대해 사용 가능한 커맨드 라인 옵션에 대한 자세한 내용은 다음 명령을 실행하여 사용법 도움말을 확인하세요:

./target/release/node-template --help

표시된 노드 메시지 검토

노드가 성공적으로 시작되면 터미널에 네트워크 작업에 대한 메시지가 표시됩니다. 예를 들어, 다음과 유사한 출력을 볼 수 있어야 합니다:

2022-08-16 15:29:55 Substrate Node    
2022-08-16 15:29:55 ✌️  version 4.0.0-dev-de262935ede    
2022-08-16 15:29:55 ❤️  by Substrate DevHub <https://github.com/substrate-developer-hub>, 2017-2022    
2022-08-16 15:29:55 📋 Chain specification: Local Testnet    
2022-08-16 15:29:55 🏷  Node name: Alice    
2022-08-16 15:29:55 👤 Role: AUTHORITY    
2022-08-16 15:29:55 💾 Database: RocksDb at /tmp/alice/chains/local_testnet/db/full    
2022-08-16 15:29:55 ⛓  Native runtime: node-template-100 (node-template-1.tx1.au1)    
2022-08-16 15:29:55 🔨 Initializing Genesis block/state (state: 0x6894…033d, header-hash: 0x2cdc…a07f)    
2022-08-16 15:29:55 👴 Loading GRANDPA authority set from genesis on what appears to be first startup.    
2022-08-16 15:29:56 Using default protocol ID "sup" because none is configured in the chain specs    
2022-08-16 15:29:56 🏷  Local node identity is: 12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp    
2022-08-16 15:29:56 💻 Operating system: macos    
2022-08-16 15:29:56 💻 CPU architecture: x86_64    
2022-08-16 15:29:56 📦 Highest known block at #0    
2022-08-16 15:29:56 〽️ Prometheus exporter started at 127.0.0.1:9615    
2022-08-16 15:29:56 Running JSON-RPC server: addr=127.0.0.1:9945, allowed origins=Some(["http://localhost:*", "http://127.0.0.1:*", "https://localhost:*", "https://127.0.0.1:*", "https://polkadot.js.org"])      
2022-08-16 15:29:56 creating instance on iface 192.168.1.125    
2022-08-16 15:30:01 💤 Idle (0 peers), best: #0 (0x2cdc…a07f), finalized #0 (0x2cdc…a07f), ⬇ 0 ⬆ 0
...

특히, 출력에서 다음 메시지를 주목해야 합니다:

  • 🔨 Initializing Genesis block/state (state: 0xea47…9ba8, header-hash: 0x9d07…7cce)는 노드가 사용하는 초기 또는 제네시스 블록을 식별합니다. 다음 노드를 시작할 때 이 값이 동일한지 확인하세요.

  • 🏷 Local node identity is: 12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp는 이 노드를 고유하게 식별하는 문자열을 지정합니다. 이 문자열은 alice 계정을 사용하여 노드를 시작할 때 사용한 --node-key에 의해 결정됩니다. 이 문자열은 두 번째 노드를 시작할 때 노드에 연결하기 위해 사용합니다.

  • 2021-03-10 17:34:37 💤 Idle (0 peers), best: #0 (0x9d07…7cce), finalized #0 (0x9d07…7cce), ⬇ 0 ⬆ 0는 네트워크에 다른 노드가 없고 블록이 생성되지 않고 있다는 것을 나타냅니다. 블록이 생성되기 위해서는 다른 노드가 네트워크에 참여해야 합니다.

블록체인 네트워크에 두 번째 노드 추가하기

alice 계정 키를 사용하여 시작한 노드가 실행 중인 상태에서 bob 계정을 사용하여 네트워크에 다른 노드를 추가할 수 있습니다. 이미 실행 중인 네트워크에 참여하기 때문에 실행 중인 노드를 사용하여 새 노드가 참여할 네트워크를 식별할 수 있습니다. 명령은 이전에 사용한 것과 유사하지만 몇 가지 중요한 차이점이 있습니다.

실행 중인 블록체인에 노드를 추가하려면 다음 단계를 따르세요:

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

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

  3. 다음 명령을 실행하여 이전 체인 데이터를 제거합니다:

    ./target/release/node-template purge-chain --base-path /tmp/bob --chain local -y

    -y를 명령에 추가하여 확인 없이 체인 데이터를 제거할 수 있습니다.

  4. 다음 명령을 실행하여 bob 계정을 사용하여 두 번째 로컬 블록체인 노드를 시작합니다:

    ./target/release/node-template \
    --base-path /tmp/bob \
    --chain local \
    --bob \
    --port 30334 \
    --rpc-port 9946 \
    --telemetry-url "wss://telemetry.polkadot.io/submit/ 0" \
    --validator \
    --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp

    이 명령과 이전 명령 사이에 다음과 같은 차이점을 주목하세요:

    • 두 개의 노드가 동일한 컴퓨터에서 실행되므로 --base-path, --port, --rpc-port 옵션에 대해 다른 값을 지정해야 합니다.

    • 이 명령에는 --bootnodes 옵션이 포함되어 있으며 시작한 alice 노드를 단일 부트 노드로 지정합니다.

    --bootnodes 옵션은 다음 정보를 지정합니다:

    • ip4는 노드의 IP 주소가 IPv4 형식을 사용함을 나타냅니다.

    • 127.0.0.1은 실행 중인 노드의 IP 주소를 지정합니다. 이 경우 localhost의 주소입니다.

    • tcp는 피어 간 통신에 사용되는 프로토콜로 TCP를 지정합니다.

    • 30333은 피어 간 통신에 사용되는 포트 번호를 지정합니다. 이 경우 TCP 트래픽을 위한 포트 번호입니다.

    • 12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp은 이 네트워크에 대해 통신할 실행 중인 노드를 식별합니다. 이 경우 alice 계정을 사용하여 시작한 노드의 식별자입니다.

블록 생성 및 확정 확인하기

두 번째 노드를 시작한 후, 노드는 서로 피어로 연결되어 블록을 생성하기 시작해야 합니다.

블록이 확정되고 있는지 확인하려면 다음 단계를 따르세요:

  1. 첫 번째 노드를 시작한 터미널에서 다음과 유사한 줄을 확인하세요:

    2022-08-16 15:32:33 discovered: 12D3KooWBCbmQovz78Hq7MzPxdx9d1gZzXMsn6HtWj29bW51YUKB /ip4/127.0.0.1/tcp/30334
    2022-08-16 15:32:33 discovered: 12D3KooWBCbmQovz78Hq7MzPxdx9d1gZzXMsn6HtWj29bW51YUKB /ip6/::1/tcp/30334
    2022-08-16 15:32:36 🙌 Starting consensus session on top of parent 0x2cdce15d31548063e89e10bd201faa63c623023bbc320346b9580ed3c40fa07f
    2022-08-16 15:32:36 🎁 Prepared block for proposing at 1 (5 ms) [hash: 0x9ab34110e4617454da33a3616efc394eb1ce95ee4bf0daab69aa4cb392d4104b; parent_hash: 0x2cdc…a07f; extrinsics (1): [0x4634…cebf]] 
    2022-08-16 15:32:36 🔖 Pre-sealed block for proposal at 1. Hash now 0xf0869a5cb8ebd0fcc5f2bc194ced84ca782d9749604e888c8b9b515517179847, previously 0x9ab34110e4617454da33a3616efc394eb1ce95ee4bf0daab69aa4cb392d4104b.
    2022-08-16 15:32:36 ✨ Imported #1 (0xf086…9847)
    2022-08-16 15:32:36 💤 Idle (1 peers), best: #1 (0xf086…9847), finalized #0 (0x2cdc…a07f), ⬇ 1.0kiB/s ⬆ 1.0kiB/s
    2022-08-16 15:32:41 💤 Idle (1 peers), best: #1 (0xf086…9847), finalized #0 (0x2cdc…a07f), ⬇ 0.6kiB/s ⬆ 0.6kiB/s
    2022-08-16 15:32:42 ✨ Imported #2 (0x0d5e…2a7f)
    2022-08-16 15:32:46 💤 Idle (1 peers), best: #2 (0x0d5e…2a7f), finalized #0 (0x2cdc…a07f), ⬇ 0.6kiB/s ⬆ 0.6kiB/s
    2022-08-16 15:32:48 🙌 Starting consensus session on top of parent 0x0d5ef31979c2aa17fb88497018206d3057151119337293fe85d9526ebd1e2a7f
    2022-08-16 15:32:48 🎁 Prepared block for proposing at 3 (0 ms) [hash: 0xa307c0112bce39e0dc689132452154da2079a27375b44c4d94790b46a601346a; parent_hash: 0x0d5e…2a7f; extrinsics (1): [0x63cc…39a6]]    
    2022-08-16 15:32:48 🔖 Pre-sealed block for proposal at 3. Hash now 0x0c55670e745dd12892c9e7d5205085a78ccea98df393a822fa9b3865cfb3d51b, previously 0xa307c0112bce39e0dc689132452154da2079a27375b44c4d94790b46a601346a.
    2022-08-16 15:32:48 ✨ Imported #3 (0x0c55…d51b)
    2022-08-16 15:32:51 💤 Idle (1 peers), best: #3 (0x0c55…d51b), finalized #1 (0xf086…9847), ⬇ 0.7kiB/s ⬆ 0.9kiB/s    
    ...

    이러한 줄에서 블록체인에 대한 다음 정보를 확인할 수 있습니다:

    • 두 번째 노드 식별자가 네트워크에서 발견되었습니다 (12D3KooWBCbmQovz78Hq7MzPxdx9d1gZzXMsn6HtWj29bW51YUKB).

    • 노드에는 하나의 피어가 있습니다 (1 peers).

    • 노드가 일부 블록을 생성했습니다 (best: #3 (0x0c55…d51b)).

    • 블록이 확정되고 있습니다 (finalized #1 (0xf086…9847)).

  2. 두 번째 노드를 시작한 터미널에서도 유사한 출력을 확인하세요.

  3. 한 노드를 종료하려면 터미널 쉘에서 Control-c를 누릅니다.

    노드를 종료한 후, 남아 있는 노드가 피어가 없고 블록 생성을 중지한 것을 확인할 수 있습니다. 예를 들어:

    2022-08-16 15:53:45 💤 Idle (1 peers), best: #143 (0x8f11…1684), finalized #141 (0x5fe3…5a25), ⬇ 0.8kiB/s ⬆ 0.7kiB/s
    2022-08-16 15:53:50 💤 Idle (0 peers), best: #143 (0x8f11…1684), finalized #141 (0x5fe3…5a25), ⬇ 83 B/s ⬆ 83 B/s
  4. 두 번째 노드를 종료하려면 터미널 쉘에서 Control-c를 누릅니다.

    시뮬레이션된 네트워크에서 체인 상태를 제거하려면 purge-chain 하위 명령을 /tmp/bob 및 /tmp/alice 디렉토리에 대한 --base-path 명령 줄 옵션과 함께 사용하세요.

다음 단계로 넘어가기

이 튜토리얼에서는 개인 블록체인 네트워크를 시작하는 첫 번째 기본 단계를 소개했습니다. 이 튜토리얼에서는 두 개의 노드를 한 대의 컴퓨터에서 실행하고 사전에 정의된 계정을 참여자로 사용하여 개인 네트워크를 시뮬레이션했습니다.

다음을 배웠습니다:

  • 노드 템플릿 명령과 명령 줄 옵션을 사용하는 방법.

  • 서로 피어로 통신하는 두 개의 블록체인 노드를 시작하는 방법.

  • 개인 블록체인 노드가 블록을 생성하는지 확인하는 방법.

다음 튜토리얼에서는 이 튜토리얼에서 배운 내용을 기반으로 다른 참여자와 별도의 컴퓨터에서 실행되는 노드를 사용하여 개인 네트워크를 시작하는 방법을 설명합니다.

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

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

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

이 튜토리얼에 문제가 있거나 질문이 있거나 피드백을 제공하려면 다음을 이용하세요.

에서 다음을 배울 수 있습니다:

.

.

Rust와 Rust 툴 체인
로컬 블록체인 구축
신뢰할 수 있는 노드 추가
이슈 제출
Substrate Stack Exchange