KIP-7은 Klaytn의 대체 가능한 토큰 (Fungible Token)에 대한 표준입니다. 대체 가능한 토큰은 각 토큰 단위가 동일한 가치를 가지며 서로 교환할 수 있는 토큰을 말합니다. 예를 들어, 원화나 달러와 같은 화폐는 대체 가능한 토큰의 한 종류입니다.
KIP-7은 이더리움의 ERC-20에서 파생되었으며, Klaytn에 최적화되어 있습니다. KIP-7 API를 사용하면 KIP-7 컨트랙트와 토큰을 쉽게 생성하고 관리할 수 있습니다. Klaytn 호환 토큰 (KCT) 중에서도 KIP-7을 따르는 토큰들이 있습니다.
// caver-js 모듈을 불러옵니다.
const Caver = require('caver-js')
// Klaytn Node의 URL을 설정합니다. 여기서는 Baobab 테스트넷의 공개 노드를 사용합니다.
const nodeApiUrl = 'https://api.baobab.klaytn.net:8651/'
// caver 인스턴스를 생성합니다.
const caver = new Caver(nodeApiUrl)
// keyring을 생성합니다. keyring은 개인키와 공개키의 쌍으로 구성되며, 트랜잭션에 서명할 때 사용됩니다.
const senderPrivateKey = 'senderPrivateKey'
const senderAddress = 'senderAddress'
const receiverAddress = 'receiverAddress'
// in-memory wallet에 keyring을 추가합니다. in-memory wallet은 caver-js 내부에 있는 임시 지갑으로, 트랜잭션 서명을 위해 keyring을 관리합니다.
caver.wallet.add(caver.wallet.keyring.createFromPrivateKey(senderPrivateKey))
// klaytn 토큰의 컨트랙트 주소와 ABI를 설정합니다. 여기서는 임의의 값들을 사용합니다.
const tokenContractAddress = '0xb5fa02a1247c59da81f37817ee47409fe8744f65'
const tokenContractABI = [
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_spender",
"type": "address"
},
{
"name": "_value",
...
]
// 컨트랙트 객체를 생성합니다.
const tokenContract = new caver.contract(tokenContractABI, tokenContractAddress)
// transaction 객체를 생성합니다. 여기서는 SmartContractExecution 타입의 트랜잭션을 사용하며, 컨트랙트 객체의 transfer 메소드를 호출하여 klaytn 토큰을 전송합니다.
const smartContractExecutionTransaction = {
type: caver.transaction.type.SmartContractExecution,
from: senderAddress,
to: tokenContractAddress,
data: tokenContract.methods.transfer(receiverAddress, 100).encodeABI(), // 100개의 klaytn 토큰을 전송하는 데이터를 인코딩하여 설정합니다.
gas: 50000, // 가스 한도를 설정합니다.
}
// transaction 객체에 서명하고 rawTransaction을 얻습니다. 이때 in-memory wallet에 저장된 keyring이 사용됩니다.
caver.wallet.sign(senderAddress, smartContractExecutionTransaction)
.then(signed => {
console.log('Signed transaction:\n', signed)
return signed
})
.then(signed => {
// rawTransaction을 Klaytn Node에 전송하고 트랜잭션 해시를 얻습니다.
return caver.rpc.klay.sendRawTransaction(signed.rawTransaction)
})
.then(txHash => {
console.log('Transaction hash:\n', txHash)
})
.catch(err => {
console.error(err)
})
- 코드를 실행하고 콘솔에 출력되는 signed transaction과 transaction hash를 확인합니다. signed transaction은 트랜잭션의 정보와 서명을 담고 있으며, transaction hash는 트랜잭션의 고유한 식별자입니다.
- transaction hash를 이용하여 Klaytn Scope에서 트랜잭션의 상태를 조회합니다. Klaytn Scope는 Klaytn 네트워크의 블록체인 데이터를 시각화하는 서비스입니다. Baobab 테스트넷의 Klaytn Scope 주소는 https://baobab.scope.klaytn.com/ 입니다. 여기서 트랜잭션 해시를 검색하면 트랜잭션의 상세 정보와 결과를 볼 수 있습니다.
- receiverAddress에 klaytn 토큰이 정상적으로 전송되었는지 확인합니다. Klaytn Scope에서 receiverAddress를 검색하면 해당 계정의 잔액과 트랜잭션 내역을 볼 수 있습니다.
'DEVEL > NODE.JS' 카테고리의 다른 글
node.js 이더리움 ERC-20 토큰 전송 (0) | 2023.07.22 |
---|---|
node.js 이더리움 전송 (0) | 2023.07.22 |
node.js caver-js로 KLAY 잔액 확인 (0) | 2023.03.21 |
node.js caver-js로 klay 전송 (0) | 2023.03.21 |