토큰(CW20) 발행 및 전송하기 (Vault)
CW20을 이용하면 게임 생태계와 XPLA 블록체인을 더 쉽게 연결할 수 있습니다. XPLA 지갑 애플리케이션인 Vault를 이용하여 토큰을 발행하고 전송까지 해봅시다. Vault 설치 및 지갑 생성은 이전 단계를 참고해주세요.
CW20이란 무엇인가요?
XPLA 블록체인은 스마트 컨트랙트 플랫폼인 Cosmwasm
을 이용합니다. 이더리움의 ERC20처럼, CW20은 Cosmwasm
에서 대체 가능한 토큰(Fungible tokens)에 대한 표준입니다. 더 자세히 알고 싶다면 공식 문서를 참고해보세요.
CW20 발행하기
다음과 같은 절차로 Vault를 통해 CW20을 발행할 수 있습니다.
Vault 웹사이트에서 Vault Chrome Extension으로 지갑을 연결하는 경우, Chrome 팝업 차단 해제를 설정해야 합니다. Vault 웹사이트를 이용하기 전에 Chrome 팝업 차단 해제를 진행해주세요.
Vault 접속
먼저 Chrome Extension 앱인 Vault에서 CW20을 발행할 지갑을 선택하고, 네트워크를 testnet
으로 설정합니다.
Vault 웹사이트에 접속하고, 우측 상단 Connect
버튼을 클릭하여 지갑을 연결합니다.
CW20 컨트랙트 생성
Vault 웹에서 Contract 항목을 클릭합니다.
Instantiate
버튼을 클릭합니다.
Admin
이란 컨트랙트의 주인이 될 지갑 주소입니다. 예제에서는 xpla1cwduqw0z8y66mnfpev2mvrzzzu98tuexepmwrk
지갑 주소를 입력하겠습니다.
CW20 컨트랙트의 Code ID
는 1
이므로, Code ID
에는 1
을 입력해줍니다.
Code ID란 무엇인가요?
EVM과 달리, Cosmwasm에서는 코드 배포(Code Deploy)와 컨트랙트 생성이 한번에 이뤄지지 않습니다. 먼저 코드를 블록체인에 배포(StoreCode)하면 해당 코드의 Code ID
를 발급 받습니다. 이후 Code ID
를 기반으로 컨트랙트를 생성(InstantiateContract)할 수 있습니다.
똑같은 Code ID로 생성된 컨트랙트들은 모두 같은 코드 기반입니다. 다만 컨트랙트를 생성할 때 입력하는 초깃값(init_msg)이 다르면, 컨트랙트의 세부 사항도 달라집니다. 더 자세한 사항은 XPLA Docs를 참고해보세요.
Init msg
에는 컨트랙트의 초깃값을 입력해주어야 합니다. 초깃값은 발행할 토큰에 대한 정보입니다. 발행자가 누구인지(minter), 어느 지갑에 토큰을 몇 개나 발행할 것인지(initial_balances), 토큰 단위는 무엇인지(symbol) 등을 살펴볼 수 있습니다.
예제에서는 아래 형식으로 입력하도록 하겠습니다. 여러분은 minter와 address 항목에 본인 지갑 주소를 입력하시면 됩니다. name, symbol, 혹은 amount 값도 바꾸고 싶다면 다른 값으로 넣어주세요.
{
"name": "My CW20 Token",
"symbol": "MCT",
"decimals": 6,
"initial_balances": [
{
"address": "xpla1cwduqw0z8y66mnfpev2mvrzzzu98tuexepmwrk",
"amount": "2000000000000000"
}
],
"mint": {
"minter": "xpla1cwduqw0z8y66mnfpev2mvrzzzu98tuexepmwrk"
}
}
토큰의 decimals
는 발행할 때 마음대로 설정해도 상관없습니다. 예제 초깃값에서는 decimals
항목을 6으로 지정했습니다. 참고로 XPLA는 decimals
는 18이므로, 1018 aXPLA = 1 XPLA 였습니다.
Amount
는 컨트랙트 Instantiate
를 진행할 때, 컨트랙트에 전송하고 싶은 XPLA 수량을 의미합니다. CW20 컨트랙트는 XPLA 코인을 보유할 이유가 없으므로, 이 부분은 생략하셔도 좋습니다.
Label
은 컨트랙트의 기능을 나타내도록 작성하는 것이 좋습니다. 예제에서는 My CW20 Token
으로 기입하겠습니다. 이후 Submit 버튼을 눌러주세요.
컨트랙트를 Instantiate
하고 싶은데, 각 항목에 어떤 값을 입력해야 할 지 모를 때가 있습니다. 그럴 때는 같은 Code ID
로 Instantiate
된 컨트랙트를 참고하면 됩니다. 예를 들어, Code ID
가 1인 다른 CW20 컨트랙트를 XPLA Explorer에서 살펴봅시다. Init Msg
값을 참고하여 여러분의 기호대로 내용을 수정하면, 쉽게 컨트랙트를 생성할 수 있습니다.
Submit 버튼을 누르면 Chrome Extension Vault 앱에서 팝업이 하나 뜨게 됩니다. 이때 Password를 입력하면, Instantatie
Method 트랜잭션에 서명하게 되는 것입니다. 지갑을 만들었을 때 설정했던 Password를 입력하고, Post 버튼을 눌러주세요.
서명이 완료되면 트랜잭션이 XPLA 블록체인에 기록될 때까지 기다려야 합니다. 트랜잭션이 생성되었다면 XPLA Explorer에서 트랜잭션 정보를 확인할 수 있습니다. Tx hash 값을 클릭해보세요.
컨트랙트 생성 확인
트랜잭션이 잘 나왔다면 EventLogs에서 여러분이 발행한 CW20 토큰의 컨트랙트 주소를 알 수 있습니다.
Init msg
값을 입력할 때, initial_balances
항목에서 CW20 토큰을 어느 지갑에 몇 개 발행할 것인지를 기입했습니다. 따라서 해당 지갑에 토큰이 잘 들어왔는지를 확인해봐야겠지요. 역시 Vault에서 쉽게 확인이 가능합니다.
Chrome Extension 앱 Vault에서 Add tokens
를 클릭해주세요.
검색창에 여러분의 CW20 토큰 컨트랙트 주소를 입력해주세요.
이처럼 Vault에서 MCT 토큰이 잘 발행되었는지 확인할 수 있습니다!
initial_balances에서 amount값이 2,000,000,000,000,000개인데 왜 2,000,000,000개 밖에 들어 있지 않나요?
initial_balances에서 amount값을 입력할 때는 decimals
항목을 고려해야 합니다. MCT 토큰의 decimals
값을 6으로 지정했기 때문에, 2,000,000,000 * 106 으로 입력하였습니다. 따라서 정상적으로 2,000,000,000개가 발행된 것이 맞습니다.
CW20 전송하기
발행한 CW20을 다른 지갑으로 전송해봅시다. Chrome Extension 앱 Vault에서 전송하고 싶은 CW20 토큰의 Send
버튼을 클릭합니다.
보내고 싶은 지갑 주소를 Recipient에, 보내고 싶은 수량만큼 Amount에 입력합니다. 예제에서는 xpla1f6hcc3hpxyg8rst9d5sg393e5jaj7453t0xmz8
지갑으로 10 MCT만큼 전송하겠습니다.
Memo 항목은 생략하고, 바로 Password를 입력 후 Submit
버튼을 눌렀습니다.
트랜잭션이 전파되었습니다. 팝업을 기다리면 트랜잭션이 잘 생성되었다는 결과를 확인할 수 있습니다. 이때 트랜잭션 해시값을 클릭하면 CW20 전송 트랜잭션을 XPLA Explorer에서 확인할 수 있습니다.
다시 지갑을 살펴보면 기존 2000000000개 있었던 MCT가 10개 만큼 줄어들었습니다. CW20 전송이 잘 진행되었군요!
이렇게 Vault 앱으로 CW20 토큰 발행과 전송하는 방법을 알아보았습니다. 다음 단계에서는 Javascript 코드로 직접 CW20 토큰을 발행하고 전송하는 방법에 대해 살펴보겠습니다.