ICO 에서 Mintable Token 이란? ( Feat.zeppelin-solidity )

in #coinkorea7 years ago (edited)

Mintable Token 이란? ( Feat.zeppelin-solidity )

solidity-thumbnail

들어가며

안녕하세요 dongsamb 입니다.

저번 글 개발자가 마이닝, 구매 없이 이더리움을 얻는 방법들 을 통해
처음으로 많은 팔로우와 보팅을 받게되어 개인적으로 큰 원동력이 되었습니다.
많은 개발/비개발자 분들이 이더리움을 통한 개발에 관심을 가지고 계시단 사실도 알게되었고,
여러 곳에서 좋은 기회를 제안해주셨습니다.

이에 보답드리고자 Ethereum Solidity Smart Contract 분석 시리즈 연재를 시작하고자 합니다.

아직 국내에 실무 solidity 개발에 참고할만한 자료가 활성화되지 않아서
많은 분들이 접근하는데 장벽이 있을거라 생각합니다.
제가 개인적으로 이해하는데 오래걸리고 시행착오를 겪었던 내용 위주로 정리해서 올려보려 합니다.

그 첫번째 주제는 Mintable Token 이란? ( Feat.zeppelin-solidity ) 입니다! 👏🏻

Mintable Token 이 뭐지?

ICO 에 관심을 가지고 ICO들의 smart contract 를 유심히 들여다 본 사람이라면
Mintable Token 이란 Contact 명이나 관련 함수, 변수들을 보셨을 겁니다.

mint1

위 사진은 Etherscan 에서 OmiseGo Token 의 Smart contract 중
Main 이라 할 수 있는 OMGToken 의 선언부 입니다.

contract OMGToken is PausableToken, MintableToken{ 로 시작하는데요,
나중에 따로 문법 설명 관련한 연재도 자세히 하겠지만, 간략히 설명하면
OMGToken 이라는 contract 를 선언하는 구문입니다.
이때 is 라는 solidity 에서 contract 상속을 할 때 사용하는 지시자를 통해
PausableToken 과 MintableToken 라는 이미 어딘가에 선언된 Contract 를 다중상속 받는 구분입니다.
( 우리의 기특한 Solidity 는 무려 다중상속을 지원합니다 )

여기서 PausableToken 는 대략 이름에서 유추가능하듯이
Contract 내 특정 기능을 외부 입력에 따라 정지시킬 수 있는 Token 입니다.
그런 특징을 상속받아 OMG에서도 그대로 쓰겠다는 것이겠지요.

그렇다면 Mintable 은..? Mint 하면 가장 먼저 떠오르는 것은
말그대로 민트, 페퍼민트, 민트초코 할때의 그 박하향의 민트일 것입니다. 민트할수있는 토큰이라..

mint2

사전 이리저리 뒤져 다른 뜻을 찾아보면
화폐 등을 주조, 발행, 새로 만들어내는 뜻을 가지고 있는것을 발견할 수 있습니다.

뜻에서 알 수 있듯이 토큰을 추가적으로 발행, 주조해내는것이 가능한 Token 이란 뜻 입니다.

그런데 잠깐, 여기서 많은 분들은 ICO가 끝난 Token 이 추가적으로 발행 가능하다는 사실이 의아하실겁니다.
마이닝 같이 채굴과정이 있는것도 아닌데 토큰을 추가발행 할 수 있다면,
총 통화량이 증가하여 토큰의 가치가 하락하게 될테니 말입니다.

하지만 Ethereum smart contract 에 구현된 ERC20 를 따르는 Token 의 경우,
간단하게 보면 사실 총 발행량 (totalSupply) 변수와
어느 Account address 가 얼만큼 가지고 있는가 하는 balances[address] 리스트로 표현되는 자료구조에 불과합니다.

따라서 총 발행량 (totalSupply) 을 증가시키면서 그 증가시킨 Token 양 만큼을
특정 address 에 잔액 값만 증가시키면 토큰이 추가 발행 됐다고 볼 수 있는것 입니다.
생각보다 간단하지 않나요?

대부분의 ICO 등은 Hardcap 까지 Funding 을 받고, 투자자들의 Token 가치를 보존해주기 위해
함부로 Mint 하진 않을 것 입니다. 그러나 Airdrop 과 같은 이벤트을 위해서라던가
기타 추가 발행되어야만 하는 특징을 가진 Token 들도 존재할 수 있습니다.

그럼 실제로 MintableToken 이 어떻게 구현되어있는지 코드로 살펴보겠습니다.

zeppelin-solidity

MintableToken 코드를 살펴보기 앞서 갑자기 zeppelin-solidity 는 무엇인가 하실 수 있습니다.
OpenZeppelin/zeppelin-solidity 란 smart contract 에 보안 취약점이 있는지 Auditing 서비스를 제공하는
zeppelin 이란 회사에서 오픈소스로 공개한 프로젝트입니다.

mint3

여기에는 solidity 로 contract 을 작성함에 있어서 보다 안전하게 작성할 수 있는 Library 나
Template, Example 등이 포함되어있습니다. ( MintableToken 도 그중 하나입니다. )

여러 ICO 의 contract 이나 solidity 로 짜여진 여러 smart contract 의 코드를 보면
대다수는 SafeMath 가 포함된 걸 보실 수 있을겁니다. 이 또한 zeppelin-solidity 에서 제공되는 코드입니다.

이처럼 수많은 ICO, contract 에서 가져다쓰고, 조 단위의 ICO Token 들이
문제없이 거래되고 있다는 점에서 이미 검증된 안전한 코드로 볼 수 있습니다.

MintableToken Code 분석

그럼 드디어 zeppelin-solidity 에서 제공되는 기본 MintableToken 코드를 분석 해보겠습니다.

mint4

Steem 및 Gist 가 solidity code 에 대해 syntax highlighting 을 지원하지 않아 부득이하게 이미지로 대신합니다.

코드 원본은 github 에서 확인 하실 수 있습니다. 한글 주석 추가된 버전은 이곳에서 확인 가능합니다.

MintableToken Demo

마치며

zeppelin-solidity 에는 MintableToken 외에 이름에서 어느정도 기능을 유추할 수 있는
BurnableToken, CappedToken 등 외에도 다양한 좋은 예제 들을 포함하고 있습니다.

그 중 MintableToken 을 먼저 연재한 이유는 최근 저 또한 개인 혹은 팀에 소속되어 ICO 를 준비하고 있습니다.

ICO 는 Smart contract 에 의해 진행되는 만큼 투자 계약서나 마찬가지인 contract 코드는
투명하게 공개되어 Token 의 발행 구조, 조건, 기능들이 투자자들에게 명확히 설명되어야 한다고 생각합니다.

몇몇 ICO 들은 contract 코드 공개 및 설명 없이 무분별하게 ICO 를 진행하고,
심지어 그런 ICO 들이 수십, 수백억씩 funding 하고있는 실정입니다.
이에 제가 개발에 참여하는 ICO 만이라도 최대한 투명하게 진행하고자 하는 마음에
그 ICO 에 사용될 코드의 일부 원리를 먼저 연재하게 되었습니다 :)

생각을 정리해서 글로 설명하고 데모까지 진행하려니
포스팅 하나 완성하는데 꽤 큰 노력과 시간이 소비되는것 같습니다.
그만큼 많은 도움이 됐으면 좋겠습니다, 댓글 및 Follow, Voting 이 다음 연재에 큰 힘이 됩니다! 👍

앞으로의 연재에서 더 재밌는 예제 및 분석 내용으로 찾아뵙도록 하겠습니다.

Sort:  

다음 포스팅이 기대 됩니다. ^^

잘봤습니다. 연재순서를 미리 알면 더 좋을것 같아요~!

좋은 내용 감사합니다. 앞으로도 기대할게요!