createAccount와 keyring.generate()의 차이?

안녕하세요

baobab, caver-js-ext-kas 이용중인데요

  1. createAccount()와 keyring.generate()의 차이? 용도?
    createAccount()를 하면 privateKey가 제공이 안되는데 keyring.generate()를 쓰면 계정 주소와 privateKey를 모두 확인할 수 있더라고요.
    그러면 createAccount()대신 keyring.generate()를 사용해도 되는걸까요?

  2. 앱 서비스에서 유저에게 지갑을 생성해주려고 할 때
    유저가 회원가입을 마치면 계정을 만들어주고 거기에 자체 토큰을 보내주려고 합니다.
    그때 유저 client쪽에서 createAccount()와 keyring.generate() 중 뭘 써야 될까요?

안녕하세요.

  1. 먼저 createAccount는 KAS Wallet API 서비스에 계정을 생성하는 것입니다. 그러므로 private key는 KAS에서 관리됩니다. keyring.generate는 랜덤으로 키링(계정의 주소와 private key(s)를 관리하는 데이터 구조)를 생성하는 것이며 이는 KAS를 사용하지 않고 직접 키링을 관리하시는 경우 사용하실 수 있습니다.

  2. KAS 서비스의 사용 여부에 따라서 결정하시면 될 것 같습니다 :slight_smile:

1 Like

답변 감사합니다.

  1. createAccount를 하면 keyring에서 자동으로 privateKey를 보관 및 관리하게 되는거군요?

  2. keyring.generate()는 KAS를 사용하지 않는걸 어떻게 알 수 있나요?
    왜냐면 둘다 caver-js-ext-kas의 인스턴스인 caver를 사용해서 api를 호출하기 때문에 둘 다 kas를 사용한다고 생각했거든요

const CaverExtKAS = require(‘caver-js-ext-kas’)
const caver = new CaverExtKAS(‘https://api.baobab.klaytn.net:8651/’)
caver.initKASAPI(1001, accessKeyId, secretAccessKey)
const account = await caver.kas.wallet.createAccount()
const keyring = caver.wallet.keyring.generate()

  1. 아, 제가 질문을 조금 헷갈렸네요. caver.kas.wallet.createAccount를 하면 KAS Wallet API서비스에 계정이 생성되며 KAS Wallet API 서비스에서 관리하게 됩니다. 그러므로 private key에 직접 접근할 수 없으며 트랜잭션은 무조건 KAS Wallet API를 사용해서 서명해야 합니다. 하지만 caver-js-ext-kas의 caver.wallet은 기본적으로 KAS Wallet API를 사용하여 동작하고 있습니다(caver-js의 caver.wallet은 KeyringContainer 입니다.). 그러므로 caver.wallet.generate를 하면 계정을 하나 랜덤으로 생성하며 이는 KAS Wallet API에 생성됩니다. 제가 위에서 Keyring 인스턴스를 생성하는 것은 caver-js의 caver.wallet기준으로 잘못 말씀드렸습니다.

  2. 네네 caver-js-ext-kas의 caver.wallet은 위에서 말씀드렸다시피 KAS Wallet API를 사용하여 동작합니다. 만약 caver-js-ext-kas를 통해서 Keyring 인스턴스를 생성하고 이를 KeyringContainer에 저장해서 직접 관리하고 싶으신 경우 아래의 코드처럼 할 수 있습니다. 조금 더 자세한 예제는 Klaytn API Docs를 참고해 주시기 바랍니다.

    const keyringContainer = new caver.keyringContainer()
    const keyring = keyringContainer.keyring.generate()
    keyringContainer.add(keyring)

답변 감사합니다.

라고 하셨는데요.

  1. KAS Wallet API서비스에 계정이 생긴다는 말은 곧 지갑이 생긴다는 것과 같나요?
    KAS 계정은 createAccount로 만든 계정이 아닌거죠? KAS 계정은 API를 사용하기 위해 개설한 accessKeyId와 secretAccessKey를 갖고 있는 계정이고, account계정은 klaytn과 token 을 보유할 지갑 주소를 의미한다.고 봐도 될까요?

  2. 한 개의 KAS 계정에 최대 200개까지만 계정(지갑) 생성이 가능한거고요?

  3. 200개가 넘는 경우는 klaytnWallet 웹을 통해서든 만들고 keyringContainer에 keyring을 추가하는 것은 가능할까요?
    keyringContainer에 추가하면 KAS Wallet API 풀에 추가되는것과 같은거라 추가가 안될까요?

  1. 지갑과 계정은 다른 의미입니다. 계정은 주소 1개와 (publicKey - privateKey) 쌍이 매핑된 객체이며, 지갑은 여러 개의 계정을 관리할 수 있는 구조입니다. KAS계정은 KAS 서비스를 사용하기 위해서 가입하신 계정을 말하는 것이 맞으며(위에 말씀해 주신 내용대로 입니다), Klaytn Account는 실제 Klaytn 블록체인에서 사용되는 주소-키를 가지는 구조이며 해당 계정이 KLAY를 소유하고 있습니다. 지갑은 위에 말씀드렸다시피, 계정을 여러 개 저장하고 관리하는 구조입니다.

  2. 이 부분은 KAS쪽으로 다시 문의주시기 바랍니다. 제가 정확한 답변을 드리기는 어렵네요.

  3. 별도로 KAS를 사용하지 않고 직접 관리하신다면 가능은 하지만, 하나로 사용을 통일하는 것을 추천드립니다. 두 개의 사용성을 모두 제공하는 것은 경우에 따라서 필요한 것을 사용하기 위해서입니다. keyringContainer에 저장된 계정으로는 KAS Wallet API서비스를 이용할 수 없습니다. keyringContainer에 추가된 계정은 KAS와 관련이 전혀 없습니다. caver-js-ext-kas의 경우 KAS Wallet을 디폴트로 동작하지만 keyringContainer의 사용성도 제공되고 있어서 만약 keyringContainer을 사용한다면 조금 advanced한 사용성을 별도로 구현해야 합니다.

1 Like

답변 감사합니다~!

  1. 제가 지갑을 만들지 않았는데도 caver.kas.wallet.createAccount를 5번하면 5개의 계정이 생기다는건가요?
    그러면 1개의 지갑에 5개의 계정이 들어가게 되는건가요?
    지갑 주소는 어떻게 확인할 수 있나요?

  2. 특정 지갑에 createAccount를 하려면 어떻게 해야 되나요?
    이 지갑도 KAS API를 통해 만든거여야만 하나요?

  3. KlaytnWallet 웹에서 계정을 만들면 지갑 주소, private key, address 이렇게 생기잖아요?
    그건 지갑과 계정을 동시에 만들어주도록 기능을 제공하고 있어서 그런거군요?

  1. 네 KAS Wallet API 서비스가 지갑 서비스이며, caver.kas.wallet.createAccount를 5번 하면 5개의 계정이 생성되는 것이 맞습니다. caver.kas.wallet.getAccountList를 하시면 계정 목록 조회가 가능합니다. 다양한 API 종류는 문서를 확인해 주세요.

  2. KAS Wallet API 자체가 지갑 서비스입니다. 이를 사용하여 지갑서비스를 구축할 수 있습니다.

  3. Klaytn Wallet은 따로 키를 보관/관리하는 서비스는 제공되지 않습니다. 계정을 생성하거나 계정을 사용하는 기능만 제공됩니다.

1 Like

네 답변 감사합니다!

참고해서 진행해보겠습니다^^