Ide로 kip-7 토큰 생성 후 kas를 이용하려면 어떻게 해야될까요?

안녕하세요

토큰 발행을 하는 초보 개발자라 질문이 많네요…;;

  1. Klaytn IDE를 이용해 baobab testnet에 KIP7 토큰을 발행했는데, balanceOf(‘지갑주소’)를 입력하면 실제 보유량이 안나오고 값이 0, unit256:0 값이 나오는데 왜 그런걸까요?

  2. API를 처음 사용해보려는데요. AccessKey는 이미 발급을 했는데, IDE로 발행한 토큰과 어떻게 연동을 시켜야할까요? KIP-7으로 토큰 발행 및 Deploy를 하면 어떻게 자동으로 연결되는건가요?? 제 지갑 주소랑 연동을 시키지 않았는데??

  3. 혹시 IDE로 발행한 토큰과 KAS를 연결하려면 caver-js로 AccessKey, secretKey 등을 넣고 연결해야되는건가요? 그때 {‘FASDFAWEF’} 이런식으로 작은 따옴표를 쓰는게 맞나요?

안녕하세요 KAS 개발팀입니다. 우선 KAS에 관심가져 주셔서 감사합니다.

  1. 컨트랙트 소스코드 및 주소, 잔액을 조회할 EOA 주소도 함께 알려주시면 더 빠르게 도움을 드릴 수 있을 것 같습니다.
  2. KAS에서는 IKIP7, IKIP7Metadata 인터페이스가 KIP-13에 의해 조회되는 경우 자동으로 라벨링이 등록됩니다.
    컨트랙트 주소를 알려주시면 한번 더 확인해보겠습니다.
    추가적으로 아래와 같이 3번(IKIP13, IKIP7, IKIP7Metadata)의 klay_call 결과가 모두 true를 반환해야 합니다,
    여기서 data 필드에는 supportsInterface 함수와 ID 파라미터를 ABI 인코딩한 값을 의미합니다.
{
  "jsonrpc": "2.0",
  "method": "klay_call",
  "params": [
    {
      "to": "{{contract-address}}",
      "data": "{{encoded data}}"
    },
    "latest"
  ],
  "id": 1
}
  1. caver-js extenstion을 통해 KAS와 연결해볼 수 있습니다. 자세한 문서는 KAS SDK를 참고해보시면 좋을 것 같습니다.

감사합니다.

  1. 컨트랙트 소스코드 (myKIP7.sol) 이고요, 제 EOS주소는 0x928eba8d7ccdfbd488e57d595dedfc8f6512e447 입니다. 현재 15.xxKlay있다고 babob wallet 웹에서는 나오네요.
    Klayn IDE에서는 balanceOf(‘0x928eba8d7ccdfbd488e57d595dedfc8f6512e447’)하면 0: uint256: 0으로 나오고요.

**2. KIP7의 컨트랙 주소는 0x354c56e05e9caf6ea6d09796e5a70d1bccb63843 입니다. **
IDE에서 발행(다시 발행하니 컨트랙 주소가 바뀌네요)한 후에 KAS Labeled Tokens에 컨트랙 주소를 입력해도 아무 정보가 안나오네요.

3. 말씀해주신 klay_call은 어떻게 실행을 해야 되는건가요? cli에서 js파일 만들고 node로 불러오면 되나요? encoded data에는 뭘 놓아야 할지요?

일단 제가 KIP7으로 만든 함수에는 klay_call이 없고 아래와 같이 있습니다.

  1. 컨트랙트 주소를 확인해본 결과 총 발행량(totalSupply)이 0으로 컨트랙트가 배포되었습니다. 사용중인 IDE에서 KIP7Token 솔리디티 파일을 통해 name, symbol, decimals, initialSupply과 함께 배포하시면 원하시는 결과를 얻을 수 있을 것 같습니다.
  2. 이전에 답변드렸던 3가지 ID에 대하여 IKIP7Metadata 인터페이스가 구현되지 않았습니다. 이 부분은 1번과 함께 해결될 수 있을것 같습니다.
  3. 현재 IDE를 사용하고 계시니 supportsInterface 함수에 3가지 변수(0x01ffc9a7, 0x65787371, 0xa219a025)를 입력하여 실행했을때 모두 TRUE(0x0...1)이면 KAS Labeling에서 확인할 수 있습니다.
    (KIP-13, KIP-7 문서도 함께 참고하시면 좋을 것 같습니다.)

추가적으로 KIP-17 API와 같이 KIP-7 API도 제공될 예정이니 더 편하게 이용하실 수 있도록 도움드리겠습니다.
감사합니다.

1 Like

답변 감사합니다.

IDE로 구현하려고 보니 import하는게 많아 폴더 관리도 안되고해서 로컬에서 다시 진행하려고 하는데요.

이걸 참고하는데요.

1. git clone한 다음 deploy로 배포를 하고, 다시 배포하지 않고 이전 주소를 활용해 구현한 함수만 이용하려면 어떻게 해야될까요? truffle 로만 가능한가요?

2. KIP7 스마트 컨트랙을 배포한 다음, KIP7Token 스마트 컨트랙도 배포하여 초기 발행을 해야 된다는 말이죠?

3. 그렇다면 추가 발행은 어떻게 해야 될까요?

안녕하세요, 질문들에 대해 답변드리겠습니다.

  1. 다시 배포하지 않으시려면 굳이 klaytn-contract repo를 활용하실 필요는 없습니다. caver-js의 kip7 패키지 혹은 caver-java의 kip7 을 사용하시면 KIP-7 함수들을 좀 더 쉽게 이용하실 수 있습니다.

  2. KIP7Token 컨트랙트에 KIP7 내용이 포함되어 있기 때문에 KIP7Token 컨트랙트만 배포하셔도 됩니다.

  3. 추가 발행이 어떤 걸 말씀하시는지 애매한데, mint를 말씀하시는 거라면 kip7.mint()함수를 이용하시면 편리합니다.

감사합니다.

1 Like

스마트 컨트랙으로 자체 토큰을 발행하고 난 이후에 스마트 컨트랙을 수정해야 되는 상황에서 재배포하는 경우
이미 배포된 토큰이랑 다른 토큰이 생기는거죠?

기존에 배포된 토큰을 그대로 사용하면서 스마트 컨트랙 코드만 수정하려면 어떻게 해야될까요?
(transfer나 기타 안에 있는 함수들을 수정하고 싶을때요)

스마트 컨트랙으로 자체 토큰을 발행하고 난 이후에 스마트 컨트랙을 수정해야 되는 상황에서 재배포하는 경우
이미 배포된 토큰이랑 다른 토큰이 생기는거죠?

네, 기존 컨트랙트와는 관계없는 새로운 스마트 컨트랙트가 배포됩니다.

기존에 배포된 토큰을 그대로 사용하면서 스마트 컨트랙 코드만 수정하려면 어떻게 해야될까요?
(transfer나 기타 안에 있는 함수들을 수정하고 싶을때요)

이것은 현재 불가능합니다. 코드 수정이 가능하다면 보안 이슈도 있고, 스마트 컨트랙트 개발자가 남용할 부분이 있기 때문에, 현재는 배포한 스마트 컨트랙트는 수정이 불가능합니다.

감사합니다.

1 Like

그렇다면 토큰도 migration 기능이 있나요? 스마트 컨트랙으로 발행한 토큰을 재발행한 토큰으로 전환시키는 작업은 가능한가요?

아래 스크린샷이 그런 과정을 이야기하는거같아서요… 이걸 토큰 스왑이라 할 수 있을까요?

"migration"이라는 기능이 토큰 컨트랙트에는 존재하지 않습니다. 보통 이런 migration을 할 때, 특정 block number를 기준으로 모든 계정의 잔고 내역을 그대로 새로운 컨트랙트에 옮기는 방식으로 진행을 하는 것으로 알고 있습니다.

이걸 발행한 서비스측에서 모두 할 수도 있을꺼고, 개인들의 요청을 하나씩 진행할 수도 있을 것 같구요. 그건 구현에 따라 달라질 것 같습니다.

2 Likes

안녕하세요 글을 보다가 궁금한점이 있어 댓글을 남겨봅니다.
현재 배포가 끝난상태이고. 나중에 배포된 토큰에 대한 기능적으로 수정을 하게될때에는 배포된 부분을 건드리지 아니하고 접근하는방법은 없다는 말씀인 거지요?..

로컬에서테스트 해보려고하니 너무 어렵네요… 조언좀 해주실수있을까요??

정리를하자면… caver-js를 이용중이고 처음에 deploy로 배포한토큰이 있는 상태고 두번째 업데이트트할때 배포된 토큰에 관련된정보가 있으면?? 배포를 안하는 함수를 만들면될 것같은데… 어렵네요
관련된정보가 있다고하면 혹. .ABI나 컨트렉트 주소?? 이런것을 이용하면될까요??

안녕하세요, 질문을 정확히 이해하지 못한 것 같습니다.

배포한 토큰에 수정사항이 생겨서 새로 배포하시려고 하는건가요?

그렇다면 기존 토큰 데이터들을 옮겨오거나 혹은 기존 토큰 데이터를 그대로 사용하는 방법을 취하셔야 할 것 같습니다.

전자는 위에서 설명드린 것처럼 특정 블록 기준으로 전체 balance에 대한 정보를 가지고 새로 토큰을 민팅하는 방법이 될 것 같습니다.
후자의 경우는 Upgradable contract형태로 구현하시면 될 것 같은데요, 이 부분에 대해서는 기존 배포된 상태에서는 쉽지 않을 것 같고 Upgradable 하도록 컨트랙트를 구현하셔야 합니다. Upgradable Contract에 대한 설명은 OpenZeppelin에 잘 설명되어있으니 참고하시면 될 것 같습니다.

감사합니다.

1 Like

용어 설명 및 참고 예제 알려주셔서 감사합니다.^^ :smiling_face_with_three_hearts: