KIP-7은 Klaytn에서 정의한 FT(Fungible Token) 컨트랙트 표준입니다. KAS는 KIP-7 API를 통해 KIP-7 토큰을 쉽고 편리하게 생성/관리할 수 있는 API를 제공합니다. KIP-7 API의 대표적인 기능은 KIP-7 컨트랙트 배포, 토큰 발급/소각/전송 등입니다.
이 예제에서는 KIP-7 API를 사용하여 KIP-7 컨트랙트를 배포하고, KIP-7 토큰을 발급 및 전송하는 방법을 설명하겠습니다. 전체 KIP-7 API에 대한 자세한 사양은 KAS KIP-7 API Reference에서 확인하실 수 있습니다.
curl--location--requestPOST"https://kip7-api.klaytnapi.com/v1/contract" \--header"x-chain-id: {chain-id}" \-u{access-key-id}:{secret-access-key} \--data-raw'{ "alias": "my-first-kip7", "name": "My First KIP-7", "symbol": "MFK", "decimals": 8, "initialSupply": "0x100000000" }'
constresult=awaitcaver.kas.kip17.deploy('My First KIP-7','MFK',8,'0x100000000','my-first-kip7')
String alias ="my-first-kip7";String name ="My First KIP-7";String symbol ="MFK";int decimals =8;String initialSupply ="0x100000000"; Kip7TransactionStatusResponse response =caver.kas.kip7.deploy(name, symbol, decimals, initialSupply, alias);
API 경로와 요청
curl 명령어를 부분으로 나누어 하나씩 살펴보겠습니다. 컨트랙트 배포 API는 POST /v1/contract로 실행할 수 있습니다. KIP-7 API가 https://kip7-api.klaytnapi.com에서 서비스되고 있으니 curl 요청의 URL을 https://kip7-api.klaytnapi.com/v1/contract로, 요청 유형은 POST (—-request POST)로 설정합니다.
컨트랙트 배포 API는 POST 요청을 받아들이며 다음과 같은 JSON 데이터를 요구합니다.
{"alias": "my-first-kip7","name": "My First KIP-7","symbol": "MFK","decimals": 8,"initialSupply": "0x100000000"}
각각의 필드에 대한 설명은 다음과 같습니다.
Alias (alias): 컨트랙트의 별명입니다. 이후 여러 API에서 컨트랙트 주소를 대신해 사용 가능합니다. 허용되는 문자는 알파벳 소문자, 숫자, 하이픈이며 별명의 첫 문자는 알파벳 소문자로 제한됩니다.
Name (name): 컨트랙트의 이름입니다. KIP-7 표준에서 요구하는 name으로 사용됩니다.
Symbol(symbol): 컨트랙트의 심볼입니다. KIP-7 표준에서 요구하는 symbol로 사용됩니다. 일반적으로 알파벳 대문자 3~4개로 구성되나 이를 제약하지는 않습니다.
Decimals(decimals): 토큰의 소수점 자리 수입니다. KIP-7 표준에서 요구하는 decimals로 사용됩니다. 일반적으로 18자리를 사용합니다.
InitialSupply(initialSupply): 컨트랙트의 초기 발행량입니다. KIP-7 표준에서 요구하는 totalSupply로 사용됩니다.
필수 헤더
모든 KIP-7 API는 x-chain-id 헤더값을 요구합니다. 허용되는 값은 1001(Baobab), 8217(Cypress) 입니다.
인증
KAS가 제공하는 모든 API는 계정 인증 정보, 즉 access-key-id와 secret-access-key를 제출해야 합니다. 인증 정보의 생성 및 획득은 다음 링크를 참조해주세요.
컨트랙트를 성공적으로 배포했다면 이제 토큰을 발행할 수 있습니다. 토큰을 발행하는 API는 POST /v1/contract/{contract-address-or-alias}/mint 입니다. 여기서 {contract-address-or-alias}는 토큰을 발행하려는 컨트랙트의 별명(alias) 또는 주소(address)로, 토큰을 배포할 때 제출한 alias나 토큰 배포 후 컨트랙트 목록 조회 API에서 확인한 address 를 사용합니다.
KAS KIP-7에서 배포한 컨트랙트는 IKIP7Mintable 인터페이스를 구현합니다. 토큰을 발행하면 총 발행량 또한 증가합니다.
토큰 발행 요청
다음은 앞서 예제에서 사용된 alias my-first-kip7을 사용하여 토큰 발행 API를 호출하는 curl 명령어입니다.
String alias ="my-first-kip7";String to ="0x72b03ca464609c82be1d490ecfce004e2d3c4cfc";String amount ="0x100";Kip7TransactionStatusResponse response =caver.kas.kip7.mint(alias, to, amount);
필수 헤더, 인증 정보 등은 컨트랙트 배포와 동일하며 location, request와 같은 정보는 토큰 발행 API (POST /v1/contract/{contract-address-or-alias}/mint)에 맞추어 입력합니다.
토큰이 잘 발행되었는지 확인하려면 컨트랙트 잔액 조회 API (GET /v1/contract/{contract-address-or-alias}/account/{owner}/balance)를 사용하여 owner 주소의 잔액을 확인합니다. 다음 curl 명령어를 사용하여 my-first-kip7 컨트랙트의 0x72b03ca464609c82be1d490ecfce004e2d3c4cfc 계정 잔액을 조회할 수 있습니다.
curl --location --request GET 'https://kip7-api.klaytnapi.com/v1/contract/my-first-kip7/account/0x72b03ca464609c82be1d490ecfce004e2d3c4cfc/balance' \
--header"x-chain-id: {chain-id}" \-u{access-key-id}:{secret-access-key}
응답의 status를 눈여겨 보셨다면 "Success"나 "Completed"가 아닌 "Submitted"인 것을 확인할 수 있습니다. Klaytn을 비롯한 모든 블록체인은 요청에 대한 응답이 즉시 돌아오지 않는 비동기 형태로 동작하기 때문에 요청이 성공했는지 바로 확인할 수 없습니다. 특히 토큰 발행과 같이 요청값에 따라 요청이 실패할 수 있는 경우(e.g., 잔액이 부족한 경우)가 존재하기 때문에 토큰 잔액 확인과 같은 명시적인 확인이 필요합니다.
KIP-7 토큰 전송
KIP-7 토큰을 전송하는 API는 POST /v1/contract/{contract-address-or-alias}/transfer입니다. {contract-address-or-alias}는 전송하려는 컨트랙트를 사용합니다.
KIP-7 API로 토큰을 전송하려면 토큰을 보내는 사람의 계정 (cryptographic) key가 KAS Wallet Account Pool에 등록되어 있어야 합니다. Key가 Default Account Pool에 등록되지 않았을 경우 해당 Pool의 KRN을 x-krn 헤더에 직접 입력해야 합니다.
다음은 0x72b03ca464609c82be1d490ecfce004e2d3c4cfc가 소유한 my-first-kip7 컨트랙트의 토큰을 0x4d3224314b704be8887551e8c9b9bbb9aa5c48b3에게 전송하는 curl 명령어입니다.