Kblock 공식 리서치팀, 케블리
안녕하세요 케블리 입니다. 케블리는 '전세계의 블록체인 비즈니스를 함께 찾고 공부해 나눈다’는 KBlock의 목표에서 ‘나눈다’를 본격적으로 실천합니다.
#24. Minime Token
안녕하세요 :) 유용한 기능을 가지고 있는 토큰/코인을 소개하고자 2주만에 돌아왔습니다. 오늘 제가 들고온 코인은 이른바 Cloneable Token이라 불리는 ERC-20 기반의 'Mini me' 입니다. 원래는 Stablecoin에 대해 분석을 해보려고 했는데, 국내에도 이미 많은 가치안정화 토큰들에 대한 논의가 수면 위에 올라있더군요! 그래서 급하게 방향을 바꿔 미니미 토큰에 대해 나눠보고자 합니다. 미니미 토큰은 Github에 코드만 공개되어 있는것이 거의 전부여서 사진보다는 글을 위주로 작성하게 될 것 같습니다.
복제가 쉬운 토큰 !
Anybody can create a new clone token from any token using this contract with an initial distribution identical to the original token at a specified block. The address calling the createCloneToken function will become the token controller and the token's default settings can be specified in the function call.
위 설명과 같이, 어떤 토큰을 복제해내기 위해 createCloneToken 함수를 호출하면 이 함수는 토큰 컨트롤러가 되고 새로 발행된 토큰의 초기값은 이 함수에 의해 새롭게 설정됩니다. 예컨대 특정 블록에서 발행된 한 토큰이 있을 때, 이 토큰에 할당된 초기 잔액과 동일한 또 하나의 토큰을 기존 체인 위에서 복제해버리는 셈이죠. 이렇게 클론 토큰이 한번 생성되기만 하면, 그 토큰은 그 자체로 독립적이고 고유한 기능을 할 수 있게 됩니다. 체인을 하드포크하거나 off-chain 상태에서 추가로 토큰을 발행하지 않아도, on-chain 상태에서 토큰을 새롭게 복제한다는 것이 개인적으로 매우 흥미롭더군요. 다만, 블록체인의 세계에서 공짜는 없다고나 할까요. 미니미 토큰을 발행하면 EVM 위에서 다른 토큰을 발행할 때보다 약 2배 정도의 gas price가 소요된다고 합니다.
잔액의 기록은 그대로 남아있다
특정 블록 넘버를 갖는 부모 토큰이 존재한다고 할 때, 미니미 토큰은 부모 토큰과의 잔액 배분 상태가 동일하게끔 복제가능하도록 설계되었습니다. 이런 측면에서 볼 때, 미니미 토큰은 기존 토큰에 아무런 영향을 주지 않고도 또 다른 기능을 가진 토큰을 설계하는 매력적인 기능을 가졌습니다. 이는 미니미 토큰이 Checkpoint를 설정하기 때문인데요. 블록체인 자체는 과거 데이터를 잊지 않지만, EVM 상에서 구현되는 스마트 컨트랙트는 과거 블록의 상태를 읽어내지 않습니다. 그래서 특정 시점의 토큰 잔액을 추적해야만하죠. 이 부분은 뒤에서 예시를 들며 설명드리겠습니다.
function totalSupplyAt(uint _blockNumber) constant returns(uint)
function balanceOfAt(address _holder, uint _blockNumber) constant returns (uint)
위 함수가 의미하는 바는 대략 이렇습니다. 모든 미니미 토큰에는 각 블록 간에 발생하는 모든 잔액 변동기록이 기록됩니다. totalSuppyAt, 그리고 balanceOfAt라는 함수에 의해 과거에 있었던 특정 블록의 잔액과 주소를 읽을 수 있게 됩니다. 이 부분은 제가 개발가 아닌지라 틀린 부분이 있을 수도 있으니, 정정이 필요하다면 피드백 부탁드립니다...!
Use Case
그렇다면 토큰을 복제해서 새롭게 발행하는 기능은 어디에서 활용할 수 있는 걸까요? 새롭게 발행한 토큰 안에 독립적인 인플레이션율을 새롭게 설정하는 등 여러가지 혁신적인 용례가 있는데, 일단 투표를 했을 때, 과거 데이터를 참고하는 미니미 토큰의 기능(Checkpoints) 사례를 살펴보시죠. Validity Labs라는 연구실에서 중복투표 방지를 위해 차용한 미니미 토큰의 checkpoints 개념을 위주로 설명드리겠습니다. 개인적으로 ERC-20 기반 보팅 시스템을 개발하는 프로젝트를 하고 있어서 이 부분을 눈여겨 보고 있던 중이었거든요 +_+
보팅 시스템에서 활용될 미니미 토큰을 좀 더 뜯어보겠습니다. 위에서 미리 언급했다시피, 미니미 토큰은 정렬된 checkpoint들로부터 토큰의 잔액을 추적해낼 수 있습니다. Validity Lab은 현명한 보팅 시스템을 위해 'History' 기능이 담긴 토큰을 활용하자고 합니다. 이 토큰이 바로 미니미 토큰이 되겠죠. 미니미 토큰을 활용하면 보팅 시스템에서 투표가 가능한 시점을 특정할 수 있게 됩니다. 예를 들면 투표 기간 중에 미니미 토큰이 거래된다고 하더라도, 미니미 토큰 내부적으로 설정해놓은 투표 가능시점에서만 보팅에 활용할 수 있습니다. 이 접근에서 볼 때, 보팅이 끝날 때까지 한번 보팅에 활용된 토큰은 전부 에스크로에 예치됩니다. 이건 이더리움에서 첫 보팅 시스템으로 활용했던 DAO의 방식이기도 하지요.
(
이처럼, 미니미 토큰을 활용하면 누구든지 미니미 토큰 보유자에게 새로운 기능을 부여할 수 있다는 특성이 있습니다. 무엇보다 부모 토큰이 원래 갖던 기능에는 아무런 영향을 주지 않고, 고유한 기능을 부여받을 수 있다는 점이 실용성 측면에서 가장 매력적인 점이 아닐까요 :)
참고자료
- Onther [Minime Token] https://docs.google.com/presentation/d/1BFGDuX1nM_H8u-v6INLmEWFa5wmRpXx5prYqvl4R1_E/edit#slide=id.p3
- Reddit [New ERC 20 Token Contract] https://www.reddit.com/r/ethereum/comments/5dbzih/new_erc20_token_contract_the_minime_token_open/
- Github [minime] https://github.com/Giveth/minime
- Medium[The Minime Token] https://medium.com/giveth/the-minime-token-open-sourced-by-giveth-2710c0210787
- Medium[How to vote safely wit an ERC-token]https://medium.com/validitylabs/how-to-vote-safely-with-an-erc20-token-518adadbf923