로컬 블록체인 구축하기

개발 환경에서 단일 로컬 블록체인 노드를 컴파일, 실행 및 상호작용하기.

블록체인 기초에서 배운 대로, 블록체인은 네트워크를 형성하기 위해 분산 컴퓨터인 노드로 구성됩니다.

Substrate는 애플리케이션이나 비즈니스 모델 요구에 맞게 완전히 커스텀할 수 있는 블록체인 노드를 설계하고 구축할 수 있는 유연하고 개방적이며 확장 가능한 개발 환경을 제공합니다.

시작하기

블록체인 개발자가 되기 위한 첫 번째 단계는 단일 로컬 블록체인 노드를 컴파일하고 실행하는 방법을 배우는 것입니다. 이 튜토리얼에서는 노드 템플릿을 사용하여 단일 노드 블록체인을 빌드하고 시작합니다.

Substrate 노드 템플릿은 개발 환경에서 로컬로 실행할 수 있는 작동하는 단일 노드 블록체인을 제공합니다. 노드 템플릿에는 사용자 계정과 계정 잔액과 같은 여러 사전 정의된 구성 요소가 포함되어 있어 일반적인 작업을 수행해 볼 수 있습니다. 템플릿을 수정하지 않고도 블록을 생성하고 트랜잭션을 수행할 수 있는 기능적인 노드를 실행할 수 있습니다.

로컬 블록체인 노드를 시작한 후, 이 튜토리얼에서는 Substrate 프론트엔드 템플릿을 사용하여 블록체인 활동에 대한 정보를 보고 트랜잭션을 제출하는 방법을 설명합니다.

이 튜토리얼은 누구를 위한 것인가요?

이 튜토리얼은 Substrate와 블록체인 개발에 대해 배우고자 하는 모든 분들을 위한 기본 소개서로, 추가적인 튜토리얼에서 더 깊이 알아볼 수 있는 최소한의 작동 개발 환경을 준비합니다. Substrate와 블록체인 개발에 대한 사전 지식이나 경험이 없다고 가정합니다. 이 튜토리얼을 완료하기 위해서는 프로그래밍이나 블록체인 경험이 필요하지 않습니다. 이것은 단지 첫 번째 단계일 뿐이지만, 여러분의 여정을 계속 이어나갈 수 있기를 바랍니다.

이 튜토리얼을 완료하는 데 얼마나 시간이 걸리나요?

이 튜토리얼은 Rust 코드를 컴파일하는 데 시간이 소요되며, 약 1~2시간 정도 소요됩니다.

시작하기 전에

이 튜토리얼에서는 작동하는 코드를 다운로드하고 사용합니다. 시작하기 전에 다음을 확인하세요:

  • 좋은 인터넷 연결과 로컬 컴퓨터의 셸 터미널에 액세스할 수 있어야 합니다.

  • 소프트웨어 개발에 대해 일반적으로 알고 있으며 명령 줄 인터페이스를 사용할 수 있어야 합니다.

  • 블록체인과 스마트 컨트랙트 플랫폼에 대해 일반적으로 알고 있어야 합니다.

  • 설치에서 설명한 대로 Rust를 설치하고 개발 환경을 설정했는지 확인하세요.

튜토리얼 목표

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

  • 노드 템플릿을 컴파일하고 로컬 Substrate 기반 블록체인을 시작합니다.

  • 프론트엔드 템플릿을 설치하여 로컬 블록체인 노드와 상호작용합니다.

  • 프론트엔드 템플릿을 사용하여 트랜잭션을 제출하고 결과를 확인합니다.

Substrate 노드 컴파일하기

Substrate 노드 템플릿은 Substrate에서 바로 작업을 시작할 수 있는 작동하는 개발 환경을 제공합니다.

이미 로컬 컴퓨터에서 노드 템플릿을 컴파일한 경우, 이 섹션을 건너뛰고 로컬 노드 시작하기로 계속하세요.

Substrate 노드 템플릿을 컴파일하려면 다음 단계를 따르세요:

  1. 컴퓨터의 터미널 셸을 엽니다.

  2. 다음 명령을 실행하여 노드 템플릿 저장소를 복제합니다:

    git clone https://github.com/substrate-developer-hub/substrate-node-template

    이 명령은 main 브랜치를 클론합니다. Polkadot에 익숙하고 특정 Polkadot 버전을 사용하려는 경우 --branch 명령줄 옵션을 사용하여 원하는 브랜치를 선택할 수 있습니다.

    노드 템플릿을 사용할 수 있는 최신 및 이전 Polkadot 브랜치를 보려면 릴리스 또는 태그를 클릭하세요.

  3. 다음 명령을 실행하여 노드 템플릿 디렉토리의 루트로 이동합니다:

    cd substrate-node-template

    작업을 포함할 새 브랜치를 만듭니다:

    git switch -c my-learning-branch-yyyy-mm-dd

    yyyy-mm-dd를 원하는 식별 정보로 바꾸세요. 숫자로 된 연도-월-일 형식을 권장합니다. 예를 들어:

    git switch -c my-learning-branch-2023-03-01
  4. 다음 명령을 실행하여 노드 템플릿을 컴파일합니다:

    cargo build --release

    최적화된 빌드를 위해 항상 --release 플래그를 사용해야 합니다. 처음으로 이를 컴파일하는 경우 완료까지 시간이 다소 소요됩니다.

    다음과 유사한 줄이 표시되면 완료됩니다:

    Finished release [optimized] target(s) in 11m 23s

로컬 노드 시작하기

노드가 컴파일되면 프론트엔드 템플릿을 사용하여 노드가 수행하는 작업을 탐색할 준비가 됩니다.

로컬 Substrate 노드를 시작하려면 다음 단계를 따르세요:

  1. 노드를 컴파일한 동일한 터미널에서 다음 명령을 실행하여 개발 모드에서 노드를 시작합니다:

    ./target/release/node-template --dev

    node-template 명령줄 옵션은 실행 중인 노드의 동작 방식을 지정합니다. 이 경우 --dev 옵션은 사전 정의된 development 체인 스펙을 사용하여 개발 모드에서 노드를 실행하도록 지정합니다. 기본적으로 이 옵션은 노드를 중지할 때 모든 활성 데이터(키, 블록체인 데이터베이스 및 네트워킹 정보 등)를 삭제합니다. --dev 옵션을 사용하면 노드를 중지하고 다시 시작할 때마다 깨끗한 작업 상태를 유지할 수 있습니다.

  2. 터미널에서 표시되는 출력을 확인하여 노드가 성공적으로 실행되었는지 확인합니다.

    터미널에는 다음과 유사한 출력이 표시됩니다:

    2022-08-16 13:43:58 Substrate Node    
    2022-08-16 13:43:58 ✌️  version 4.0.0-dev-de262935ede    
    2022-08-16 13:43:58 ❤️  by Substrate DevHub <https://github.com/substrate-developer-hub>, 2017-2022    
    2022-08-16 13:43:58 📋 Chain specification: Development
    2022-08-16 13:43:58 🏷  Node name: limping-oatmeal-7460    
    2022-08-16 13:43:58 👤 Role: AUTHORITY    
    2022-08-16 13:43:58 💾 Database: RocksDb at /var/folders/2_/g86ns85j5l7fdnl621ptzn500000gn/T/substrate95LPvM/chains/dev/db/full    
    2022-08-16 13:43:58 ⛓  Native runtime: node-template-100 (node-template-1.tx1.au1)
    2022-08-16 13:43:58 🔨 Initializing Genesis block/state (state: 0xf6f5…423f, header-hash: 0xc665…cf6a)
    2022-08-16 13:43:58 👴 Loading GRANDPA authority set from genesis on what appears to be first startup.
    2022-08-16 13:43:59 Using default protocol ID "sup" because none is configured in the chain specs
    2022-08-16 13:43:59 🏷  Local node identity is: 12D3KooWCu9uPCYZVsayaCKLdZLF8CmqiHkX2wHsAwSYVc2CxmiE
    ...
    ...
    ...
    ...
    2022-08-16 13:54:26 💤 Idle (0 peers), best: #3 (0xcdac…26e5), finalized #1 (0x107c…9bae), ⬇ 0 ⬆ 0

    finalized 다음의 숫자가 증가하면 블록체인이 새로운 블록을 생성하고 그들이 설명하는 상태에 대해 합의에 도달하고 있다는 것을 의미합니다.

    로그 출력의 세부 정보는 나중에 다른 튜토리얼에서 살펴보겠습니다. 지금은 노드가 실행되고 블록을 생성하는 중이라는 사실만 알면 됩니다.

  3. 노드 출력이 표시되는 터미널을 열어둡니다.

프론트엔드 템플릿 설치하기

프론트엔드 템플릿은 ReactJS를 사용하여 Substrate 기반 블록체인 노드와 상호작용할 수 있는 웹 브라우저 인터페이스를 렌더링합니다. 이 프론트엔드 템플릿은 앞으로 진행할 프로젝트의 사용자 인터페이스를 만들기 위한 출발점으로 사용할 수 있습니다.

프론트엔드 템플릿을 설치하려면 YarnNode.js가 필요합니다. 이 도구들이 없다면 먼저 설치하세요.

프론트엔드 템플릿을 설치하려면 다음 단계를 따르세요:

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

  2. 다음 명령을 실행하여 로컬 컴퓨터에 node가 설치되어 있는지 확인합니다:

    node --version

    node가 설치되어 있다면 이 명령은 v19.7.0과 같은 버전 번호를 반환합니다.

    버전 번호가 반환되지 않거나 특정 node 버전을 설치하는 방법에 대한 질문이 있는 경우 Node.js 웹사이트에서 사용하는 운영 체제에 대한 지침을 따르거나 nvm 노드 버전 관리자를 설치하고 사용하세요.

    node 버전은 프론트엔드 템플릿을 실행하기 위해 최소한 v14 이어야 합니다.

  3. 다음 명령을 실행하여 로컬 컴퓨터에 yarn이 설치되어 있는지 확인합니다:

    yarn --version

    yarn 버전은 프론트엔드 템플릿을 실행하기 위해 최소한 v3 이어야 합니다. 이전 버전이 설치되어 있는 경우 yarn version을 사용하여 버전 번호를 지정하여 yarn을 업데이트할 수 있습니다. 명령이 버전 번호를 반환하지 않거나 특정 yarn 버전을 설치하는 방법에 대한 질문이 있는 경우 Yarn 웹사이트의 지침을 따라 yarn을 설치하세요.

  4. 다음 명령을 실행하여 프론트엔드 템플릿 저장소를 복제합니다:

    git clone https://github.com/substrate-developer-hub/substrate-front-end-template
  5. 다음 명령을 실행하여 프론트엔드 템플릿 디렉토리의 루트로 이동합니다:

    cd substrate-front-end-template
  6. 다음 명령을 실행하여 프론트엔드 템플릿의 종속성을 설치합니다:

    yarn install

프론트엔드 템플릿 시작하기

Substrate 프론트엔드 템플릿은 Substrate 노드와 상호작용하고 몇 가지 일반적인 작업을 수행할 수 있는 사용자 인터페이스 컴포넌트로 구성됩니다.

프론트엔드 템플릿을 사용하려면 다음 단계를 따르세요:

  1. 현재 작업 디렉토리가 이전 섹션에서 프론트엔드 템플릿을 설치한 루트 디렉토리인지 확인하세요.

  2. 다음 명령을 실행하여 프론트엔드 템플릿을 시작합니다:

    yarn start

    일반적으로 yarn start 명령을 실행하면 기본 브라우저에서 자동으로 http://localhost:8000을 엽니다. 필요한 경우 수동으로 http://localhost:8000 URL을 지정하여 프론트엔드 템플릿을 볼 수 있습니다.

    상단 섹션에는 체인에 연결된 계정을 선택할 수 있는 계정 선택 목록이 있습니다. 템플릿의 상단 섹션에는 또한 몇 가지 사전 정의된 계정과 그 중 일부가 미리 구성된 자금을 가지고 있는 Balances 테이블이 표시됩니다. 이 샘플 데이터를 사용하여 자금 이체와 같은 작업을 시도할 수 있습니다.

계정으로부터 자금 이체하기

이제 로컬 컴퓨터에서 블록체인 노드를 실행하고 작업을 수행할 수 있는 프론트엔드 템플릿이 준비되었으므로 블록체인과 상호작용하는 다양한 방법을 탐색할 준비가 되었습니다.

기본적으로 프론트엔드 템플릿에는 여러 가지 일반적인 작업을 시도할 수 있는 여러 컴포넌트가 포함되어 있습니다. 이 튜토리얼에서는 자금을 한 계정에서 다른 계정으로 이동하는 간단한 이체 작업을 수행할 수 있습니다.

계정으로 자금을 이체하려면 다음 단계를 따르세요:

  1. Balances 테이블에서 자금이 연결되지 않은 dave와 같은 사전 정의된 계정을 확인하세요.

    Balances 테이블 아래에는 프론트엔드 템플릿에 Transfer 컴포넌트가 표시됩니다. 이 컴포넌트를 사용하여 자금을 한 계정에서 다른 계정으로 이체할 수 있습니다.

  2. 사용 가능한 계정 목록에서 dave를 선택하여 자금을 이체할 주소를 입력합니다.

  3. 이체할 금액으로 적어도 1000000000000을 지정한 다음 Submit을 클릭합니다.

  4. Balances 테이블의 값이 이체로 업데이트된 것을 확인하세요.

  5. 이제 이제 완료된 이체와 관련된 이벤트를 확인하기 위해 Events 컴포넌트를 확인하세요.

    Substrate 블록체인은 비동기 작업의 결과를 이벤트로 보고하므로 이벤트 컴포넌트를 사용하여 이체의 일부로 수행된 각 작업에 대한 자세한 정보를 볼 수 있습니다. 예를 들어:

  6. 트랜잭션이 완료되고 블록에 포함되면 다음과 유사한 확인 메시지가 표시됩니다:

    😉 Finalized. Block hash: 0xa50d3f99fcea8a1611806895aa3f4d4d55fdc4989fbb2148d4856a043d01f808

로컬 노드 중지하기

이체 작업이 성공적으로 완료되면 프론트엔드 템플릿 컴포넌트를 계속해서 탐색하거나 로컬 Substrate 노드를 중지하여 수행한 상태 변경 사항을 모두 지울 수 있습니다. 노드를 시작할 때 --dev 옵션을 지정했으므로 로컬 노드를 중지하면 블록체인이 중지되고 모든 지속적인 블록 데이터가 삭제되어 다음에 노드를 시작할 때 깨끗한 상태로 시작할 수 있습니다.

로컬 Substrate 노드를 중지하려면 다음 단계를 따르세요:

  1. 노드 출력이 표시되는 터미널로 돌아갑니다.

  2. 실행 중인 프로세스를 종료하려면 Control-c를 누릅니다.

  3. 터미널이 substrate-node-template 디렉토리의 터미널 프롬프트로 돌아왔는지 확인하세요.

다음 단계로 넘어가기

축하합니다!

이 튜토리얼에서는 다음을 배웠습니다:

  • 노드 템플릿을 사용하여 작동하는 Substrate 기반 블록체인 노드를 시작하는 방법.

  • 프론트엔드 사용자 인터페이스를 사용하여 블록체인 노드를 보고 상호작용하는 방법.

  • 한 계정에서 다른 계정으로 간단한 이체를 수행하는 방법.

프론트엔드 템플릿에는 로컬 개발 노드에 연결된 동안 실험해 볼 수 있는 여러 가지 추가 컴포넌트가 포함되어 있습니다. 이러한 컴포넌트를 자체적으로 탐색하거나 다음 주제에서 자세히 알아볼 수 있습니다:

Last updated