이더리움 ERC-20 호환 토큰을 만들기 위해 여기 저기 자료를 뒤져 보았는데, 초보자가 따라하기 식으로 사용할만한 완성도 높은 자료를 찾지 못해서 결국은 몇번의 시행착오 끝에 나만의 토큰 발행 방법을 정리해 보았습니다. 실제 이더리움과 교환 가능한 나만의 토큰을 만드는 방법은 여러가지가 있습니다. 여러 방법들을 유형별로 구분해보면 아래의 세가지 정도가 될 것같습니다.
- 이더리움 플랫폼상의 토큰이나 Dapp 제작에 사용하는 프로그래밍언어인 Solidity로 직접 프로그래밍하는 방법
- 이더리움 재단에서 제공하는 표준 소스 코드를 복사하여 사용하는 방법 (https://ethereum.org/token)
- 토큰 발행 서비스를 제공하는 업체를 이용하는 방법
Solidity를 사용하는 수준이라면 이러한 자료가 별도움이 되지 않을 것이고, 이더리움 재단에서 제공하는 표준 소스 코드는 우리가 필요한 기능을 구현하기 위해서 세부적인 내용을 소스 코드 수준에서 직접 들여다봐야 하기 때문에 프로그래머가 아닌한 쉽지 않은 방법일 것 같습니다.
이 포스트에서는 마지막 방법인 토큰 발행 서비스를 제공하는 업체 중에서 신뢰도가 높고 서비스를 무료로 제공해주는 사이트를 이용해서 나만의 토큰을 발행하는 방법에 대해 적겠습니다. 아직은 이러한 토큰 발생 서비스를 체계적으로 제공해주는 업체가 많지는 않지만 점점 늘어나는 추세이고 이용법도 갈수록 편리해지고 있는 점은 분명한 것 같습니다. 우리가 페이스북이나 다음카페를 통해서도 일반적인 홈페이지 기능을 다 커버하는 것처럼 굳이 직접 프로그래밍을 하지 않아도 내가 필요한 서비스를 제공해주는 서비스를 찾아 이용하는 것만으로도 충분히 원하는 바를 이룰 수 있습니다.
토큰을 발행하는 가장 주요한 이유는 자금을 조달하기 위해서입니다. 나의 토큰을 상대방이 이더리움(현금과의 교환가치가 이미 형성되어 있기에 현금이라 할 수 있죠)을 지급하고 사도록 하는 것이죠. 많은 사람들이 ICO를 통해 자금을 조달하고 있습니다. 한국에서는 ICO가 금지되어 있다고 하지만 이를 규제하는 법이 아직 마련되지 않아 실질적으로는 ICO를 통한 자금 조달을 얼마든 진행할 수 있고 물론 하고 있는 경우도 많습니다.
"금융당국이 지난해 9월 가상화폐공개(ICO)를 전면 금지했지만 이후에도 ICO가 꾸준히 이뤄지고 있는 것으로 파악됐다. ICO는 새로운 가상화폐를 발행해 투자자에게 팔아 자금을 모집하는 것을 말한다. 금융당국은 유사수신행위 규제에 관한 법률(이하 유사수신행위법) 개정이 늦어져 실질적으로 ICO를 규제할 법적 근거가 없다며 발을 빼고 있다." http://news.hankyung.com/article/2018020153601
이를 규제하는 것이 옳은지 그른지에 대한 논의는 별도로하고, 여기에서는 프로그래밍 지식이 없는 개인이 쉽게 무료로 ICO를 하는 방법에 대해서 적어보겠습니다.
이 포스트에서는 제가 찾아본 여러 사이트 중에서 신뢰도가 높고 쉽게 커스터마이징을 할 수 있는 무료 서비스 한 곳을 이용해보도록 하겠습니다. POA 네트워크는 아주 간단한 몇번의 클릭만으로 ICO를 완료할 수 있도록 무료 서비스를 제공하고 있습니다. 블록체인 기술에 대한 전문성을 인정받아 자체 발행한 토큰이 성공리에 판매된 사이트이기도 합니다. https://poa.network/tokens (저는 이 사이트와 아무런 이해관계가 없습니다^^;)
이용법을 살펴보도록 하겠습니다.
이더리움 메인넷에서 ICO를 진행하기에 앞서 이더리움 테스트넷에서 ICO를 먼저 진행해보는 것으로 하겠습니다. 메인넷에서는 실제 통용되는 ETH가 사용되는 반면, 테스트넷에서는 통용되지 않는(사람들이 현금 가치를 인정하지 않는) ETH가 사용된다는 점을 제외하고는 같다고 보시면 됩니다.
테스트 환경을 구축하기 위해 여우지갑을 먼저 세팅하도록 하겠습니다. 여우지갑이 크롬 브라우져의 에드온으로 설치되어 있다는 상황을 전제로 진행하겠습니다. 우선 테스트에 사용할 주소를 새로 생성하고 Edit 버튼을 눌러 이름을 myICO로 해둡니다. 이더리움 메인넷에서는 ETH Buy 버튼을 누르면 실제 ETH를 구매할 수 있는 링크를 보여주지만 테스트 넷에서는 ETH를 무료로 받을 수 있는 링크를 보여줍니다. 여우지갑 작업 위치를 아래와 같이 테스트 넷으로 변경합니다.
여우지갑의 좌상단에 있는 Main Network 드롭다운 메뉴를 눌러 Ropsten Test Net을 선택합니다.
[변경전]
[변경후]
테스트 넷에서 사용할 ETH를 무료로 받기 위해 Buy 버튼을 클릭합니다.
주황색 ROPSTEN TEST FAUCET 버튼을 누르면 무료로 ETH를 받을 수 있는 웹페이지가 열립니다.
녹색의 "request 1 ether from faucet" 를 한번 누를때마다 여우지갑에 활성화되어 있는 주소로 1 ETH가 충전됩니다. 여러차례 누르면 누른 횟수만큼의 이더가 충전이되는데 클릭과 충전 사이에 랙이 존재하기 때문에 몇 번 클릭후 잠시 기다린 후 여우지갑을 확인해 봅니다.
13 ETH가 충전이 되었네요.
ICO를 진행할 테스트 환경이 완성되었습니다.
이제 실제 ICO 작업을 해 보겠습니다.
여우지갑을 열어 ICO에 사용할 이더리움 주소가 활성화되어 있는지, 네트워크가 Ropsten Test Net으로 설정되어 있는지 다시 한번 확인하신 후, 아래 사이트에 접속을 합니다.
https://wizard.oracles.org/
Step 1. NEW CROWDSALE를 누릅니다.
Step 2. CONTINUE를 누릅니다.
Step 3. 토큰 특성을 설정합니다.
- NAME : 토큰의 명칭을 정합니다. Etherscan에서 검색할 때 사용됩니다.
- TICKER : 토큰으로 심볼로 사용할 약어를 선택합니다. 최대 26자의 알파벳을 사용할 수 있습니다.
- DECIMALS : 0부터 18까지 입력 가능하며 토큰 거래시 사용될 최대 소수점 이하 자리수를 표시합니다.
- RESERVED TOKENS : ICO 마감 작업시 발행된 토큰의 일정비율 또는 일정수량을 별도로 배정할 주소를 정합니다. 여러개의 주소를 등록할 경우 "+" 버튼을 눌러 주소를 추가합니다. 이는 발행인이 일정수량 또는 일정 포션의 토큰을 자신에게 할당해둘 필요가 있을 경우에 선택합니다. 예컨데, 전체 토큰 발행량을 1억개로 하고 발행인이 5천만개를 유보하고 5천만개를 ICO에 할당할 경우, 토큰을 유보할 주소를 기재하고 DIMENSION을 tokens로 체크한 후 VALUE 값을 50000000으로 입력합니다.
우리는 테스트를 위해 아래와 같이 설정하고 CONTINUE 버튼을 누릅니다.
Step 4. ICO (Crowdsale)내용을 설정합니다.
- WALLET ADDRESS : ICO 과정에서 판매된 토큰의 대가인 이더(ETH)가 입금될 주소입니다. 기본값으로 현재 여우지갑에 활성화되어 있는 주소가 표시됩니다.
- GAS PRICE : 토큰 구매자에게 제시하는 기본 가스 요금을 선택합니다.
- INVESTOR MIN CAP : 최소 구매 토큰 수입니다. 소수로 입력하는 것도 가능하고 주소별로 집계하기 때문에 여러 차례에 걸쳐 구매할 경우 총합이 최소 구매 토큰 수를 초과하기만 하며 개별 구매량은 최소 구매 토큰 수 이하값이어도 가능합니다.
- ENABLE WHITELISTING : 사전에 등록된 주소에 한에서 구매를 허용하는 옵션입니다. 내부 판매를 하는 경우 내부자의 주소를 미리 등록하고 이 옵션을 활성화하는 방식으로 사용할 수 있습니다. 주의! 이 옵션을 yes로 해 두고 WHITELIST 주소를 등록하지 않으면 아무도 구매할 수 없게됩니다. 화이트리스트에 등록되지 않은 주소가 구매 요청을 할 경우 Transaction has failed 라는 에러를 보게됩니다. 아무나 토큰을 구매할 수 있도록 허용하기 위해서는 이 옵션을 no로 설정합니다.
테스트를 위해 아래와 같이 설정합니다.
- CROWDSALE SETUP NAME : ICO의 명칭을 정합니다. ICO를 몇 차례에 걸쳐 진행할 경우 각각의 차수별로 명칭을 부여할 수 있습니다. ICO 차수를 복수로 하시면 "+ ADD TIER"를 눌러서 설정할 수 있습니다. 단, 여러 차례에 걸쳐 ICO를 진행할 경우 각 차수의 시작시간과 종료시간이 겹치지 않도록 설정하셔야 합니다. ADD TIER는 별도의 계약서 형태로 구성되기 때문에 TIER를 여러개 생성할 경우 계약서 전송에 곱의 시간이 필요하게 됩니다. 여기서는 "Test Sale"이라는 한개의 TIER만을 사용하여 진행하도록 하겠습니다.
- ALLOW MODIFYING : ICO 진행 중 몇가지 항목에 대해 변경을 허용할 것인지를 정합니다. 현재, 변경이 허용되는 항목은 ICO 시작시간 (이미 시작한 경우 변경 불가), ICO 종료시간 (이미 종료된 경우 변경 불가), 토큰 판매 가격(RATE), 판매수량입니다.
- RATE : 토큰의 판매 가격입니다. 즉, 1 이더 지불에 몇개의 토큰을 제공할 것인지를 정합니다.
- SUPPLY : 토큰 공급량입니다. 공급량은 티어별로 설정할 수 있고 총 공급량은 모든 티어의 공급량을 더한 값이 됩니다.
테스트를 위해 아래와 같이 설정하고 CONTINUE 버튼을 누릅니다.
Step 5. ICO를 구성하는 계약서들을 이더리움 네트워크로 전송합니다.
CONTINUE 버튼을 누르면 지금까지 작성된 ICO 내용(계약서라고 표현합니다)을 이더리움 네트워크에 전송하는 작업이 시작됩니다. 통상 하나의 ICO는 여러개의 계약서로 구성되고 개별 계약서별로 네트워크에 전송되어져 주소로 부여받게 되는데 이 전송 작업에는 이더리움(ETH)가 가스로 소모됩니다. 우리는 테스트넷에서 진행중이고 무료로 확보한 이더가 있으므로 진행하도록 하겠습니다.
계약서들의 전송은 매 건별로 여우지갑을 통해 가스 결제를 해주어야 전송이 이루어집니다. 우리의 테스트 ICO는 총 13개의 계약서를 전송해야하네요. 총 13번 여우지갑의 Submit 버튼을 눌러주어야한다는 의미입니다. 별도의 진행상황을 표시해주는 화면이 없어서 답답하지만 꾹 참고 Submit 버튼 클릭을 완료해 주세요.
전송이 완료된 계약서는 이 화면에서 체크가 됩니다.
SUBMIT 버튼을 누르고 한참을 기다리면... 첫번째 계약서가 전송된 것으로 바뀌고 두번째 SUBMIT 화면이 뜹니다. 이런식으로 모든 계약서 전송을 진행합니다. (가스비를 높게 설정하면 속도가 좀 더 빨라지겠죠. 무료로 얻은 ETH이니 가스를 5정도로 설정합니다)
모든 계약서 전송이 완료되면 아래와 같은 확인창이 뜹니다. OK를 눌러 진행합니다.
Step 6. 계약서 파일 및 프로그램 소스 코드 파일 저장
중요! OK 버튼을 누른 후 화면 하단에 있는 "+ DOWNLAD FILE" 버튼을 눌러 이번 ICO에 사용된 모든 계약서의 정보파일과 프로그래밍 소스코드를 다운 받습니다. 다운받은 파일에는 여러개의 문서가 압축되어 있는데 이 문서들은 나중에 Etherscan에서 계약서파일을 인증할 때 필요하기 때문에 반드시 다운 받아 잘 보관하도록 합니다. (Etherscan에서의 계약서 인증 방법은 다른 포스트에서 적도록 하겠습니다). 다운로드를 완료한 후 CONTINUE 버튼을 클릭합니다.
Step 7. ICO 발행인 페이지 (북마크)
위의 Step 6.까지를 마치며 ICO가 완료된 것입니다. 이제 ICO의 진행상황을 확인하는 페이가 보이는데 이 페이지는 북마크를 해두고 향후 진행상황을 확인하고자 할 경우 열어봅니다. 이번 테스트에서는 총 50,000,000 개의 MFI 토큰을 공급하도록 설정하였고 토큰과 이더의 교환비율을 10으로 설정하였기 때문에 Goal ETH가 5,000,000으로 표시되어 있습니다.
INVEST 버튼을 누릅니다.
Step 8. ICO 페이지(토큰을 살 수 있는 페이지 링크)를 구매 대상자에게 전송합니다.
INVEST 버튼을 누르면 최종 화면인 ICO 페이지가 열립니다. 토큰을 구매할 사람에게 이 화면의 링크를 전해주면 구매자는 자신이 구매할 토큰 수를 입력하여 구매하는 것으로 거래가 이루어집니다. (구매가 CONTRIBUTE라고 되어 있네요)
Current Account는 구매자의 현재 여우지갑 활성 주소가 표시되고 CONTRIBUTE를 누르면 여우지갑의 거래확인 창이 뜨고 SUBMIT을 누르면 해당 주소에서 이더가 차감되고 해당 주소로 토큰이 지급됩니다.
구매한 토큰은 여우지갑에 자동으로 표시되지 않고 토큰 추가를 해서 토큰 주소를 등록한 후에 표시됩니다.
ADD TOKEN 버튼을 누르고 토큰 주소(토큰 계약서 주소, 이번 테스트의 토큰 주소를 붙여넣은 후 토큰 심볼(MFI)이 제대로 표시되는지 확인한 후 ADD 버튼을 누릅니다. 토큰 주소는 ICO 화면에 있습니다.
토큰을 등록한 잠시 후 이미 구입한 토큰의 수가 표시됩니다.
토큰을 클릭해보면 실제 Etherscan (Ropsten Test Net)에 등재된 나의 토큰과 거래이력을 확인하실 수 있습니다.
https://ropsten.etherscan.io/token/0x5220ded73a63518119da2c94c486e87065a78ba6?a=0xb07f4147586f46548b3476d77598b812dcbb73db
지금까지 ICO 설계부터 토큰 구매까지의 모든 과정을 테스트해보았습니다. 네트워크 선택을 Ropsten Test Net이 아닌 Main Ethereum Network로 하시고 위와 동일하게 진행하시면 실제 ICO를 진행하실 수 있습니다. 생각보다 어렵지 않게 ICO를 진행할 수 있으며 비용 또한 들지 않습니다. 물론 실제 계약서 전송에 필요한 가스비는 들지만 만원남짓 정도일 것입니다. ICO가 무슨 거창한 이벤트가 아니라 나만의 블로그나 네이버 카페을 만드는 것처럼 편리하게 (심지어 회원가입 절차 마저도 없이!) 이용할 수 있도록 도와주는 서비스들이 많아지고 있습니다. 제가 소개한 이 사이트 말고도 더 편리하고 쉬운 사이트들도 있거나 앞으로 생길 것이라 생각합니다. 다른 편리한 서비스를 아시는 분은 댓글로 소개해주셔도 좋을 것 같습니다.
다음 번에는 기왕에 작성한 ICO 계약서를 수정하는 법에 대해서 적어보겠습니다.
즐거운 ICO 하세요!
와 신기하네요!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
굉장히 알찬 내용이네요. 감사합니다. 꼭 다음 편도 올려주세요!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
우와~ 처음 글 써봤는데 금새 댓글을 달아주시네요. 감솨합니다^^ 얼리버드시네요
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
홍보나 리스팀이 어떻게 작동하는지는 잘 모르지만, 누군가에게 필요한 정보였다면 그 걸로 보람이 있네요^^
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
테스트로 조금 사보려는데 어떻게 하면 되는지요?
테스트 넷에서 0.1이더 보내면 되는지요?
에러 안나게 성공적으로 ICO 참여하려면 어떡하면 좋은지요
https://ropsten.etherscan.io/tx/0x8c0c725e3e576aeb9633da3ea9eaea89f614463e03f81a1a4990b48ece1910c3
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
아... 제가 테스트로 만든 My First Token ICO는 참여자가 없는 관계로^^; 조기에 마감을 하였습니다. 마감된 ICO에 참여하시는 경우 거래 실패가 되며 거래요청에 사용된 가스는 소모됩니다. 이렇게 테스트 하실 분이 계실지 몰라서 마감을 시켜버렸는데... 쩝...^^
테스트로 토큰 구매를 해보시고 싶으시면 Ropsten Test Net에서 새로 만든 OM3 ICO로 구매 테스트를 해보세요. OM3 ICO 참여 페이지는 아래 링크에 있습니다.
https://wizard.oracles.org/invest?addr=0x2986a4BcFc083a096B2C76fB20567e69778Be3A0&networkID=3
OM3 토큰의 가격은 10,000개에 1이더로 설정해두었습니다.
1000개를 구매하시면 0.1이더 + 전송비가 소모되겠네요.
위의 ICO 페이지를 방문하지 않고도 여우지갑에서 바로 구매하실 수도 있습니다.
여우지갑에서 SEND 버튼을 누르시고, 받는 주소로 ICO 계약서 주소인 0x2986a4BcFc083a096B2C76fB20567e69778Be3A0 를 입력하시고, 전송금액은 구매하실 양을 이더로 표시해 주시면 됩니다. (1 ETH = 10,000 OM3)
** 주의!
Transaction Data 항목에 반드시 토큰 구매를 명령하는 코드를 적어주셔야해요.
명령코드 : 0xa6f2ae3a 입니다. 명령코드를 적지 않고 전송하시면 그냥 이더가 전송되는 것으로 끝입니다. 토큰을 받지 못하게 되는 거죠.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
감사합니다 제일 깔끔하고 자세한 글이네요. 추가적으로 다른사이트나, 이더 오픈소스,remix로 가능한 방법을 알고계시면 알고싶습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
혹시 코인만 미리 발행하고 ico를 늦게 할수도있나요?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
이걸로 만든 ico참여하려면 참여하는 사람도 꼭 여우지갑이 있어야하는거죠?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
그렇지 않습니다.
바로 위에 @newtoken님의 댓글 처럼 contract주소와 method id(transaction data)로 전송하면 됩니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
이렇게 만들다니 신기하네요.. @홍보해
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
소스 코드를 들여다 보며 스스로 해볼려고 했는데 이런 저런 에러도 많이 나고 금전과 관련된 작업이라 사소한 실수가 큰 문제가 될 수 있어서 검증된 소스 코드를 제공해 주는 서비스를 이용하는 게 낫겠다 싶더라구요. 토큰이나 코인이 앞으로 아주 아주 쉽게 사람들이 필요에 따라... 하나의 계약서를 작성하듯 쉽게 만들어서 사용하게 될 것 같아요. 우리 생활의 일부가 되는 거죠. 글 홍보해 주셔서 고맙습니다^^
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
POA편리하게 잘 만들어 놓았네요. 수정이 거의 안되긴 하던데.. 좋은 정보 감사합니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
ico 종료는어떻게하나요??
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @newtoken! You received a personal award!
Click here to view your Board
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
꼭 발행하고 싶은 주제의 토큰이 있습니다.
도움을 주실 수 있는지요??
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @newtoken! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit