EOS에선 RAM을 어떻게 늘릴까?

Juno
EOS Chrome
Published in
17 min readDec 28, 2018

--

안녕하세요 EOS CHROME 팀의 Juno입니다. 이번에는 EOS에서 어떤방식으로 RAM을 늘리는지에 대해 알아보겠습니다.

Introduction

EOS 블록체인에서 필요로 하는 하드웨어 자원은 CPU, NET, 그리고 RAM으로 나뉩니다. 여기서 말하는 하드웨어 자원이란, EOS 블록체인 전체를 1개의 슈퍼 컴퓨터라고 보았을때, 이 슈퍼 컴퓨터가 정상적으로 작동하기 위해 필요한 기본적인 장비라고 볼 수 있습니다. 컴퓨터가 제대로 작동하기 위해선 마더보드, CPU 칩, RAM 메모리, SSD 메모리, 그래픽 카드, 파워소스 등이 필요한것과 같이 EOS 블록체인이 제대로 동작하기 위해서는 CPU, NET, 그리고 RAM이 필요합니다.

간단한 CPU, NET, RAM 의 특징을 설명해 드리기 위해 EOS Asia가 적은 기차 은유를 참고하여 설명해 드리겠습니다.

EOS 블록체인이 기차라면….

CPU는 사용자가 보유한 기차표입니다. 기차표를 많이 가지고 있으면 더 자주 기차를 탈 수 있습니다. EOS 블록체인 기차는 상당히 느긋해서, 빈 자리가 있으면 언제든 기차표 없이 기차를 탈 수 있습니다. 만약 출퇴근 시간처럼 기차를 타려는 사람이 많다면 기차표 없이 기차를 탈 수 없습니다.

NET(네트워크 대역폭)은 기차표에 적힌 지정석입니다. EOS를 가지고있는 사람이 자신의 EOS를 블록체인에 스테이킹하는 행위는 기차의 자리를 예약하는 것과 같습니다. 따라서, 아무리 사람이 많아도 사용자가 예약한 지정석은 언제든 사용할 수 있습니다. 만약 기차를 타는 사람이 많이 없다면, 사용자는 옆자리에 발을 올리거나 양옆으로 누워서 편하게 기차를 탈 수 있습니다. 이와 같은 이치로, EOS를 스테이킹하여 자신이 사용할 수 있는 최소한의 NET을 보장받을 수 있고, 사용자가 많지 않다면 다른 사용자들의 NET 할당분까지 사용할 수 있습니다.

EOS를 스테이킹하게 되면 기차표를 받게 됩니다. 또한, 사용자의 기차표에는 반드시 지정석이 적혀있기 마련입니다. 따라서, 사용자는 1 EOS 를 스테이킹하게 되면 0.5개의 기차표(CPU)와 0.5개의 지정석(NET)을 나눠서 할당받게 됩니다. 이렇듯 CPU와 NET을 Joint Resource, 묶음 자원이라 합니다. 현재 2019년 1월 15일 기준 eostoolkit.io를 통하여 스테이킹을 할 경우 NET과 CPU를 나누어서 스테이킹하여 사용할 수 있습니다.

RAM은 기차의 짐 칸입니다. 만약 탑승객이 많은 짐을 기차에 싣고자 한다면 그에 상응하는 돈을 추가 지불해야 합니다. 만약 미리 구매한 짐 칸을 사용하지 않는다면, 다른 탑승객에게 재 판매할 수 있습니다.

보다 자세한 CPU, NET, RAM 설명을 읽고자 하시는 분은 여기, 여기, 여기를 참고하시기 바랍니다.

배경

블록 생성자와 하드웨어 자원

EOS를 조금 공부하신 분이라면 Block Producers, 블록 생성자에 대해서 들어보셨을 겁니다. EOS에서 블록 생성자들은 다수의 EOS 보유자들을 대신하여 블록을 생성하고 합의하고 EOS 블록체인을 유지하기 위한 CPU, NET, RAM을 제공하는 주체입니다. 그렇다면 왜 블록 생성자들은 굳이 돈을 들여 EOS에 하드웨어 자원을 제공하고 EOS 보유자들을 대신하여 블록을 생성하고 생성된 블록의 진위여부를 확인할까요?

왜냐하면, 블록 생성자는 블록을 생산하는 댓가로 돈을 받기 때문입니다. 심지어 블록을 생산하지 않는 대기자 블록 생성자들도 자신이 EOS 보유자들로부터 받은 투표수에 비례하여 금전적 보상을 얻게됩니다.

EOS NEW YORK Block Producer 인프라 구조

그렇다면 누구나 블록 생성자로 등록하여 공짜 돈을 벌 수 있는게 아닐까요? 이론적으로는 맞습니다. 블록 생성자가 되기 위한 최소한의 하드웨어 조건을 갖추면 누구나 EOS의 블록 생성자 후보가 될 수 있습니다. 하지만, 이 최소한의 하드웨어 조건이 일반 유저로서는 비교적 부담스러울 수 있습니다. 또한, 최소한의 하드웨어 조건을 만족했다 하더라도 Network Failure, System Upgrade를 대비하기 위한 백업 인프라를 구축해야만 제대로 블록 생성자 역할을 수행할 수 있습니다.

EOS RAM 부족 사태

Intro에서 설명한 바와 같이 CPU, NET, RAM은 전부다 EOS 블록체인이 제대로 작동하기위해 반드시 필요한 하드웨어 자원입니다. 하지만, 2018년 7월 경 EOS 블록체인 네트워크는 RAM 가격 폭등 사태를 겪게됩니다. dAPP 개발사는 너무나 터무니 없는 가격으로 RAM을 구입해야 했으며, EOS 블록체인 기반의 새로운 토큰 발행 및 에어드랍을 진행하기 위해 약 $12,000 달러(원화: 13,000,000원)를 감당해야 했습니다. 갑자기 치솓은 RAM가격과 심한 변동성이 시장에 매우 큰 진입장벽으로 작용하게 되었습니다. ‘이더리움 대항마’로 알려진 EOS에서 사용자들은 거래 수수료를 내지 않는 대가로 엄청나게 비싼 RAM가격을 부담해야 했습니다.

본론

본격적인 RAM의 추가 공급

EOS 블록체인의 RAM 가격 상승은 RAM을 구입하려는 사람의 수가 짧은 시간안에 급등하여 정해진 RAM 공급으로는 이를 잡을 방도가 없었습니다. 이 문제를 해결하기 위해 EOS 블록체인내에 사용 가능한 RAM 공급을 늘려야 했습니다. 이론적으로 RAM공급을 늘리기 위해 하드웨어 자원을 제공하는 블록 생성자들이 추가로 RAM을 공급하면 됩니다. 하지만 전세계 각지에 뻗어 있는 수 많은 블록 생성자들이 어떤 방식으로 EOS 블록체인에 필요한 RAM을 추가 공급 할까요? 개인 컴퓨터를 업그레이드 하듯 단순히 자신들이 운영하고있는 블록 생성 노드에 새로운 RAM을 구입하여 끼워 넣으면 될까요?

저의 물음은 다음과 같습니다:

  1. 블록 생성자들은 각자 슈퍼 컴퓨터 급의 블록 생성 노드를 사용하고 있다고 광고를 하곤 하는데, 왜 RAM이 부족할까?
  2. 왜 굳이 EOS 블록체인을 시작하는 시점에 RAM 공급을 64GB로 고정해 두었을까?
  3. 블록 생성자들은 어떤 합의 절차를 거쳐서 RAM을 늘릴 수 있을까?
  4. 블록 생성자들은 어떤 방식으로 RAM을 늘릴까?
  5. 현재 RAM 공급 상황은 어떨까?

EOS RAM 공급에 대한 궁금증을 위 물음들에 대한 답을 찾아보면서 자세히 알아보도록 하겠습니다.

블록 생성자들은 각자 슈퍼 컴퓨터 급의 블록 생성 노드를 사용하고 있다고 광고를 하곤 하는데, 왜 RAM이 부족할까?

사실 이 부분이 저에게 개인적으로 가장 난해했던 부분이기도 합니다. 블록 생성자들은 너나 할 것 없이 2018년 6월 EOS 블록체인 공식 출범 이후 자신들의 하드웨어 스펙을 공개 하였습니다.

블록 생성자 하드웨어 구축 계획

좌측 이미지는 블록 생성자 하드웨어 확장 계획입니다. 하드웨어 스펙을 보게 된다면 이 블록 생성자는 무려4 TB의 RAM을 제공하는 것을 확인할 수 있습니다.

내로라 하는 상위권 블록 생성자들 역시 이와 견줄만한 블록 생성 노드를 운영하고 있으며, 어마어마한 량의 RAM을 공급하고 있는 것을 확인하실 수 있습니다. 그런데 도대체 왜 EOS 블록체인에 공급되고 있는 RAM의 양은 출범 초기에 64GB로 한정되어 있었을까요? 왜 블록 생성자들이 광고하는 어마어마한 양의 RAM을 사용하지 않고 있을까요?

결과적으로 블록 생성자들이 광고하는 4TB에 달하는 RAM은 사용된 바 없습니다. 또한, 현재 EOS 블록체인에서 사용되고 있는 RAM의 양은 여기에서 실시간으로 확인할 수 있습니다. 2018년 12월 27일 기준 EOS 블록체인 전체 RAM공급량은 90GB를 살짝 넘었습니다. 이 뜻은, 아무리 블록 생성자가 4 TB가 넘는 RAM을 보유하고 있다하더라도 실제로 이 중 90GB 조금 넘는 양의 RAM만을 EOS 블록체인에 공급하고 있다는 의미 입니다.

저희가 추측할 수 있는 바는 두 가지 경우 입니다.

(1)블록 생성자들이 돈이 너무 많아서 월 운영비용 1억에 달하는 금액을 지불 하면서까지 어마어마한 양의 RAM을 미리 구입하여 여유롭게 운영을 하고 있거나,

(2) 실제론 EOS 블록체인에서 요구하는 적정량의 RAM(100GB~150GB)을 공급하면서 앞으로 이오스가 매우 번창하면 구축해 나갈 미래 목표(4TB)를 현재 구축 완료된 것처럼 투표를 받기 위해 과대 광고를 했거나.

추측에 대한 답은 블록 생성자 후보가 되기 위한 최소한의 하드웨어 요구사항을 적어 놓은 이 글에서 확인할 수 있습니다.

“A few servers running nodeos — virtual machines or even a desktop with a lot of RAM would be ok to start off. Some Block Producers are running on desktop hardware (i7 or i9 chips). You just need to provide the RAM that is required by EOS Mainnet and it increases at 1kb/block currently. It is ~80GB at the time of writing this.” (source: https://medium.com/@bensig/how-to-become-an-eos-block-producer-ec833923276e)

  • Nodeos를 돌릴 몇 개의 서버 — 가상 머신 또는 많은 RAM을 가지고 있는 데스크탑이면 가능.
  • 심지어 몇몇의 블록 생성자 후보는 자신의 i7, i9으로 구동되는 자신의 데스크탑으로 블록 생성자 후보로 참여 중.
  • EOS 블록체인에서 요구하는 RAM : 2018년 10월 10일에 작성된 원본 글 기준 80GB 정도.

물론 Back-Up 노드를 구축하고 System Update를 위한 몇 가지 대비책을 마련해야지만 제대로된 블록 생성자 역할을 할 수 있는것은 분명합니다. 따라서, 위에서 기재한 최소한의 하드웨어 구축만으론 제대로된 블록 생성자 역할을 할 수 없을 것입니다. 하지만 어디에서도 3–4TB에 달하는 RAM을 제공해야 한다는 문구는 없습니다. 현재 필요로 하는 90GB에 30배 40배에 달하는 RAM을 공급해야 한다는 말은 어디에도 찾아볼 수 없습니다.

왜 굳이 EOS 블록체인을 시작하는 시점에 RAM 공급을 64GB로 고정해 두었을까?

그렇다면 도대체 어떤 기준으로 EOS 블록체인 초기 출범 당시 64GB로 RAM을 고정해 두었을까요? 현재까지 확인할 수 있는 가장 유력한 이유는 B1의 Dan Larimer가 적은 글 에서 확인할 수 있었습니다.

Dapp developers face two costs when building their system.

댑 개발자들은 개발 환경을 구축 할 때 두 가지 종류의 비용을 부담하게 됩니다.

1. The cost of interacting with the blockchain

1. 블록체인과 정보를 주고 받는 비용

2. The cost of hosting a full node

2. Full Node를 호스팅 하는 비용

Keeping RAM scarce (64 GB) lowers the cost of hosting a full node, but increases the cost of interacting with the blockchain.

RAM 공급을 현재 상태인 64GB로 유지하게 되면 풀노드를 호스팅하는 데에 적은 비용이 들지만, 블록체인과 정보를 주고 받는 비용이 올라가게 됩니다.

여기서 Dan Larimer가 언급한 “ Interacting with the blockchain”은 EOS 블록체인 내에서 RAM을 구입하여 사용하는 비용을 의미합니다. “Cost of hosting a full node”는 앞서 설명한 블록 생성자가 블록 생성 노드를 구축하기 위한 하드웨어 스펙을 의미하는 것으로 보입니다.

EOS 블록체인 초기 출범 당시 Dan Larimer의 가장 큰 고민은 ‘어떻게하면 전 세계의 많은 사람이 EOS 블록체인을 사용할까?’ 였을겁니다. 따라서 출범 초기 매우 많은 양의 RAM을 필요로 한다면 블록 생성자와 dAPP 개발자들이 선뜻 EOS 블록체인을 사용하려고 들지 않았겠죠. 따라서, Dan Larimer는 자신의 블록체인 개발 경험을 바탕으로 64GB면 초기 플랫폼 런칭에 무리가 없을 것으로 판단을 했을 것입니다.

64GB의 RAM이 충분한 양이라는 근거는 커뮤니티 토론에서도 확인할 수 있습니다.

It’s about the same size as Ethereum’s state trie, or Monero’s output set (which contain roughly the same sort of data that EOS stores in RAM)

“초기 EOS의 RAM을 64GB로 정한 이유는 EOS에서 RAM에 저장되는 데이터 종류와 매우 유사한 이더리움의 State Trie (Merkle Patricia Tree)와 모네로의 Output Set의 크기가 대략 64GB인 것을 감안했기 때문입니다.”

블록 생성자들은 어떤 합의 절차를 거쳐서 RAM을 늘릴 수 있을까?

이 물음에 대답은 Dan Larimer로 부터 직접 들을 수 있었습니다.

“ the producers all agree “offline” and then sign a multi-sig message setting the current max block size and total available RAM.”

“블록 프로듀서들은 ‘오프라인’에서 합의를 보고 multi-sig 메세지에 사인을하여 블록 사이즈와 전체 RAM 공급량을 결정합니다.”

B1 CTO Dan Larimer 와 Block Producers 화상 통화

2018년 6월 경 EOS 블록체인 출범 이래, 전 세계 블록 생성자 후보 및 중재자들은 주기적으로 화상 미팅을 진행하고 있습니다. 화상 미팅에서 이들은 현재 EOS에서 벌어지는 다양한 일들에 대해 논의하며 개선 방향을 모색합니다. 위 사진은 RAM 마켓 사태 이후 B1의 CTO인 Dan Larimer와 블록 생성자들이 다함께 모여 개선 방향을 논의 하고 있는 모습입니다.

위 대답에서 Dan Larimer가 말한 “offline”은 실제로 카페에 모여서 얼굴을 맞대고 토의하는 것이 아니라, EOS 블록체인 내부에서(On-Chain) 결정을 하는것이 아닌 화상 통화같은 방법으로 EOS 블록체인 외부에서(Off-Chain) 결정을 내린다는 것을 의미합니다. RAM 마켓 사태 이후 블록 생성자들은 다같이 모여서 현재 EOS에서 벌어지는 RAM 공급 문제에 대해 토의하고 결국 RAM 공급을 늘릴것으로 결정하게 됩니다. 또한, RAM공급을 한번에 늘릴 것이냐 천천히 늘릴 것이냐에 대한 토의가 진행이 되고, 결국 매 블록이 생성될 때 마다 1kb의 RAM을 늘리는 것으로 합의를 보게 됩니다.

하지만, 화상 미팅 또는 offline에서 결정된 사항이 EOS 블록체인에 적용되지 않는다면 아무런 소용이 없습니다. 따라서, 블록 생성자들은 오프라인에서 협의한 내용을 이제 EOS 블록체인 내부 multi-sig 메세지에 사인을 하여 변경 사항을 지지한다는 것을 공표하게 됩니다.

블록 생성자들은 어떤 방식으로 RAM을 늘릴까?

자 그럼 이제 오프라인에서 RAM을 생성되는 매 블록당 1KB로 늘릴 것을 이미 합의했다고 가정을 해 봅시다. 블록 생성자들은 이제 EOS 블록체인 내에서 multi-sig 메세지에 사인을 하여 자신의 의사를 정확히 전달해야 합니다. 어떤 방식으로 multi-sig 메세지에 사인을 하는지 알아보기 전에 왜 과반수의 블록 생성자들이 특정 시스템 변경 제안에 사인을 해야하는지 알아 보도록 하겠습니다.

이오스 시스템 업그레이드 제안

EOS 블록체인에는 eosio라는 어카운트가 있습니다. 이 어카운트는 실제 EOS 블록체인에서 사용되는 시스템 코드를 수정할 수 있는 권한을 가지고 있습니다. 그리고 이 eosio 어카운트에 대한 권한을 21개의 블록 생성자들이 나눠가지고 있는 구조 입니다. 따라서, EOS 블록체인 내에 시스템 업그레이드가 필요할 경우 블록 생성자들은 시스템 업그레이드 사항을 커뮤니티에 제안 합니다. 이후 15명 이상의 블록 생성자들이 multi-sig 메세지에 사인을 하여 제안에 동의하게 되면 eosio 어카운트를 수정 및 업데이트 할 수 있게 되는 것입니다.

‘1블록 당 1KB EOS RAM 공급 늘리기’ 코드 제안(좌측), 코드 적용(우측)

위에 보시는 그림과 같이 오프라인 화상 미팅이후 블록 생성자 중 하나인Argentinaeos에 의해 최초로 ‘1블록 당 1KB EOS RAM 공급 늘리기’ 제안이 생성 되었습니다. 이후 15개 이상의 블록 생성자가 이를 지지하여 제안 사항이 받아들여지고 이를 적용하는 코드가 EOS 블록체인에 업데이트 되었습니다.

블록 생성자들은 다양한 블록 생성자 커뮤니티를 통해 전달 받게 됩니다. 좌측에 보이는 메세지는 텔레그램 메신저를 통해 전달받은 협조 요청문으로 현재 EOS Jungle Testnet에서 테스트 진행 중인 REX (Resource Exchange) 어카운트 생성 관련 제안입니다.

보시는 바와 같이 Jungle Testnet에 블록 생성자로 참여하고 있는 사람들은 cleos command line에

“./cleos.sh multisig approve lioninjungle eosio.rexacc ‘{“actor”: “BP이름”, “permission”: “active”}’-p BP 이름”

을 적으면 해당 제안에 동의한다는 의사를 공표하게 됩니다.

이제 오프라인에서 합의가 끝나고, RAM 공급을 늘리는 제안에 대한 multi-sig 메세지에 사인을 하여 15명 이상의 블록 생성자가 동의를 하고, 시스템 코드가 업데이트 되어 적용 되었습니다. 따라서, 앞으로 EOS 블록체인에서 RAM은 매번 블록이 생성될 때마다 1KB씩 늘어날 것입니다. 이 뜻은 현재 블록 생성자 역할을 수행하고 있는 사람들은 지속적으로 더 많은 RAM을 구입하여 자신의 하드웨어 인프라에 추가해야 한다는 것입니다.

현재 RAM 공급 상황은 어떨까?

현재 RAM공급 상황은 https://www.eosrp.io/ 에서 매우 쉽게 확인할 수 있습니다. 지속적으로 EOS RAM은 늘어나고 있는 것을 확인하실 수 있습니다. EOS RAM 구매하기 위해서 https://eos.feexplorer.io/ 또는 https://eostoolkit.io/ 를 사용하실 수 있습니다.

결론

지금까지 EOS 블록체인에서 사용되는 매우 중요한 하드웨어 자원 중 RAM이 어떤 방식으로 EOS에 추가 공급되는지에 대해 알아 보았습니다. RAM 외에도 CPU, NET bandwidth에 대해서 기차를 예로 들어 간단히 알아보았습니다. 또한 EOS의 RAM 부족 사태가 EOS 블록체인 커뮤니티에 던진 숙제, 그리고 어떠한 방식으로 블록 생성자들이 이 문제를 해결해 나갔는지에 대해서 자세히 알아 보았습니다.

오늘 살펴본 EOS RAM 공급 Step-by-Step 프로세스를 통해 알 수 있었던 것은 EOS 블록체인은 1세대 2세대 블록체인보다 훨씬 더 빠른 속도로 변화에 적응 할 수 있다는 것입니다. Bitcoin의 경우 Segwit적용을 위해 무려 3개월에 걸쳐 채굴자들의 의견을 취합해야 했습니다. 반면, EOS는 6월 출범 이래 매우 빠른 속도로, 지속적으로 다양한 시스템 업그레이드 및 optimization을 진행하고 있습니다. 분명 매우 빠른 거래 처리속도와 블록 생성자들간의 합의는 EOS 고유의 장점입니다. 하지만, EOS는 여전히 블록 생성자가 되기 위한 허위 마케팅이나 블록 생성자간 담합, 그리고 투표에서 비롯되는 비형평성 등 해결해야 할 문제가 많이 남아 있습니다.

앞으로도 저희 EOS CHROME 팀이 공개할 다양한 EOS 분석 및 연구 내용을 기대해 주시기 바랍니다.

감사합니다.

Juno Yu

--

--