EOS의 BP 자원 사용 및 이를 위한 코인 예치(stake) 기능
EOS의 코인 예치 기능에 대해 살펴보겠습니다.
아래 그림과 같이 일반 사용자 또는 분산앱(DApp) 개발자가 BP(블록 생산자, Block Producer)의 자원을 사용하기 위해서는 코인을 해당하는 BP 자원에 예치를 해야 사용할 수 있습니다.
즉, EOS의 거래 수수료는 무료이지만, BP 자원을 사용하기 위해서는 반드시 코인을 예치한 후에 BP 자원을 사용하게 됩니다.
따라서 일반 사용자 및 분산앱 개발자가 지불하는 비용은 BP 자원을 사용하기 위해서 코인을 예치하는 기간 및 예치한 코인을 돌려받는 unstake 기간 동안 코인의 이체가 불가능하고, 그리고 이 기간 동안의 인플레이션에 의해서 손해가 발생하는 구조입니다.
물론 이 두 기간 동안 가격의 변동에 의한 비용도 포함됩니다. 따라서, 사용자는 BP 자원을 사용하기 위해서 반드시 비용을 지불해야 합니다.
참고로 인플레이션은 초기 10억개의 EOS 코인의 발행된 후 연 5%이내의 추가 발행량을 말한다. 따라서 원리적으로 EOS 코인의 총발행량은 무한대가 될 수 있습니다.
코인 예치는 1) BP 자원의 사용 비용, 2) BP 투표에 사용됩니다. 또한 유튜브와 같이 동영상 자료 등을 올릴 경우 IPFS로 이를 저장하고 이를 BP가 저장하기 위한 코인을 예치하는 것으로 보았지만, 공식적인 문서상으로 확인은 못했습니다.
아래는 EOS 텔레그램 톡방에 Thomas Cox가 올린 BP 자원을 사용하기 위한 토큰 예치(stake) 방법을 보여줍니다.
아래 그림은 이 그림을 쉽게 알아보기 위해, 제가 위 그림을 다시 그린 것입니다.
위 그림에서 EOS 코인은 먼저 왼쪽 제일 위의 다른 지갑으로 이체가 가능한 Unused 상태에 있다가 BP 자원의 사용이나 BP투표(또한, Proposal 제안)를 하기 위해서는 코인을 먼저 예치(stake)를 합니다.
EOS 메인넷 출시 후 토큰이 코인으로 변환되고, 이 코인이 실제 예치될 것이므로, 토큰이 아니라 코인이라고 부르는 것이 좋다. 하지만 이곳에서는 토큰과 코인을 같은 용어로 생각하기로 합니다.
아래는 스팀잇에서 글에 보팅 및 증인 투표를 하기 위해서 스팀 코인의 예치하는 방법을 보여줍니다.
EOS의 BP 투표도 스팀잇의 증인 투표와 같은 방법을 사용할 것으로 보입니다. 물론 BP 투표를 위해서 BP에 대한 더욱 자세한 정보를 제공할 것입니다.
아래 그림의 스팀 코인은 바로 다른 계정으로 이체가 가능한 상태이고, 이 상태에서 스팀코인을 스팀 파워로 옮기면, 이 스팀 파워로 보팅 및 투표를 하게 되는 것입니다.
이와 마찬가지로 EOS 코인을 예치(stake) 상태로 전환하면, 바로 위 그림과 같이, 이 전환된 코인은 아래의 4개를 위해서 사용될 수 있다. 코인의 예치 상태가 되면, 이른 이체하기 위해서는 반드시 예치 상태를 풀어주어야 합니다.
이 예치된 코인의 일부 또는 전부를 CPU와 네트워크에 예치할 수 있다. 사용자가 거래를 하기 위해서는
일정량의 코인을 CPU와 네트워크에 예치해댜 BP 자원을 사용할 수 있습니다.
CPU와 네트워크에 코인을 예치한 후 예치한 코인 개수에 비례하는 비율에 해당하는 CPU와 네트워크의 BP 자원을 사용자가 이용할 수 있게 되는 것입니다.
CPU와 네트워크에 예치된 코인은 unstake, 즉 예치를 풀면 3일이 지난 후에 한꺼번에 Unused, 즉 이체가 가능한 상태가 됩니다. 만일 unstake 한 후 3일이 지나기 전에 다시 이 코인을 예치 상태로 변환할 수 있습니다.
투표(voting)는 BP 투표와 Proposal 투표를 할 수 있습니다. 제안(proposal)은 헌법 등의 제안을 말하는 것이며, 제안을 해서 채택이 되면 코인으로 보상을 받습니다.
투표에 코인을 예치한 경우 이를 돌려받을 때 6개월이 걸리며, 일주일마다 1/n씩 선형적으로 코인을 돌려줍니다.
이와 같이 돌려주는 기간이 긴 것은 BP가 투표자에게 보상을 주고 투표를 모으는 것을 방지하기 위한 목적입니다.
(참고: 2018.3.13일 댄이 텔레그램에서 BP투표의 돌려주는 기간은 3일로 바꾼다고 말했습니다.)
BP 자원 중에서 가장 중요하고 늘리기가 힘든 것이 RAM의 크기이다. AWS에서는 최대 약 4GB의 램 자원을 지원해주고 있습니다.
이때문에 이 램 자원을 사용하지 않는데, 코인을 램에 예치해두는 것은 다른 개발자가 램 자원을 사용하는데 나쁜 영향을 주기 때문에 램 자원을 돌려받을 때는 즉시 돌려받게 됩니다.
아래 그림은 RAM 자원의 무단 점유를 막기 위한 방법을 보여줍니다.
원리는 뱅코(Bancor) 알고리즘을 사용하여, 동일한 코인을 예치하더라도 램 자원이 많이 남았을 때는 많은 램 자원이할당되지만, 동일한 코인이라도 램 자원이 거의 남아있지 않으면 램자원을 아주 적게 할당하는 방법을 사용합니다.
또한 램 자원을 다른 사용자에게 이전할 수 없어서, 램자원을 사용하지 않는 사용자가 램 자원에 코인을 계속 예치하지 못하도록 유도합니다.
이와 같이 뱅코 알고리즘으로 램 자원의 사용량이 많아지는 것을 막을 수 있습니다. 하지만, 램 자원을 다른 사용자에게 빌려주지 못하는 기능만으로 사용자가 사용하지 않는 램자원을 풀어주는 것에 대한 유인은 부족해보입니다. 물론 바로 램자원에 예치했던 코인을 돌려받아서 바로 사용할 수는 있는 이점은 있습니다.
어렵네요 ㅠㅠ