[증인노드 초보자 가이드] #3 증인 노드 동기화 (Witness Node for Beginner)

in SCT.암호화폐.Crypto2 years ago (edited)

최근 막 증인 노드를 돌리기 시작한 이타인클럽(@etainclub)입니다.
증인 보팅은 아래에서 가능합니다. 부탁드립니다.
https://steemitwallet.com/~witnesses
@etainclub

image.png

1편, 2편에 이어서 증인 노드 동기화 및 지갑 설정에 대해서 설명합니다.
[증인노드 가이드] #1 증인 노드 설명 및 서버 선택 (Witness Node and Server)
[증인노드 가이드] #2 증인 노드를 위한 프로그램 설치 (Install Programs for Witness node)


블록 파일 압축 해제

2편 마지막에 블록 파일 steem_witness-20211015.tar.lz4을 다운로드 받았을 것입니다. (파일 날짜는 각자 다릅니다.)
이것은 lz4라는 압축 파일입니다.

다음과 같이 입력하여 lz4가 설치되어 있는지 확인합니다.

# lz4 --help
*** LZ4 command line interface 64-bits v1.9.2, by Yann Collet ***
Usage :
      lz4 [arg] [input] [output]

input   : a filename
          with no FILE, or when FILE is - or stdin, read standard input

만약 설치가 안되어 있다면 다음과 같이 설치합니다.

# apt update
# apt install liblz4-tool

다운로드한 파일 위치로 이동해서 압축을 다음과 같이 해제합니다.

# lz4 -d steem_witness-20211015.tar.lz4

파일 사이즈가 워낙 커서 압축을 푸는데도 오래 걸립니다. 압축이 다 풀리면 또다시 steem_witness-20211015.tar 파일이 하나 나옵니다. tar 파일은 압축은 아니고 파일들을 하나의 파일로 묶어 둔 것입니다. 이것을 다시 풀어줍니다.

주의: 기존의 lz4 파일, tar 파일, 그리고 새로 생길 폴더까지 스토리지를 차지하게 됩니다. 그러면 대략 215GB + 300GB + 300GB = 815G가 됩니다. 스토리지 공간이 부족할거 같으면 tar 파일이 생기면 처음 다운로드 받은 lz4 파일은 삭제해줍니다.
# rm -rf steem_witness-20211015.tar.lz4

tar 파일을 다음과 같이 풀고, 결과 저장 위치를 자신의 툴킷 밑으로 합니다.
저는 툴킷이 /steem/steem-docker-ex에 설치되어 있습니다. 그리고 그 밑에 data/witness_node_data_dir이란 폴더가 있구요. 다음은 그 밑에 압축을 풀어주는 명령입니다. 반드시 자신의 환경에 맞는 위치를 지정해 주셔야 합니다.

# tar -xf steem_witness-20211015.tar -C /root/steem/steem-docker-ex/data/witness_node_data_dir/

위에서 ~/steem/steem-docker-ex/data/witness_node_data_dir/ 라고 되어 있는 부분에 자신의 환경에 맞게 입력해야 합니다. 다음과 같이 툴킷 폴더로 이동해서 압축 풀 곳의 위치를 얻을 수 있습니다.

root@etianclub ~/steem/steem-docker-ex/data/witness_node_data_dir # pwd
/root/steem/steem-docker-ex/data/witness_node_data_dir

잘 보셔야 하는데, 프롬프트의 위치입니다. 저는 root 프롬프트라 #으로 나타납니다. 그 이후가 명령어인 pwd입니다. 프롬프트 앞은 현재 폴더 위치를 나타냅니다. 이건 사용하는 터미널마다 다르게 표시되니, 툴킷 밑의 witness_node_data_dir 폴더로 이동한 후 pwd 명령을 쳐서 저장할 위치를 얻어 옵니다.

이 작업 시간이 소요됩니다. tar 파일 압축이 모두 끝나면 witness_node_data_dir 폴더 밑에 blockchain이라는 폴더가 생기고 그 밑에 우리가 원하는 block_log파일이 있습니다. 이 파일의 사이즈를 반드시 확인해 보세요.

# ls -alh

image.png

위에 보시면 해당 파일이 303GB 사이즈입니다. 그리고 이 파일 말고, block_log.index 파일도 있습니다. 이것도 사이즈가 이 정도가 되어야 합니다. 너무 큰 것도 이상한 것입니다. 그리고 다른 폴더들이 있습니다. 이건 mira 관련된 건데 모르셔도 됩니다.

드디어 제일 중요한 블록 파일 압축을 풀고 필요한 곳에 위치 시켰습니다.

증인 노드 돌리기 위한 키 생성

이제 증인 노드 동기화를 하기 전에 키를 생성해야 합니다. 매우 중요하니 차근히 따라오세요. 이 키를 제대로 생성하고 입력해야 증인 노드가 정상적으로 돌아갑니다.

가장 먼저 툴킷의 위치로 이동합니다. 자신의 환경에 맞는 경로로 이동합니다.

# cd ~/steem/steem-docker-ex
# ls
LICENSE  README.md  data  dkr  dkr_fullnode  dkr_local  example.env  run.sh  scripts

참고로 ~/steem/steem-docker-ex에서 ~의 의미는 내 홈 폴더의 위치를 의미합니다. 전체 경로를 입력하지 않고, 간편하게 이용할 때 사용합니다.

위 폴더 내용을 보면 run.sh파일이 있습니다. 이 파일로 모든 명령을 처리합니다. 아직 블록 동기화가 안되어 있기 때문에 원격 지갑에 접속하여 키를 생성합니다.

# ./run.sh remote_wallet
Logging RPC to file: logs/rpc/rpc.log
2612678ms main.cpp:169                  main                 ] wdata.ws_server: wss://steemd.privex.io
new >>>

이 상태에서 지갑의 암호를 입력해 줍니다.
입력방법은 다음과 같습니다.

set_password "암호"

위에 처럼 따옴표 안에 사용할 암호를 입력하세요.

@ayogom님의 캡쳐를 참고하세요.

그러면 지갑 프롬프트가 다음과 같이 locked로 바뀝니다. 그러면 여기에 방금 입력한 암호를 입력하면 unlocked로 됩니다.

locked >>> unlock "암호"
unlocked >>> 
null

이제 지갑 사용이 가능하고, 여기서 키를 생성합니다.

unlocked >>> suggest_brain_key
suggest_brain_key
{
  "brain_priv_key": "MOHAIR PLUNDER RESENE LOUNGER ALIENCY ABHOR RUBDOWN CHOATE MANHEAD POMPIER SPARSE RIFFLER UNCIA PHOLIDO CHEERY DANG",
  "wif_priv_key": "5JZVyrWbrNgiggXq8HJ9k9dS7skBpd6M8a2ffDeqh17vPuM1F63",
  "pub_key": "STM8VgYSa8vAcx2Mg16EypTmCfdMYM5v3wng4fyNpLHQ7pCpfSC2K"
}

여기서 생성된 키를 잘 저장해 둡니다. 지갑에서 설정한 암호도 잘 기억해 둡니다. 나중에 wif_priv_keypub_key를 설정에 사용할 것입니다. 이건 일시적 암호 생성과 같은 작업으로 다시 생성해도 됩니다.

이렇게 하고 Ctrl + D를 눌러서 (동시에 ctrl 키와 d키를 누른다는 의미), 지갑을 종료시킵니다.
그러면 다시 원래 프롬프트로 빠져 나옵니다.

657316ms wallet.cpp:427                save_wallet_file     ] saving wallet to file wallet.json
root@etianclub ~/steem/steem-docker-ex #

증인 노드 설정

이제 증인 노드를 돌리기 전에 어떤 사용자가 증인 노드를 돌리는지 몇 가지 정보를 입력해야 합니다. 여기서 @ayogom님 자료와 조금 다릅니다.

먼저 설정 파일을 새로 복사해서 생성합니다. 샘플 파일을 복사해서 새롭게 만드는 것입니다. 반드시 파일명은 config.ini이어야 합니다.

root@etianclub ~/steem/steem-docker-ex # cp data/witness_node_data_dir/config.ini.example data/witness_node_data_dir/config.ini

이제 이 파일을 수정합니다. 변경할 내용 위주로만 설명합니다.

root@etianclub ~/steem/steem-docker-ex # vi data/witness_node_data_dir/config.ini

# Shared file size: (자신의 RAM 사이즈에 맞게 변경하세요)
shared-file-size = 64G
#shared-file-dir = /shm/

# Plugin(s) to enable, may be specified multiple times
# (원래 witness 플러그인만 필요한데, 뒤에서 작업할 증인 업데이트 명령에서 몇 가지 api를 요구해서 추가해야 합니다.)
plugin = witness condenser_api network_broadcast_api account_by_key database_api

# 저는 로컬 지갑 접속 오류가 발생해서 아래 부분이 필요했습니다.
rpc-endpoint = 127.0.0.1:8090

# name of witness controlled by this node (증인 노드를 돌린 스팀 계정을 따옴표 내에 입력합니다.)
witness = "etainclub"

# WIF PRIVATE KEY to be used by one or more witnesses or miners
# (지갑에서 suggest_brain_key로 얻어진 wif_priv_key를 따옴표 없이 입력합니다.)
private-key = 5JZVyrWbrNgiggXq8HJ9k9dS7skBpd6M8a2ffDeqh17vPuM1F63

기존과 조금 다른 설정이 들어가는데, 다음과 같은 에러가 발생해서 변경한 것입니다.
https://steemit.com/hive-192037/@etainclub/now-i-etainclub-run-a-witness-node

위 처럼 수정하고 저장하고 파일을 빠져 나옵니다. (vi나 nano 에이터 사용법은 다른 자료를 참고하세요)

다음으로 환경변수 파일을 생성하고 내용을 다음과 같이 넣습니다.

주의. 어디서 생성하는지 프롬프트를 잘 보고 확인하세요.

root@etianclub ~/steem/steem-docker-ex # vi .env
PORTS=
DOCKER_NAME=witness

위에서 설정한 환경변수는 증인 노드 프로그램의 이름을 지정한 것입니다.
(정확히는 docker의 컨테이너 이름입니다.)

이제 증인 노드 동기화를 위한 모든 준비가 완료되었습니다.

동기화 시작

이제 블록 데이터 동기화할 시간입니다. 블록 파일을 이용하면 동기화가 매우 빠르게 됩니다. 왜냐하면 이미 동기화가 완료된 파일을 바탕으로 그 이후 블록 데이터만 동기화 시키면 됩니다. 그래서 가능하면 최신 블록 파일을 다운받아서 동기화 작업을 시작하면 좋습니다.

root@etianclub ~/steem/steem-docker-ex # ./run.sh start

이렇게 입력하면 처음에 빨간색으로 에러 메시지들이 좀 나타납니다. 당황하지 마세요. 정상적인 메시지 동기화 메시지입니다.

좀 기다리면 블록이 동기화 되고 있다는 메시지가 보입니다. 그러면 아래 그림처럼 보이게 됩니다.

1458330ms p2p_plugin.cpp:212            handle_block         ] Got 6 transactions on block 58176417 by hinomaru-jp -- Block Time Offset: 330 ms
1461019ms p2p_plugin.cpp:212            handle_block         ] Got 8 transactions on block 58176418 by roundblocknew -- Block Time Offset: 19 ms
1463740ms p2p_plugin.cpp:212            handle_block         ] Got 9 transactions on block 58176419 by exnihilo.witness -- Block Time Offset: -259 ms
1466901ms p2p_plugin.cpp:212            handle_block         ] Got 10 transactions on block 58176420 by inwi -- Block Time Offset: -98 ms
1470013ms p2p_plugin.cpp:212            handle_block         ] Got 6 transactions on block 58176421 by steem.history -- Block Time Offset: 13 ms
1472973ms p2p_plugin.cpp:212            handle_block         ] Got 12 transactions on block 58176422 by maiyude -- Block Time Offset: -26 ms
1476248ms p2p_plugin.cpp:212            handle_block         ] Got 6 transactions on block 58176423 by rlawlstn123 -- Block Time Offset: 248 ms
1478764ms p2p_plugin.cpp:212            handle_block         ] Got 13 transactions on block 58176424 by justyy -- Block Time Offset: -235 ms
1481631ms p2p_plugin.cpp:212            handle_block         ] Got 9 transactions on block 58176425 by marcosdk -- Block Time Offset: -368 ms
1484860ms p2p_plugin.cpp:212            handle_block         ] Got 11 transactions on block 58176426 by smt-wherein -- Block Time Offset: -139 ms
1487844ms p2p_plugin.cpp:212            handle_block         ] Got 8 transactions on block 58176427 by smt-wherein -- Block Time Offset: -155 ms
1491054ms p2p_plugin.cpp:212            handle_block         ] Got 10 transactions on block 58176428 by rlawlstn123 -- Block Time Offset: 54 ms

축합니다!

동기화에 성공하셨습니다.

여기까지 오시느라 고생 많으셨습니다. 동기화에 성공했으니 좀 쉬시고 다음에 이어서 증인키 업데이트 및 피드 가격 설정에 대해서 설명하겠습니다.

동기화가 되었다고 증인 검색이 되는 것은 아닙니다. 증인키 업데이트를 해야 비로서 검색됩니다.

조금만 기다려주세요.

증인 보팅 및 리스팀 부탁드립니다.

증인 보팅은 아래에서 가능합니다. 부탁드립니다.
https://steemitwallet.com/~witnesses
@etainclub

cc.
@steem-agora
@steemcurator01

Sort:  

순위가 계속 급 상승하기를 기원합니다. ^^

응원 고맙습니다! 순위가 정체되어 있습니다. 분발할게요.

Upvoted! Thank you for supporting witness @jswit.
default.jpg

Coin Marketplace

STEEM 0.35
TRX 0.12
JST 0.040
BTC 71288.26
ETH 3580.30
USDT 1.00
SBD 4.77