NEO 블록체인의 개인 네트워크를 실행하는 방법

由作者 fangyuting@neo.org2017/11/14 发布

Author fangyuting@neo.org posted on 2017/11/14

NEO 블록체인사설 네트워크를 실행하는 것은 블록체인을 작업하는 데에 있어 필수적인 부분이며, 특히 dApps와 스마트 계약을 테스트하고 작성하는 부분에 필수적인 부분입니다. 개인 네트워크는 공공 네트워크로부터의 격리된 당신 스스로를 위한 완전한 NEO 블록체인입니다. 여러분은 그것을 빨리 가동화시키고, 초기 1억개의 NEO를 요청하여 그것의 모든 측면에서 실험할 수 있습니다.

이 게시물은 Mac, Linux및 Windows에서 Docker와 Python을 사용하는 개인 체인을 설정하는 단계별 가이드입니다. 그리고 neo-pythonneo-privatenet-docker에 대한 소개를 담고 있습니다.

 

윈도우 사용자 참고사항:

- 현재 LevelDB OSX 및 Linux에서만 작동하므로 Windows(윈도우)에서는 현재 neo-python를 지원하지 않습니다. 당신은 여전히 Docker상자를 사용하여 개인 네트워크를 실행할 수 있지만, 지갑을 만들고 NEO와 GAS를 추출하려면 5단계로 구성된 공식 NEO개인용 체인을 따라야 합니다.

-  Docker는 Windows10 Home Edition과 호환되지 않으므로 최소한 Pro가 필요합니다.

 

NEO자체와 기본 툴은 주로 Windows를 사용하면서 C#로 개발됩니다. 개인용 체인의 공식적인 NEO문서는 윈도우즈 Toolchain을 사용하여 개인 네트워크를 설정하는 방법과 윈도우즈 가상 시스템 4개를 합의된 노드로써 설정하는 방법등의 훌륭한 개요를 제공합니다.

City of Zion 지역의 엄청난 노력 덕분에 시스템 요구사항을 최소화하면서 Docker과 Python이 탑재된 플랫폼에서 개인의 체인을 실행하는 것이 가능하게 되었습니다. 우리가 사용하고자 하는 두가지 구체적인 프로젝트는 neo-python과 neo-privatenet-docker입니다 :

 

  • neo-pythone - 완전한 NEO노드를 실행하게 함으로써 파이썬3로 블록체인과 상호작용할 수 있다.
  • neo-privatenet-docker – 가벼운 Docker container에서 한번에 4개의 합의된 노드를 통해 전체 NEO블록을 실행할 수 있습니다.

 

이 시점에서 나는 파이프라인에서의 여러가지 기능과 함께 자바스크립트에서 NEO 노드의 구현을 성공시킨 neo-js 언급하고 싶습니다. neo-js는 neo-python만큼은 아니지만 이미 모든 RPC호출을 지원하며, 전체 로컬 노드를 실행하여 블록체인 데이터를 MongoDB 데이터베이스에 저장할 수 있습니다.

단계별 개인NEO체인 설정

 

과정은 다음과 같습니다: Docker 설치 -> neo-privatenet-docker -> neo-python -> 개인용 망에 연결 후 지갑생성 -> 초기의 1억NEO 요구

 

 Docker Setup

  • Docker가 설치되어 있고 실행되고 있는지 확인합니다.
    https://docs.docker.com/engine/installation/#desktop
  • Docker가 최신 버전으로 업데이트되었는지 확인합니다.
  • 오류 없이 $ docker ps를 실행할 수 있어야 합니다.

 

 

 

 

 

개인 체인 Docker 상자 실행

neo-privatenet-docker을 복제하고, 다음과 같은 4개의 초기합의 노드를 사용하여 docker 상자를 설치하고 실행합니다:

 $ git clone https://github.com/Splyse/neo-privatenet-docker.git
$ cd neo-privatenet-docker
$ ./docker_build.sh
$ ./docker_run.sh

 

 

이 시점에서, 합의된 노드를 실행하는 Docker 상자가 백 그라운드에서 실행되고 있습니다. 당신은 $dockerps를 사용하여 볼 수 있습니다.

 $ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                  NAMES
6f7ed0d4ae3a        neo-privnet         "/bin/bash /opt/pr..."   2 hours ago         Up 2 hours          0.0.0.0:20333-20336->20333-20336/tcp   neo-privnet

 

 

  • 만약 Get https://registry-1.docker.io/v2/library/ubuntu/manifests/16.04: unauthorized: incorrect username or password 와 같은 오류가 발생한 경우, 사용자 아이디(email 아님)를 사용하여 Docker hub $ docker에 로그인해야 합니다.
  • Docker상자가 중지되거나 다시 시작되면 모든 상태가 삭제됩니다(전체'구형'블록이 사라짐). 또한 당신은 당신이 만든 privnet 지갑들과 neo-python으로부터 Chain/privient를 제거해야 합니다.

neo-python

이제 개인 네트워크를 통해 개인 네트워크에 연결하고, 지갑을 만들고, 초기 NEO를 할당할 수 있습니다.

  • READ ME에 묘사된 바와 같이 neo-pytho 를 설치합니다.

 https://github.com/CityOfZion/neo-python#getting-started

  • 개인용 체인에neo-python연결

$ python prompt.py -c protocol.privnet.json
NEO cli. Type 'help' to get started

 

neo>

  • 블록 수는 연속적으로 증가해야 한다(예: '진행률1')
  • 지갑을 만든다:

neo> create wallet privnet
password> ************
password> ************
Script hash b"'\xbaI\xf7H\x13\x1d \x7fC5\xf1\x1d\x04!a\xb5\xce-\xb4" <class 'bytes'>
Wallet {
    "percent_synced": 0,
    "path": "privnet",
    "addresses": [
        "AKPwAZWyBWMdUe8NtoSYMeTmwCxrP4e2KB"
    ],
    "public_keys": [
        {
            "Public Key": "02ddeee35542a7e390395b0cca3a493ee001fee35b7710846b5b73bf0d888c133b",
            "Address": "AKPwAZWyBWMdUe8NtoSYMeTmwCxrP4e2KB"
        }
    ],
    "synced_balances": [],
    "height": 0
}
pubkey b'02ddeee35542a7e390395b0cca3a493ee001fee35b7710846b5b73bf0d888c133b'

 

경우 주소를 메모해 주세요 AKPwAZWyBWMdUe8NtoSYMeTmwCxrP4e2KB

  • py닫기(Exit종료 또는 Ctrl+D 누르기)
  • 1억 NEO 요청

$ python contrib/privnet-claimall.py -c protocol.privnet.json -a {your-address}

 

 

  • 4개의 합의된 노드 중 3개가 서명한 트랜잭션을 생성하고, Blockshain이 거래를 확인할 때까지 기다립니다.
  • 1분 또는 2분 소요가 될 수 있으니 기다립니다.

 

 이 시점에서, 당신은 당신의 지갑에 100만 NEO를 가지고 있고, 당신이 원하는 대로 할 수 있습니다. 다음과 같이 neo-python과의 균형을 점검하십시오.

neo> open wallet privnet
password> ************
Opened wallet at privnet
neo> wallet
Script hash b'i\xd5r\xef\\\xf2=\xb32\xb7\xffe\xa4\t@6\xdbM\x1b\xb7' <class 'bytes'>
Wallet {
    "percent_synced": 100,
    "path": "privnet",
    "addresses": [
        {
            "votes": [],
            "balances": {
                "c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b": "100000000.0"
            },
            "version": 0,
            "is_watch_only": false,
            "frozen": false,
            "script_hash": "ARRUJLMrTipDfvzUGHNJ3qAAcQRSdtUcEX"
        }
    ],
    "public_keys": [
        {
            "Public Key": "02c017615119d81f4b3ab7ddb016e22e3313cacb6ab5cf2ef38addd752ac1b3d9f",
            "Address": "ARRUJLMrTipDfvzUGHNJ3qAAcQRSdtUcEX"
        }
    ],
    "synced_balances": [
        "[NEO]: 100000000.0 "
    ],
    "height": 402
}

 

 

이 시점에서, 당신은 현재 개인적인 NEO체인을 가지고 있고, 초기 자금에 대한 완전한 통제권을 가지고 있습니다. HAPPY HACKING!

 

 

사설 네트워크를 재시작하고 재설정하는 방법

Docker 상자는 어떠한 상태도 유지하지 않습니다. 중단되거나 다시 시작한다면, 모든 상태가 손실되고 다음 시작 시 전체 블록이 새로 생성됩니다.

이전의 체인(Chain/privnet)에서 오래 된 체인 파일을 제거하는 것이 중요합니다. 다른 체인에 대해 오래 된 데이터베이스를 실행하는 문제가 발생합니다.

 neo-python$ rm -rf Chains/privnet/

 

당신은 ./docker_run.sh을 작동시킴으로써 수동으로 개인망 상자를 재시작할 수 있습니다. 이렇게 하면 neo-privnet 상자를 중단하고 새로 시작할 때는 다음과 같은 이점을 누릴 수 있습니다.

 $ ./docker_run.sh
Stopping container named neo-privnet
Removing container named neo-privnet
Starting container...
7e23e2fe1475489503f4d6b6a619275d806043dbeb0672e981ec3938c875167f

 

 

초기 GAS 요청

neo-python은 아직 GAS의 요구를 지원하지 않습니다. 5단계로 구성된 NEO전용 체인에 설명된 대로 공식 NEO도구를 사용할 수 있습니다.

 Docker Tips & Tricks

다음은 몇가지 사용할 수 있는 Docker 명렁어입니다.

  • docker ps는 실행중인 모든 사례를 나열하고, docker ps-a 는 모든 것을 멈춥니다. - docs
  • docker images는 상자가 시작될 수 있는 모든 로컬이미지를 나열합니다. - docs
  • docker exec -it {container-id} /bin/bash는 실행중인 상자에 bash 인터페이스를 엽니다. - docs
  • docker stop {container-id}은 상자를 멈춥니다 - docs
  • docker rm –f {container-id}상자를 멈추고 삭제합니다. - docs
  • docker run새 상자를 시작합니다 - docs

NEO TestNet

NEO프로젝트는 또한 실행중인 TestNet을 제공하지만, 익것은 단지 개발의 최종단계에서만 사용되어야 합니다(다양한 이유로 인해)

neo-python

neo-python은 굉장한 프로젝트로써, 파이썬에 있는 원본 C#NEO 프로젝트를 다시 구현하기 위한 공동체의 노력을 기울이는 커뮤니티입니다.

  • Python 기반의 NEOP2P노드 실행
  • 노드 구성을 위한 대화형형 CLI 및 블록체인과의 상호 작용 및 점검
  • Python가상 시스템의 블록체인에 대한 스마트 계약 실행
  • 매우 기본적인 지갑기능 ( 완전히 테스트되지 않았으며, mainnet에서 사용하지 마십시오)
  • neo-python은 “very”의 예비인 python SDK에서 유래되었지만, 그러나 개발은 2017년 7월에 시작되었으며, 그 이후 지속적인 기여를 했습니다.

2017년 11월 3일로부터, neo-python은 18명의 후원자가 생겼고, localhuman에 의해 주도되고 있습니다.

만약에 당신이 Windows이외의 플랫폼에서 NEO 블록체인과 함께 일하길 원한다면, 당신은 어떤 방식으로든 확실하게 다른 방법 혹은 다른 사람들과 상호작용해야 합니다. 이는 포괄적으로 개발된 플랫폼 개발도구 체인의 핵심적인 부분이며, 적극적으로 개발되고 있으며 전반적으로 우수한 프로젝트입니다.

나는 단지 이것을 가능케 하는 모든 사람들에게 큰 감사를 표하고 싶다. 저는 이 프로젝트의 밝은 미래에 관하여 흥미가 있고, 그것은 더 발전된 발전입니다.

neo-privatenet-docker

neo-privatenet-docker의 가까운 미래에 대해 알아보면, UbuntuBDocker이미지 내에서 개인 NEO블록체인을 쉽게 실행할 수 있습니다. 개인전용 체인은 최소한 4개의 합의된 노드가 필요한데, 이 노드는 이 단일 Docker 상자 내에서 모두 실행됩니다. 주요 기여자는 hal0x2328과 phetter입니다.

 

먼저 Dockerfile부터 살펴보겠습니다:

FROM ubuntu:16.04
MAINTAINER hal0x2328

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y apt-utils
RUN apt-get install -y mininet netcat curl wget unzip less python screen
RUN apt-get install -y ca-certificates apt-transport-https
RUN apt-get install -y libleveldb-dev sqlite3 libsqlite3-dev
RUN apt-get install -y expect

RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.gpg
RUN echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list

RUN apt-get update && apt-get install -y dotnet-sdk-2.0.0

RUN wget -O /opt/neo-cli.zip https://github.com/neo-project/neo-cli/releases/download/v2.3.2/neo-cli-ubuntu.16.04-x64.zip

  • 영상은 Ubuntu16:04에 기반을 둡니다.
  • LevelDB를 비롯한 다양한 시스템 유틸리티가 설치되어 있으며, 구글의 빠른 키 값을 자랑하는 저장소, splite3, 자체완비, 무서버, 제로구성, 업무적인 SQL 데이터베이스 엔진을 갖추고 있습니다.
  • 마이크로소프트의 apt 저장소는 설치되어 있으며, dotnet-sdk-2.0.0도 설치되어 있습니다. 원래의 NEO프로젝트는 C#에서 실행되고, NETCore에서 실행된다는 점을 명심하십시오.
  • neo-cli Ubuntu release가 다운로드됩니다.
  • 그것은 전체적인 상황에 있어 상당한 것입니다. 이후에도 neo-cli는 4번 추출되며(각 합의 노드에 한번씩), 개인체인 시동파일은 복사됩니다.

RUN unzip -d /opt/node1 /opt/neo-cli.zip
RUN unzip -d /opt/node2 /opt/neo-cli.zip
RUN unzip -d /opt/node3 /opt/neo-cli.zip
RUN unzip -d /opt/node4 /opt/neo-cli.zip

ADD ./scripts/private_chain_start.sh /opt/
ADD ./scripts/start_cli.sh /opt/

 

당신이 docker_run.sh와 함께 Docker 상자를 작동한다면, 이는 4개의 공개포트로 상자를 시작할 것이며(20333-20336, mapped to the host), private_chain_start.sh 스크립트를 호출합니다.

docker run -d --name neo-privnet -p 20333-20336:20333-20336/tcp -h neo-privnet neo-privnet /bin/bash /opt/private_chain_start.sh /opt/

 

private_chain_start.sh - start_cli.sh 을 4번 실행함으로써 NEO 노드를 4번 실행합니다.

 

#!/usr/bin/expect -f
set dnpath [lindex $argv 0]
set wallet [lindex $argv 1]
set password [lindex $argv 2]
set timeout -1
cd $dnpath
spawn dotnet neo-cli.dll
expect "neo>"
send "open wallet $wallet\n"
expect "password:"
send "$password\n"
expect "neo>"
send "start consensus\n"
expect "OnStart"
#expect "LIVEFOREVER"
interact

이 코드는 인수에서 몇가지 변수를 설정하며(dnpath, 지갑, 비밀번호), dotnet neo-cli.dll을 실행하고, 초기 노드지갑을 열고, 노드가 작동하기 시작할 때까지 start consensus를 호출합니다. 이때 개인 체인의 블록이 생성됩니다.

이는 꽤나 대단합니다. 비록 코드처럼 보이진 않지만, 이것은 NEO 블록체인 개발과 개인체인의 작동을 시작하기 위한 구세주이다. 왜냐하면 쉽게 접근하게 만들어주기 때문이다. 다시 한번 이 프로젝트를 추진하는 개발자들에게 큰 감사를 드립니다.

저는 당장 시도해보자고 제안할 것입니다. 위의 시작 가이드 라인을 따르시면 곧 사설 NEO체인을 실행할 수 있습니다.

편하실 때 NEO Slack에 가입하셔서 인사해주시면 됩니다. 이것은 개방적이고 환영 받는 공동체입니다. neo.org의 공식 NEO홈페이지에 있는 다양한 리소스에 대한 링크도 찾아보실 수 있습니다.

이 게시물에 대한 피드백이나 의견이 있으신 분은 @metachris를 통해 저자에게 연락 주시기 바랍니다.