BIOS Boot 시리즈 01: “eos-bios”

eosys
EOSYS
Published in
11 min readJun 1, 2018

안녕하세요, 대한민국의 EOS 블록프로듀서 후보 EOSYS입니다.

저희 뿐 아니라 모든 커뮤니티 여러분께서 기다리고 있는 EOS 체인 런칭. 어떻게 준비되고 있는지 궁금하지 않으셨나요? 현재 전 세계의 여러 후보들이 모여 부트에 필요한 과정들을 테스트하며 준비해 나가고 있습니다. 오늘 소개해 드릴 부트 과정은 EOS Canada에서 주도하는 eos-bios로, 저희 EOSYS 뿐 아니라 EOS 등 주요 후보들이 참여해 테스트를 진행하고 있습니다. eos-bios는 어떻게 구성되어 있는지 함께 살펴보시죠.

개요

‘eos-bios’는 EOS Canada에서 제공하고 있는 메인넷 런칭 도구입니다. EOS Canada는 이를 통해 메인넷 부트에 필요한 일련의 과정들을 자동화 하였으며, BP 후보들의 자율적인 참여를 권장하고 있습니다. EOS Canada가 이를 통해 이루고자 하는 궁극적인 목표는 ‘Multi-Stage Mainnet’입니다. Stage란 메인넷 런칭과 동일한 부트 과정들을 진행하는 테스트 단계입니다. 또한 각 stage는 이전의 stage를 seed network로 활용하여 진행이 이루어집니다.

예를 들면 stage0이 시작이 되면 BP 후보들은 자신들의 정보가 담긴 파일(‘discovery file’)을 eos.disco 스마트 컨트랙트에 publish(등록)합니다. 모든 등록을 마치면 stage0는 stage1의 seed network가 되며, seed network에 등록되어 있는 BP 후보들만이 stage1의 ‘Bios-boot-node’ 및 ‘ABP’의 자격을 얻게 됩니다. stage1이 시작되면 stage0를 버리고 stage2를 다시 준비합니다. 이런식으로 stage의 단계를 높이고 메인넷 런칭 시기가 오면 최종 stage는 메인넷의 seed network로 활용된다는 것이 주요 골자입니다.

이러한 과정들을 통해 BP 후보들은 여러 stage 단계를 거치면서 부트 과정에 대한 경험을 쌓을 수 있을 뿐만 아니라, 단계별로 문제점들을 함께 논의하면서 보다 안정적이고 성공적인 메인넷 런칭을 준비할 수 있습니다.

*Bios-Boot node
: 메인 네트워크 체인의 부트를 담당하는 노드로, 첫 번째 블록을 생성하는 역할을 수행합니다.

*ABP(Appointed Block Producer)
: 초기 메인 네트워크의 형성을 위해 임시로 선정된 블록 프로듀서입니다.

*Eos.disco 스마트 컨트랙트
: BP후보의 정보가 담긴 discovery와 초기 블록에 대한 정보를 담은 genesis.josn 파일을 관리합니다.

*Seed network
: 메인 네트워크 형성의 기본이 되는 정보들이 담겨 있는 네트워크를 의미합니다.

Discovery Protocol

Dicovery Protocol은 BP 후보들간의 분산된 합의(Distributed Consensus)를 목적으로 만들어진 프로토콜입니다. 부트 과정에는 여러 BP 후보들이 참여하는 만큼 후보에 대한 ‘신뢰성’이 무엇보다 중요합니다. 이에 Discovery Protocol을 통해 BP 후보들은 각자 부트 과정에 어떤 파일을 사용하고 상대 BP 후보 중 누구를 신뢰하는 지를 공유합니다. 그리고 이러한 내용을 기반으로 여러 stage 단계를 거치면서 검증된 실력을 갖춘 BP 후보들을 선택하는 등 상호 보완 및 견제를 통해 메인넷 런칭의 신뢰성을 높입니다.

Discovery File

Discovery File은 Discovery Protocol의 매개 역할을 담당하는 파일입니다. 해당 파일에는 BP 후보들이 어떤 계정의 이름으로 참여하는지, 부트 과정에 어떤 파일들을 사용하고 있는지, 그리고 상대 BP 후보들에 대해서 얼마만큼 신뢰하고 있는지 등의 내용이 담겨 있습니다. 자세한 내용은 다음과 같습니다.

  1. Peer(BP 후보) 평가
    본인을 제외하고 부트 과정에 있어 신뢰할 수 있고 함께 하고 싶은 Peer를 선택합니다. 여기에는 크게 3가지 항목이 있는데 신뢰하는 Peer의 계정 이름과 해당 Peer에 대한 코멘트, 그리고 1~100 이내의 값으로 표현할 수 있는 신뢰 척도가 있습니다.

2. Nodeos 설정
개별 노드들이 Nodeos 실행에 필요한 config.ini의 내용을 명시하는 것으로 네트워크 연결에 관한 다수의 정보들을 포함하고 있습니다. 다른 Peer와의 연결을 매개하는 P2P Address, 해당 노드에 대한 접근을 가능하게 해주는 HTTP Address, 그리고 Account Name, ABP Account, 그리고 Initial Authority 등 계정 관리 및 권한 설정 기능도 가지고 있습니다.

*Nodeos
: 노드에 대한 행동을 지시하는 명령어로 행동에 따른 다양한 조건들을 명시할 수 있습니다.

*config.ini
: 노드에 대한 다양한 정보들이 담겨 있는 파일입니다.

3. Content 설정
EOS 블록체인은 기본적으로 EOS.IO 소프트웨어 기반으로 커뮤니티에서 자율적으로 생태계가 형성 되길 원합니다. 이에, 같은 요소라도 다양한 코드가 존재합니다. 따라서 Content 부분에서는 BP 후보들이 ‘System Contract’, ‘Boot Sequence’, 그리고 ‘Snapshot Contract’ 등 어떤 코드를 사용하고 있는지에 대한 내용이 담겨 있습니다. 해당 내용은 IPFS를 통해 기록 및 조회가 가능하며, 이는 다른 Peer 평가에 대한 기준이 되고, 나아가 부트 과정 검증에 대한 BP 후보들의 합의를 이끌어 냅니다.

*System Contract
: 시스템 구성에 관한 스마트 컨트랙트를 말합니다.

*Boot Sequence
: 부트가 진행되는 일련의 과정들을 말합니다.

Meshing Algorithm

Meshing Algorithm은 네트워크에 참여하는 BP 후보들이 보다 효과적으로 연결될 수 있도록 고안된 알고리즘입니다. 여기서 효과적이라 함은 네트워크 효과를 최대한 이끌어 냄과 동시에 과도한 연결은 배제하는 것입니다. Meshing Algorithm은 Discovery File 안에 담겨 있는 정보들을 기반으로 Peer들을 가장 최적화 된 방법으로 연결을 시켜줍니다. 연결 형태는 다음과 같습니다.

Orchestrate

Orchestrate는 모든 BP 후보들이 네트워크 상에 연결되는 과정입니다. 부트 과정에는 필요한 역할과 기능이 있습니다. 따라서 네트워크에 참여하는 BP 후보들은 ‘orchestrate’ 명령어를 통해 동시에 특정 알고리즘에 의해 역할과 기능이 분배되고 본격적으로 런칭을 진행하게 됩니다. 2018년 5월 28일을 기준으로 총 40 여개의 BP 후보들이 참여하고 있으며, 그 수는 지속적으로 늘어날 것으로 예상됩니다.

즉, ‘eos-bios’는 BP 후보들이 여러 단계에 걸쳐 부트하는 과정들을 직접 경험하고 보완해 나감으로써 메인넷 런칭을 준비하는 ‘boot-sequence’라고 할 수 있습니다.

업데이트
(1) 2018.05.28 — 안정성에 대한 문제제기 — 하단 참조
(2) 2018.05.29 — 문제제기에 대한 답변 — 하단 참조
(3) 2018.05.29 — ‘eos-bios’ 변경 및 개선사항 — 하단 참조

업데이트 (1) — 안정성에 대한 문제제기

2018년 5월 28일에 eos-bios 안정성에 대한 문제가 제기되었습니다. 문제를 제기한 것은 HKEOS를 포함하여 현재 Ghostbusters라는 메인넷 테스트를 주도하고 있는 BP 후보들이며 주요 내용은 다음과 같습니다.

블록원에서 제공하는 EOSIO는 현재 대부분의 기능들을 플러그인으로 제공하고 있기 때문에 추가 기능을 위해 불필요한 플러그인을 부트 과정에 포함시키는 것은 노출 가능성이 증가하여 해킹의 위험이 높다는 것이 문제를 제기한 BP 후보들의 주장입니다.

*플러그인
: 기존의 응용 소프트웨어에 특정 기능을 추가하기 위한 장치입니다.

eos-bios의 경우 ‘net_api_plugin’이라고 하여 플러그인을 원격으로 컨트롤 할 수 있는 기능을 가진 플러그인이 설치되어 있는데 해당 API가 노출될 경우 네트워크가 불안정해진다고 합니다. 실제로 우리 EOSYS에서도 테스트를 자체적으로 진행한 결과 net cleos를 이용하여 다른 Peer의 연결을 끊을 수 있음을 확인하였습니다.

이에 대한 대안책으로 해당 성명서는 WireGuard Private Mesh Security 사용을 권장하고 있습니다. BP들의 경우 개인키와 같은 민감한 정보들을 가지고 있기 때문에 BP 간의 연결시 WireGuard secure VPN layer를 이용하여 공개적으로 오픈되지 않으면서 서로 연결 시켜주는 방법입니다. 블록체인 관련 API는 풀노드로부터 받음으로써 BP 노드는 네트워크로부터 안전을 확보하겠다는 것이 주요 취지라고 할 수 있습니다.

WireGuard란
오픈 소스 기반의 소프트웨어 응용프로그램으로 VPN 기술을 실행하여 서로 연결된 환경설정을 통해 특정 지점 간의 연결 보안성을 높이는 프로그램입니다.

원문 — EOS BP Security Statement

업데이트 (2) — 안정성 문제제기에 대한 답변

2018년 5월 28일에 eos-bios 안정성에 대한 공식적인 답변이 업로드 되었습니다.

EOS Canada 측에 따르면 문제가 되고 있는 설정에 대해서 여러가지 테스트를 위해 잠시 열어 놓은 기능이며 이미 2018년 5월 2일에 Alexandre가 “The Hooks”라는 유투브 영상을 통해 메인넷 런칭을 할 때는 사용 안함으로 설정해야 한다고 명시했다고 합니다. 다만 피드백에 대한 내용을 겸허히 수용하기 위해 샘플 설정에 해당 내용을 제거하였으며 이에 대한 많은 BP 후보들의 리뷰를 부탁한다는 내용이었습니다.

EOSYS에서도 위의 영상에서 해당 내용이 담겨 있으며 실제 샘플 설정에서도 삭제되었음을 확인하였습니다. 앞으로 각종 이슈에 대하여 빠른 업데이트가 될 수 있도록 노력하겠습니다.

원문 — BIOS: Call for increased collaboration

업데이트 (3) — 주요 변경 및 개선사항

2018년 5월 29일 진행된 stage16에서 다음과 같은 주요 변경 및 개선사항이 있었습니다.

1) BIOS-Boot node의 경우 보안성을 위해서 Peer 네트워크 연결을 모두 끊고 독립적으로 진행합니다. 기존에는 BIOS-Boot node의 개인키를 공개했던 것과는 다르게 stage16에서는 system contract 설치 및 token 분배가 모두 완료되고 공개가 됩니다.

2) ‘Candidate of BIOS-Boot node’가 생겼습니다. 기존에는 Peer 평가를 기준으로 첫 번째 순위의 BP 후보가 BIOS-Boot node가 되었던 것과는 다르게 별도로 ‘Candidate of BIOS-Boot node’를 설정할 수 있는 옵션이 생겼으며 후보 중 하나가 랜덤으로 BIOS-Boot node로 선정됩니다.

3) Automatic-meshing을 원하지 않는 BP 후보들은 별도로 설정할 수 있으며 BP 후보들은 자신이 직접 연결을 원하는 Peer를 선택할 수 있습니다.

이상으로 eos-bios가 어떻게 진행되고 있는지 자세히 알아보았는데요, EOS 생태계를 위해 많은 수고를 해주고 있는 EOS Canada 측에 감사의 표시를 전합니다.

다음 시리즈로는 또 하나의 메인넷 런칭 연습을 진행하고 있는 Ghostbusters에 대한 소개를 준비하고 있으니 많은 관심 가져주시면 감사하겠습니다. 다소 기술적인 내용들이 많이 들어가 있어 비개발자 분들께 어렵게 느껴질 수 있지만 저희 EOSYS가 운영하는 EEG(EOS Evangelists Group)를 통해 쉬운 컨텐츠들을 발행하고 있으니 계속해서 지켜봐 주시면 감사하겠습니다. 그럼, 다음 시리즈에서 뵙겠습니다.

감사합니다.
EOSYS 드림

Website: http://eosys.io
Medium: https://medium.com/@eosys
Steemit: https://steemit.com/@eosys
Twitter: https://twitter.com/@EOSYS_IO
Telegram (EN): https://t.me/EOSYSIO
Telegram (KR): http://t.me/EOSYSIOKR

--

--

eosys
EOSYS
Editor for

The first EOS.io block producer candidate from Korea