Kip37 컨트랙트 관련 질문드립니다

안녕하세요! KIP37 관련해서 질문드립니다.

우선 KIP-37은 KIP-7을 여러개 담을 수 있는 토큰이라고 알고있습니다.(Kip37 관련 질문드립니다) 그렇다면 KIP-37의 mint나 mintBatcher가 토큰을 담는 컨트랙트 인가요?

두번째 질문입니다.


여기서 to가 발행된 토큰이 발행될 계정의 주소이고, id는 mint할 토큰의 id, value는 발행될 토큰의 수량으로 알고있습니다. 그런데 to에서 '발행된 토큰이 발행될 계정의 주소’에서 말하는 토큰이 KIP37을 말하는 것인지 아니면 KIP37이 가지고 있는 KIP7을 말하는 건지 헷갈립니다.
mint뿐만 아니라 mintBatcher또한 마찬가지입니다. 만약 KIP37을 말하는 것이라면 KIP37에 KIP7은 어떻게 담나요?

kip37.mint(‘0xA2aa’, 2, 1000) 이라면 id가 2인 토큰 1000개를 0xA2aa에게 주는 것인가요?
kip37.mintBatcher(‘0xBss23’, [1,2], [100,200]) 이라면 id가 1인 토큰 100개, id가 2인 토큰 200개를 0xBss23에게 보내는 건가요?

세번째 질문입니다. 현재 kip-37의 컨트랙트는 지원이 되지 않나요? IDE에서 KIP37Token의 contract 중에 mint나 mintBatcher를 deploy하고자 했으나 오류가 생기면서 실행되지 않았습니다. KIP37Token 자체 contract를 deploy시키는 것은 성공해서 baobab에서도 확인했습니다.

제가 확실하게 모르는걸 파악하고 질문하는 것이 아니라 질문이 이상할수도있습니다. 매번 감사합니다.

안녕하세요.

먼저 KIP-37이 여러 개의 FT를 하나의 컨트랙트에서 발행할 수 있는 토큰 컨트랙트 표준입니다. mintmintBatcher는 KIP-37 컨트랙트 안에서 FT 토큰을 발행하는 함수입니다.

그리고 KIP-37의 mint에서 to의 계정으로 발행되는 토큰은 위에서 말씀드렸다시피 FT 토큰(KIP-7로 생각하셔도 될 것 같습니다)입니다. 그러므로 kip37.mint(‘0xA2aa’, 2, 1000)는 말씀해 주신 것과 같이 0xA2aa에 id가 2인 .FT토큰을 1000개 발행하는 것이며, kip37.mintBatcher(‘0xBss23’, [1,2], [100,200])은 ‘0xBss23’ 계정에 id가 1인 FT토큰 100개, 그리고 id가 2인 토큰 200개를 발행하는 것입니다.

현재 Klaytn에서 KIP-37 토큰 컨트랙트는 지원됩니다. 위에 올려주신 문서 캡처를 보니 SDK를 사용하시는 것 같으므로 caver-js를 사용하여 KIP-37을 배포하고 실행하는 예제를 첨부하겠습니다. 참고 부탁드립니다

   const Caver = require('caver-js')
   const caver = new Caver('your en url') // Replace EN url

  const keyring = caver.wallet.add(caver.wallet.keyring.createFromPrivateKey('0x{private key}')) // Replace private key

   const kip37 = await caver.kct.kip37.deploy({ uri: 'https://caver.example/{id}.json' }, keyring.address)
   console.log(kip37.options.address)

   const tokenId = 1
   const initialSupply = 1000000
   const created = await kip37.create(tokenId, initialSupply, { from: keyring.address })
   console.log(created)

   const balance = await kip37.balanceOf(keyring.address, tokenId)
   console.log(`balance of ${keyring.address}: ${balance}`)

   const receiver = caver.wallet.keyring.generate()
   const transferred = await kip37.safeTransferFrom(keyring.address, receiver.address, tokenId, 1, { from: keyring.address })
   console.log(transferred)

   const operator = caver.wallet.add(
       caver.wallet.keyring.createFromPrivateKey('0x{private key}')
   )
   const setApproved = await kip37.setApprovalForAll(operator.address, true, { from: keyring.address })
   console.log(setApproved)

   const transferredByOperator = await kip37.safeTransferFrom(keyring.address, receiver.address, tokenId, 2, { from: operator.address })
   console.log(transferredByOperator)

   const balanceOfReceiver = await kip37.balanceOf(receiver.address, tokenId)
   console.log(balanceOfReceiver)

   const minted = await kip37.mint(operator.address, tokenId, 100, { from: keyring.address })
   console.log(minted)

   const balanceOfOperator = await kip37.balanceOf(operator.address, tokenId)
   console.log(balanceOfOperator)
1 Like

친절한 답변 감사합니다!
아 뭔가 해결되고있는것 같아서 기존에 다시썻던 질문 삭제합니다. 감사합니다!

안녕하세요! 방금 ide를 통해서 성공적으로 kip37을 이용한 kip-7을 발행하고 mint 까지 했습니다. 감사합니다!

다름이 아니라 그렇다면 KIP-37은 FT랑만 관련이 있고 NFT와는 관련이 없나요? 제가 KIP-37에 대해 정보를 수집할때 정보가 생각보다 많지않아 ERC-1155로 검색을 많이 해봤었는데 ERC-1155는 대부분 NFT와 관련이 있다는 듯한 얘기가 많더라고요. NFT를 원래는 하나씩 발행해야 하는데 ERC-1155를 이용하면 여러개를 한꺼번에 뭐 할수있어서 가스비가 절약된다? 라는 식으로요.

음, KIP-37은 NFT와 FT의 특성이 조금 섞여있다고 보시면 됩니다.

KIP-17은 NFT로 대체 불가능한 토큰, 즉 유일한 1개의 토큰이 개별적으로 존재하는 표준입니다. 토큰A와 토큰B는 서로 다른 토큰으로 대체될 수 없는 토큰입니다.
KIP-7은 FT로 대체 가능한 토큰, 즉 동일한 가치(?)의 토큰이 여러 개 발행되는 표준입니다. KIP-7로 10개의 토큰이 발행된 경우 각 10개의 토큰은 모두 동일한 가치를 지니고 서로 대체할 수 있는 토큰입니다.

KIP-37은 NFT와 FT의 특성이 조금 섞인 표준으로, 특정 token id의 토큰을 여러 개 발행할 수 있다고 생각하시면 될 것 같습니다. 예를 들어서 게임 아이템처럼 "검 v1"이라는 게임 아이템이 있을 경우 이거를 A유저와 B유저가 소유하고 있는 경우 동일한 가치를 지닌 검 아이템을 여러 개를 발행해서 사용할 수 있다고 생각하면 편할 것 같습니다.

1 Like