[제안] EOS에서 CPU 비용을 낮추는 방법

in #eos6 years ago (edited)

이 글은 EOS 노드원의 로움(Loum, 김성일)이 작성한 것입니다.

1. 목적


우리는 CPU/Net 자원의 가격을 낮추기 위해 1) 자원 사용을 위한 스테이크와 2) BP 투표 및 국민투표를 위한 스테이크를 분리하는 것을 제안합니다.

2.1 스테이킹 기능에 대한 설명


EOS는 컴퓨팅 자원을 사용하기 위해 스테이킹(staking)이라는 독특한 자원분배 방법을 사용합니다. 여기서, 스테이킹이란 홀더가 스테이킹한 EOS의 개수에 비례하는 만큼의 컴퓨팅 자원을 사용할 권리를 홀더에게 분배하는 방법이고, 이를 통해 홀더는 EOS가 스테이킹되어 있는 동안 해당하는 자원을 무료로 사용할 수 있습니다. 즉, 스테이킹은 자신의 EOS를 이동시키지 못하도록 시스템 계정인 eosio.stake에 묶어놓는 것입니다.

여기서, 네트워크의 컴퓨팅 자원은 BP들이 제공하며, 이들이 제공한 총 자원의 공급량이 제한되어 있기 때문에 이를 네트워크에서 홀더들에게 안전하게 분배해야 합니다. 참고로 스테이킹 방법과 달리, 기존 방법은 이더리움과 같이 수수료를 기반으로 노드들이 제공한 컴퓨팅 자원을 분배하는 방법을 사용합니다.

2.2 CPU 자원의 높은 가격 문제


현재 EOS의 스테이킹은 두가지 목적으로 사용합니다. 이것은 1) 자원 사용 권리, 2) BP 투표 및 국민투표(Referendum) 권리를 줍니다.

구체적으로 이것을 설명하면 아래와 같습니다.
첫번째로, 홀더들은 스테이킹을 통해 EOS 네트워크의 자원의 사용 권리를 독점적으로 획득합니다. 이것은 홀더들이 컴퓨팅 자원을 이용하기 위해서 먼저 자신의 EOS 토큰을 네트워크에 스테이킹한 후에 EOS 네트워크에서 이에 해당하는 자원을 이용하는 방법입니다.
두번째로, EOS 네트워크는 홀더들에게 CPU/Net에 스테이킹한 코인의 개수에 비례하는 만큼의 BP 투표 및 국민투표에 참여하는 권리를 줍니다.

하지만 이런 방법의 단점은 홀더들이 BP 투표에 참여하기 위해 필요 없이 CPU 및 Net 자원에 많은 수의 EOS를 스테이킹하도록 유도하고, 결국 이것이 이들 자원의 가격을 올리는 역할을 할 수 있습니다.

예를 들면, 2018.10.4.일 현재 dApp 중에 초당거래수(transaction per sccond, tps)가 두번째로 많은 댑은 BETDice이고, 이것의 24시간 총 거래건수는 306,872이므로 tps는 3.55입니다. 그리고 EOSBet의 계정인 eosbetdice11에서 사용하는 자원은 각각 1) CPU가 123,500 EOS와, 2) 네트워크(Net)가 250 EOS를 스테이크했고, 3) RAM은 7.78MB를 구매했으므로, 이것은 976 EOS에 해당합니다. 따라서 EOSBet이 서비스를 하기위한 총 비용은 124,726 EOS입니다.

small_fig1.png

그림 1. EOSBet의 계정인 eosbetdice11의 스테이킹 상태.

small_fig2.png

그림 2. eosrp에서 램 자원의 환산된 EOS 개수의 계산 모습

여기서, 가장 중요한 것은 EOSBet의 전체 비용 중에서 CPU 비용이 약 99%을 차지한다는 것입니다. 만일 EOS의 가격을 6달러(7000원)으로 가정하면, 이 계정의 자원사용 비용은 총 약 750,000 달러(약 8억 2000천만원)에 이릅니다. 중요한 것은 이 비용의 거의 모두가 CPU를 사용하기 위해 스테이킹하는 비용으로 사용되었다는 것입니다. 이 때문에 우리는 dApp 플랫폼으로 EOS가 더 성공하기 위해서 dApp들의 진입비용을 낮추는 것이 무엇보다 중요하다고 생각합니다.

아래 표는 EOS에서 상위 4개의 tps를 가진 dApp들의 전체 자원 비용 중에서 CPU 비용이 차지하는 비율(%)를 보여줍니다. 아래 표와 같이, 게임인 EOS Knights를 제외하고 3개의 갬블링 dApp은 전체 비용 중 약 90% 이상을 CPU의 비용으로 사용하고 있습니다. 이와 반대로 게임인 EOS Knights는 전체 비용 중 RAM에 약 97%의 비용을 사용합니다.

표1. 상위 4개의 tps를 가진 dApp들의 전체 비용 중 CPU 비용의 비율(%)

fig3.png

3. 스테이크의 기능 분리


이 문제를 해결하기 위해, 우리는 다음과 같이 스테이크 기능을 두개로 분리할 것을 제안합니다.

  1. CPU/Net 자원 사용을 위한 자원 스테이킹.
  2. 자원 사용 외의 BP 투표 및 국민투표 등에 사용되는 투표 스테이킹.

우리는 이 방법이 CPU/Net 자원의 가격을 낮출 수 있을 것으로 추측하고 있습니다. 단, 우리는 CUP/Net의 자원배분 방법의 소스코드를 직접 확인하지는 못했습니다.

이를 구현하기 위해, 기존의 자원 스테이킹 계정인 eosio.stake 외에 BP 투표 등을 위한 투표 스테이킹 계정을 새로 만들 수 있습니다. 예로, 투표 스테이킹을 위한 eosio.stakevotes 계정을 새로 생성하고, BP 투표 및 국민투표는 이 계정에 스테이킹된 EOS를 사용하여 투표하도록 네트워크를 구성할 수 있습니다.

하지만, 이 경우 EOS 홀더들은 자신의 EOS를 이체하지 못하게 묶어두는 불이익에도 불구하고, 네트워크의 자원 사용을 위해 자원 스테이킹을 해야하는 분명한 동기가 있습니다. 하지만, 이와 달리 이들이 네트워크의 건강성을 증진하기 위한 투표 스테이킹은 하지 않을 가능성이 매우 높습니다. 왜냐하면 이에 따르는 경제적인 이익이 없고, 단지 자신의 EOS를 이체를 못하도록 묶어놓는 불이익만 존재하기 때문입니다.

결국 만일 스테이킹을 분리한다면, 투표 스테이킹에 참여하도록 경제적인 이익을 주는 것이 반드시 필요합니다.

3.1 이자와 연계


우리는 이미 연 4%의 eosio.saving 계정에 적립되는 WP 자금 중 일부(예, 2%)를 EOS 네트워크의 건강성을 위해 사용하는 제안을 했었습니다. 한글 영문 이것은 1) 스테이킹과 2) BP 투표를 한 계정에 이자를 지급하는 방법입니다. 이를 통한 효과는 1) 스테이킹되는 EOS의 비율을 증가시키고 이를 통해 EOS의 유통량이 줄어들게 되어 EOS 가격이 상승할 가능성을 높일 수 있고, 2) 더 많은 개미들(shrimps)이 스테이킹 및 BP 투표에 참여하여 네트워크의 건강성이 증가시킬 수 있습니다.

따라서 우리는 이 이자를 투표 스테이킹 및 이를 통한 BP 투표를 한 계정에 지급하는 방법을 제안합니다. 즉 자원 스테이킹을 한 계정에는 이자를 지급하지 않습니다. 왜냐하면, 자원 스테이킹은 홀더들이 네트워크를 ‘사용’을 위한 목적이지만, 투표 스테이킹은 생태계에 ‘참여’하여 네트워크의 건강성 증진하는 목적이기 때문입니다.

구체적인 예를 들면, 이자는 투표 스테이킹과 BP 투표에 대해 1:1 비율로 지급될 수 있습니다. 그리고 이자는 년 총 2%인 인플레이션을 이용하고, 전체 EOS 중에서 투표에 스테이킹된 코인이 전체 중에서 50%이고, BP 투표에 참여한 EOS가 전체 중에서 10%이라고 가정합니다.

이 경우 스테이킹은 년 2%, BP 투표는 년10%를 이자로 받습니다. 따라서 이것에 모두 해당하는 홀더들은 연간 12%의 이자를 보상으로 받지만, 투표 스테이킹만 참여한 홀더들은 연간 2%의 이자를 받게 됩니다.

참고로, 블록원의 CTO인 댄 라이머는 이미 스테이킹된 EOS에 REX 토큰을 통해서 거래 수수료를 지급하는 제안을 했습니다. 따라서 이것을 위의 예에 적용할 수 있습니다.

4. 결론


우리는 CPU의 자원 비용을 줄이기 위해 기존의 CUP/Net을 위한 스테이킹을 1) 자원 스테이킹과, 2) 투표 스테이킹으로 분리하는 방법을 제안했습니다. 또한 우리는 이를 위해 투표 스테이킹을 한 계정에 이자를 지급하여 투표 스테이킹을 늘리는 방법을 논의하였습니다. 이런 방법은 CPU 자원 비용을 낮출 수 있을 뿐아니라 홀더들의 참여를 늘려 네트워크를 더 건강하게 만드는 효과가 있다고 믿습니다.