Learning EOS Block Producer(BP) Part 2. Practice

Sonny
EOS Chrome
Published in
11 min readMar 22, 2019

--

서론

앞서 Part 1. 이론편에서 Block Producer(BP)에 대한 전반적인 이론에 대해 알아 보았습니다. 이번 Part에서는 BP가 되기 위해 필요한 기술적 요구사항에 대해 설명을 하려고 합니다. 첫번째로 노드들의 안전을 위한 보안적 측면, 두번째로 노드실행 연습 및 BP노드를 구성하는 방법, 세번째로 EOS BP 등록하는 방법과 선거, 마지막으로 BP가 되기위한 최소요구사항에 대해 알아보도록 하겠습니다.

보안

EOS BP 가 되기 위해서는 노드들의 안전, DDos 등의 취약점에 대해서 보안을 해야됩니다. 이는 EOS 네트워크을 보호하는데 있어 가장 큰 이점이 될 수 있습니다. 이에 따라 보안적 측면에 대해 알아 보겠습니다

GhostBusters

인프라의 설정을 하기 위해 EOS Block Producer GhostBusters 보안 가이드를 확인합니다.(Nodeos를 ROOT로 실행하지 않도록 조심합니다.)

GhostBusters는 기본적으로 신뢰할 수 있는 통신을 위한 Keybase와 보안 노드연결을 위한 WireGuard를 사용합니다. 이는 Keybase를 사용하면 신원을 확인 할 수 있고, 안전한 메세지 암호화 기능을 제공하기 때문입니다. 또한 이상적으로 BP 노드간의 공용 메세징을 허용하고 BP노드에 공용 인터넷 액세서를 허용하지 않기 위해서 WireGuard 커널 기반 VPN 소프트웨어를 사용합니다.

keybase 란 ?

keybase를 설치하는 이유는 사용자가 높은 수준으로 온라인 신원을 확인하기 위해 공개 암호화 키를 생성하거나 기존 암호키를 업로드 하는 시스템입니다. 예를 들어 A와 B가 중고거래를 하는데 있어 서로의 신원이 확인 되지않아 신뢰를 할 수 없는 구조를 A,B에대한 신원을 확인할 수 있는 방법이라고 생각하시면 됩니다.

Keybase 설치

1. sudo apt install curl
#keybase 실행하기 위한 curl사용(curl:서버와 통신할 수 있는 커맨드 명령어 툴)
2. curl -O https://prerelease.keybase.io/keybase_amd64.deb
3. sudo dpkg -i keybase_amd64.deb
4. sudo apt-get install -f
5. run_keybase
# keybase 실행
keybase 설치 및 실행 , keybase addresss 생성 , keybase login

WireGuard 란?

wireGuard는 차세대 VPN 프로토콜이라고 할 수있습니다. 특히 다른 프로토콜에 비해 빠르고 간단하게 설치가 가능하며, 현재 사용되는 최신의 암호화를 사용하고있습니다(CURVE25519, ChaCha20,Poly1305 등이 있습니다.)

WireGuard 설치

1. sudo add-apt-repository ppa:wireguard/wireguard
2. sudo apt-get update
3. sudo apt-get install wireguard resolvconf
README.md를 통해 정보들을 setup하고 ./installGhostbuster.sh를 실행

JemXPat

EOS의 핵심 인프라 구조 가이드입니다.코어시스템을 통한 VPN 소프트웨어를 사용하여 Security Layer를 제공합니다. 가상에서 사용되기 때문에 두 호스트들 사이에 UDP/IP 터널을 생성할 수 있으며. Private Network로 사용이 가능하여 해당 트랙픽에 대한 강력한 암호화(ECDHE,ChaCha20-Ploy1305)를 제공하고 있습니다.

Secure Infrastructure Proposal

보안 인프라구조 제안
1계층 : BP 계층으로써 1개의 BP노드, Standby 노드, 생산자 제어 스위치(장애 조치 스위칭을 모니터링하고 활성화 하는 시스템)존재하며 노드들은 VPN(WireGuard)를 통해 다른 신뢰할 수 있는 BP, 전체 노드에 연결될 수 있습니다.2계층 : P2P 레이어 로써 전체노드(Full Node)와 BP 노드가 서로 직접적으로 연결되어있으며, P2P VPN을 통해 안전하게 BP에 연결 되어있습니다.3계층 : API 계층으로써 히스토리 API 및 체인 API만 사용할 수 있습니다. 또한 4계층과의 Load Balancer를 통하여 유저들과의 데이터들을 주고 받을 수 있습니다.4계층 : 3계층과의 연결이 되어있으며,2계층에서의 Full Node와 연결 되어있습니다.

노드

노드 실행 연습 (Practice Node)

BP가 되기위해 노드를 실행하는 연습을 하는 것이 좋은 경험이 될 수 있습니다. 이를 연습하기 위해서는 JungleTestnetCryptoKylin을 통해서 효과적이며, 간단하고, 쉽게 사용 할 수 있도록 해줍니다.

BP 노드 구성 (BP Node Configuration)

BP 노드에서는 Chain 과 Producer plugins를 실행할 수 있으면 되지만LiquidEOS HeartBeat Plugin을 추가하여 사용하는 것이 좋습니다. 이는 BP 노드의 IP를 비밀로 유지하고, 생산자의 노드를 숨기려고 하기 때문입니다.

EOS BP 등록

EOS Wallet 생성

cleos wallet create -n [walletname]

EOS Wallet 잠금 해제

cleos wallet unlock
명령어 입력 후 자신 wallet password 입력

EOS 계정의 개인키 Wallet에 넣기

cleos wallet import [privatekey]

BP를 위한 bp.json 파일 생성

이는 포털과 웹사이트를 투표하여 BP를 식별하는데 사용됩니다. bp.json에는 BP, node 등에 대한 위치정보가 포함되어 있으며, BP의 공개키, 식별가능 정보등이 있습니다.

EOS BP Information Standardproducer_account_name: Name of producer account
org: [Object]
candidate_name: Producer/organization name
website: Block producer website
code_of_conduct: Full link to where it is,
ownership_disclosure: Full link to where it is,
email: Contact email
branding: {Object} - Logo images
logo_256: Entire url to image 256x256px
logo_1024: Entire url to image 1024x1024px
logo_svg: Entire url to image svg
location: {Object} - Organization location
name: Location in human readable format [City, State]
country: Country code [XX] in accordance to ISO 3166-1 alpha-2
latitude: Latitude in decimal degrees
longitude: Longitude in decimal degrees },
social: {Object} - NOT THE ENTIRE URL, only usernames on social networks,
steemit: Username without @
twitter: Username
youtube: Channel address
facebook: Page/group address
github: Username
reddit: Username
keybase: Username
telegram: Username
wechat: Username
nodes: [Array]
location: Node location
name: Node location in human readable format [City, State]
country: Node country code [XX]
latitude: Node latitude in decimal degrees
longitude: Node longitude in decimal degrees
node_type: Type of service producer/full/query/seed
producer: Node with signing key
full: Node in front of producer
query: Node that provides HTTP(S) API to the public
seed: Node that provides P2P and/or BNET to the public
is_producer (deprecated, use node_type = producer)
p2p_endpoint: EOSIO P2P endpoint host:port
bnet_endpoint: EOSIO BNET endpoint host:port
api_endpoint: EOSIO HTTP endpoint http://host:port
ssl_endpoint: EOSIO HTTPS endpoint https://host:port
위와같은 형식으로 bp.json을 작성하시면 됩니다.

계정이름 생성

계정이름은 12자의 소문자,영숫자 이여야하며, 첫번째 문자는 a-z,1–11개 이상의 문자는 a-z,1–5이며 bp.json 계정과 일치 해야됩니다.

cleos -u https://proxy.eosnode.tools 시스템 regproducer accountname <producer-publickey> "https : // <domain.com> /"-p accountname

선거 및 출마

BP 후보자들은 선거에 출마하기 위해 EOS Go에서 저마다 공약을 제시하고 출마 사실을 공표하고, BP 중재자들이 후보자들을 심사하게 됩니다. 중재자들의 심사를 통과하게 된다면 BP 출마가 가능하게 됩니다.

EOS GO [https://bp.eosgo.io/]

기술사양

기술요구사항 (Technical requirement)

BP는 블록체인의 안정성에대한 결정적인 요소가 되므로, 기술 요구사항도 비교적 까다롭습니다. 기술 요구 사항에 대한 정확한 요구 사항은 아직 결정되지 않았지만 2019.01.15기준으로 Bitfinex의 사양에 대해 알아 보겠습니다.

Bitfinex [https://www.bitfinex.com/eos]

위와 같은 사양으로 현재 BP로써 노드에게 제공을 하고 있습니다.

결론

지금까지 EOS 블록체인에서 블록을 생성하는 중요한 역할을 하는 BP에 대해서 보안적 측면, 노드실행 연습 및 BP노드를 구성하는 방법, BP 등록하는 방법과 선거 그리고 BP의 기술적 요구사항에 대해서 알아보았습니다.
이번 Part에서 EOS 블록체인의 BP가 되기위한 실습을 진행해 보았는데, EOS를 공부하시다가 BP가 무엇인지 궁금하셨던 분, 앞으로 BP선거에 출마를 생각하시는 분들에게 도움이 되었으면 하는 바람입니다.

Reference

EOS 계정과 권한
EOS BP 참고사항
EOS BP 가이드 : 블록서명키 설정
EOS Block Producer Guide — Updated Oct. 16, 2018
EOS Ghostbusters 보안

Team.Sapari
정해민 : kjhm0607@gmail.com
김평주 : vudwn9497@gmail.com
김재민 : jeamin4800@gmail.com
조성연 : tjddusanan@gmail.com

--

--