Block Archive Recovery Guide#

Block Archive 는 BORA Explorer 에서 제공하는 Service Blockchain Node 의 백업파일을 의미합니다. 이를 공개함으로써 Service Node 에 대한 신뢰를 확보하고 나아가 사용자가 이를 활용한 다양한 서비스를 만들 수 있는 환경을 제공하고자 합니다.
본 문서는 Block Archive File 을 이용하여 노드를 복구하는 과정에 대해 설명합니다.


Block Archive 복구를 위한 환경은 아래와 같습니다.

  • OS : Centos 7.x
  • Core : 4 Core 이상 권장
  • RAM : 4 GB 이상 권장

Recovery Process#

  1. Download custom geth binary
  2. Download Service Node Archive File
  3. Geth init
  4. Import Archive Files
  5. Geth Start
  6. Check Blockchain Status

#

Download custom geth binary#

BORA 에서 사용중인 블록체인 플랫폼은, 최적화 설정이 적용된 바이너리 입니다. 이 바이너리를 다운로드 받은 후 아래 경로로 이동 합니다.

  • Download
  wget -O geth_1.8.27_bora http://shorturl.at/IOP38
  cp -f geth_1.8.27_bora /bin/geth_1.8.27_bora

#

Download Private Node Archive File#

1.Archive File

BORA Blockchain Explorer 사이트를 통해 복구할 대상의 Service Node Archive File 을 다운로드 받습니다.

  • Service Node Archive File Download Site

    https://explorer.boraecosystem.com/archive

  • File prefix : blocks_{geth_no}{start_blockNo}{end_blockNo}.tar.gz

ex) geth_no 2 Download File(blockNumber : 0 ~ 2901166)

    blocks_2_0-2814767.tar.gz
    blocks_2_2814768-2901166.tar.gz

2.genesis File

genesis 파일을 다운로드 받습니다.

각 Service Node 별로 chainId 와 timestamp 정보가 상이하므로, 아래 내용을 참고하여 genesis 파일 내 chainId,timestamp 값을 알맞게 수정 후 genesis block 를 생성 합니다.

* geth_no 별 chainID, timestamp 확인

geth_no   chainId    timestamp
geth_no 1 2019060511 0x5c46bd0b
geth_no 2 2019062016 0x5c46bd0b
geth_no 3 2019081608 0x5d55ed15
...

* chainID, timestamp 변경 

ex) geth_no 가 2인 경우
sed -i 's/XXXXXXXXXX/2019062016/g' genesis.json
sed -i 's/YYYYYYYYYY/0x5c46bd0b/g' genesis.json

cat genesis.json | grep chainId
cat genesis.json | grep timestamp

#

Geth init#

  • geth 초기화를 통해 genesis block 을 생성합니다.
mkdir -p ~/boranet/node
cd ~/boranet/node
geth_1.8.27_bora --datadir ~/boranet/node init genesis.json

#

Import Archive Files#

Archive File 은 주 단위로 백업이 이뤄지고 있습니다. 매주 월요일은 Node Full Backup 이 진행되고, 화요일부터 일요일까지는 Daily Incremental Backup 이 진행됩니다. 따라서 복구 절차는 * Full Backup File 복구 > Daily Incremental Backup File 복구

로 진행되어야 합니다.

처음 단계로 위에서 다운로드 받은 Full Backup Archive File 을 Block 0 부터 import 합니다.

tar -xvzf blocks_2_0-2814767.tar.gz
cd BACKUP/
ls -al | grep blocks_2_0-2814767
geth_1.8.27_bora --datadir ~/boranet/node/geth **import blocks_2_0-2814767**

Full Backup File (blocks_2_0-2814767) import 가 완료되면, Daily Backup Archive File 도 단계적으로 import 합니다.

tar -xvzf blocks_2_2814768-2901166.tar.gz
geth_1.8.27_bora --datadir ~/boranet/node/geth **import blocks_2_2814768-2901166**
  • 참고. 복구 결과
* blocks_2_0-2814767 import 결과
Import done in 10m38.758088569s.
...
Read(MB):2720.27740 Write(MB):6836.08816
Trie cache misses:  0
Trie cache unloads: 0

Object memory: 303.138 MB current, 882.460 MB peak
System memory: 1337.348 MB current, 1337.348 MB peak
Allocations:   1706.244 million
GC pause:      111.894568ms
...
Read(MB):3087.85842 Write(MB):7267.00528
INFO [09-24|16:03:07.601] Database closed                          database=~/boranet/node/geth/chaindata


* blocks_2_2814768-2901166 import 결과

Import done in 19.677189311s.
...
Read(MB):1.27135 Write(MB):97.66709
Trie cache misses:  0
Trie cache unloads: 0

Object memory: 414.943 MB current, 407.568 MB peak
System memory: 606.127 MB current, 540.065 MB peak
Allocations:   51.947 million
GC pause:      2.245304ms
...
Read(MB):1005.37283 Write(MB):1155.88420
INFO [09-24|16:04:59.027] Database closed                          database=~/boranet/node/geth/chaindata

#

Geth Start#

start script 파일을 다운로드 받은 후, ChainID를 변경 하고 Geth 를 구동합니다.

start.sh

sed -i 's/ZZZZZZZZZZ/2019062016/g' geth-archive-start.sh
chmod +x geth-archive-start.sh

./geth-archive-start.sh
tail -f ~/boranet/node/geth.log

#

Check Blockchain Status#

eth.getBlock 명령어를 이용하여 정상적으로 import 되었는지 확인합니다.

geth attach http://127.0.0.1:8545

> eth.getBlock(2846603)
> blockhash : 0x1653100f82d1c32201048992903af79e7c17d5261e42aae50f525c5fc020bda6

BORA explorer 에서 해당 block 번호와 blockhash 값이 동일한지 확인합니다. https://explorer.boraecosystem.com/

Push Sushi : 2846603 (blockNo)

Heigth     : 2846603
Block Hash : 0x1653100f82d1c32201048992903af79e7c17d5261e42aae50f525c5fc020bda6
Node       : 2 (geth no)