지난 2월 바이낸스 스마트 체인(BSC)과 바이낸스 체인이 바이낸스 코인 생태계의 네이티브 토큰인 BNB와의 연계성 반영을 위해 BNB 체인으로 통합된다는 소식이 있었다 [ 기사 링크 ]. 이와 관련해 바이낸스 노드를 구동시켜볼 일이 생겼다.
이번 게시물에서는 Linux 환경에서 바이낸스 스마트 체인 Fullnode 구축에 관한 내용을 정리한다.
바이낸스 스마트 체인 Fullnode 권장 사양
Fullnode를 운영하기 위한 권장 사양에 대한 내용이다. 요구 사양이 가장 높다고 생각되는 이더리움보다 높은 것 같다. 참고로 Validator 노드 역시 Fullnode와 권장 사양이 같다.
AWS 기준 디스크는 gp3 타입, CPU는 m5zn.3xlarge 타입을 권장한다.
- OS : Mac OS 혹은 Linux.
- Storage : 최소 2TB, 8k IOPS, 250MB/s Throughput 이상의 SSD(AWS 기준 gp3 타입 볼륨)
- CPU : 16 코어
- Memory : 64GB
- Network : 5MB/s 이상의 네트워트망
노드 설치 가이드
노드 구축은 총 4단계로 정리해볼 수 있다. 블록 데이터 스냅샷 다운로드는 선택 사항이며, 조금 더 빨리 노드 싱크를 맞추고자 한다면 스냅샷을 미리 다운로드 받고 진행하는 게 도움이 될 것이다.
- 블록 데이터 스냅샷 다운 [ 선택 사항 ]
- pre-build 된 geth 클라이언트 다운
- 설정 파일(config.toml) 및 제네시스 블록(genensis.json) 다운
- 노드 활성화(init) 및 구동(run)
블록 데이터 스냅샷 다운로드
해당 링크[ 스냅샷 다운로드 ]로 이동하면 체인 데이터 스냅샷을 다운받을 수 있다. 이 데이터는 매일 업로드되며, 노드 기동 시 블록 데이터가 저장될 경로 --datadir에
위치시켜두면 데이터 싱크를 맞추는데 시간을 절약할 수 있다.
작성일 기준(22년 04월 14일) 약 1TB의 용량으로 다운로드에는 1~2시간이 소요되는 것 같다. 데이터 다운로드 방법은 아래 명령어를 참고하자.
# 블록데이터 스냅샷 다운로드
wget -O geth.tar.lz4 [스냅샷 URL]
# 22년 04월 01일 스냅샷 다운로드
wget -O geth.tar.lz4 https://tf-dex-prod-public-snapshot-site1.s3-accelerate.amazonaws.com/geth-20220401.tar.lz4?AWSAccessKeyId=AKIAYINE6SBQPUZDDRRO&Signature=S6sMRqh84xff%2FcGO1sv6Gbuan4Y%3D&Expires=1652691988
노드 클라이언트 다운로드
바이낸스 노드는 이더리움과 같은 geth 클라이언트를 사용하는 듯하다. 하지만 공식 문서에서는 pre-build 된 geth 클라이언트 바이너리 파일을 다운받아 사용하는 것을 권장한다. 이유는 설명되어있지 않지만 추측하건대 클라이언트 설정값이 다르기 때문이지 않을까 싶다.
나의 경우 Linux 환경 클라이언트를 다운받았다. 명령어를 실행하면 geth_linux
란 파일이 생성되는데, 이후 코드 블록에서 geth라고 명시되는 클라이언트 실행 명령어는 이 파일을 나타냄을 참고하자.
# Linux 환경 geth 클라이언트 다운로드
wget $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep browser_ |grep geth_linux |cut -d\" -f4)
# MacOS 환경 geth 클라이언트 다운로드
wget $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep browser_ |grep geth_mac |cut -d\" -f4)
설정 파일 다운로드 ( config.toml & genesis.json )
바이낸스 스마트 체인 Fullnode 실행에 필요한 설정 파일을 다운로드한다. 총 2개의 파일이며, 노드 실행 환경에 대한 값이 저장된 config.toml
파일과 제네시스 블록인 genensis.json
파일이다. 아래 명령어를 실행하면 .zip 파일이 생성되는데 unzip 명령어로 압축을 풀면 된다.
# 메인넷
wget $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep browser_ |grep mainnet |cut -d\" -f4)
unzip mainnet.zip
# 테스트넷
wget $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep browser_ |grep testnet |cut -d\" -f4)
unzip testnet.zip
config.toml
파일에서는 클라이언트 실행 포트와 HTTP 타임아웃 설정값이 저장되어있으며, genesis.json
은 네트워크 ID를 비롯한 블록 정보가 명시되어 있다. 자세한 내용은 아래 코드 블록을 참고하자.
# config.toml 파일
ListenAddr = ":30311"
EnableMsgEvents = false
[Node.HTTPTimeouts]
ReadTimeout = 30000000000
WriteTimeout = 30000000000
IdleTimeout = 120000000000
# genesis.json 파일
{
"config": {
"chainId": 56,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "muirGlacierBlock": 0, "ramanujanBlock": 0, "nielsBlock": 0, "parlia": { "period": 3, "epoch": 200 } }, "nonce": "0x0", "timestamp": "0x5e9da7ce", "extraData": "0x00000000000000000000000000000000000000000000000000000000000000002a7cdd959bfe8d9487b2a43b33565295a698f7e26488aa4d1955ee33403f8ccb1d4de5fb97c7ade29ef9f4360c606c7ab4db26b016007d3ad0ab86a0ee01c3b1283aa067c58eab4709f85e99d46de5fe685b1ded8013785d6623cc18d214320b6bb6475978f3adfc719c99674c072166708589033e2d9afec2be4ec20253b8642161bc3f444f53679c1f3d472f7be8361c80a4c1e7e9aaf001d0877f1cfde218ce2fd7544e0b2cc94692d4a704debef7bcb61328b8f7166496996a7da21cf1f1b04d9b3e26a3d0772d4c407bbe49438ed859fe965b140dcf1aab71a96bbad7cf34b5fa511d8e963dbba288b1960e75d64430b3230294d12c6ab2aac5c2cd68e80b16b581ea0a6e3c511bbd10f4519ece37dc24887e11b55d7ae2f5b9e386cd1b50a4550696d957cb4900f03a82012708dafc9e1b880fd083b32182b869be8e0922b81f8e175ffde54d797fe11eb03f9e3bf75f1d68bf0b8b6fb4e317a0f9d6f03eaf8ce6675bc60d8c4d90829ce8f72d0163c1d5cf348a862d55063035e7a025f4da968de7e4d7e4004197917f4070f1d6caa02bbebaebb5d7e581e4b66559e635f805ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x2625a00",
"difficulty": "0x1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE",
"alloc": {
"0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE": {
"balance": "0x0"
},
"0x0000000000000000000000000000000000001000": {
"balance": "0x0",
"code": "0x608060405260043...
...
}
노드 활성화(init) 및 실행(run)
클라이언트와 설정 파일 세팅이 완료되었으면, 곧바로 노드 활성화와 실행을 진행하면 된다. config.toml, genesis.json, --datadir 에 대한 경로에 신경 써서 진행하자.
# 노드 활성화
geth --datadir [블록 데이터 저장 경로] init [genesis.json 파일]
# 노드 실행
geth --config [config.toml 파일] --datadir [블록 데이터 저장 경로] --cache 8000 --rpc.allow-unprotected-txs --txlookuplimit 0
노드가 성공적으로 실행되었다면 아래와 같은 실행 로그와 블록 싱크를 확인할 수 있다. 보다 자세한 가이드가 필요하다면 포스트 제일 하단에 공식 문서 링크를 첨부해두었으니 참고하면 된다.
# 노드 실행 로그
INFO [04-17|07:15:04.481] Imported new state entries count=384 elapsed="3.399µs" processed=888,101,394 pending=87890 trieretry=2 coderetry=0 duplicate=3494 unexpected=11044
INFO [04-17|07:15:04.776] Imported new block headers count=1 elapsed="400.122µs" number=17,018,498 hash=052072..853736
INFO [04-17|07:15:06.889] Imported new state entries count=768 elapsed="543.806µs" processed=888,102,162 pending=88851 trieretry=0 coderetry=0 duplicate=3494 unexpected=11044
INFO [04-17|07:15:07.851] Imported new block headers count=1 elapsed="478.515µs" number=17,018,499 hash=b52b2c..285ca4
INFO [04-17|07:15:08.637] Downloader queue stats receiptTasks=0 blockTasks=0 itemSize=237.33KiB throttle=277
INFO [04-17|07:15:08.670] Imported new state entries count=768 elapsed="575.143µs" processed=888,102,930 pending=89555 trieretry=0 coderetry=0 duplicate=3494 unexpected=11044
INFO [04-17|07:15:08.908] Imported new state entries count=768 elapsed="3.047µs" processed=888,103,698 pending=90681 trieretry=0 coderetry=0 duplicate=3494 unexpected=11044
# 싱크 확인
> eth.syncing
{
currentBlock: 17018411,
highestBlock: 17018511,
knownStates: 888232486,
pulledStates: 888126337,
startingBlock: 0
}
바이낸스 스마트 체인 공식 문서
https://docs.binance.org/smart-chain/developer/fullnode.html
댓글