Keystore 생성 및 account update 관련하여

안녕하세요.

caver-js를 이용하여 keystore 생성이 가능한가요?

그리고 a 라는 address에 서로 다른 2개이상의 private key를 이용하여 서명을 하려고 하는데,
keyring 생성을 어떻게 해야하나요?

caver.klay.accounts.create(‘entropy’)를 이용하여 여러개의 address와 개인키를 만든 후

사용하고자하는 address에 위에서 생성한 개인키를 추가하여 keyring을 생성하는게 맞나요?

예를 들어

a, b, c라는 account를 3개 생성

a-address를 a,b,c의 privatekey를 이용하여 서명하려고 합니다.
이때 2개이상 만족한다면 서명을 진행하고 싶습니다.

참조 링크와 간단한코드도 있다면 감사하겠습니다.

그리고 a의 경우 multisig를 하지않고 a의 privatekey로도 전송이 가능한지
아니면 설정한 3개중 2개의 키가 있어야하는지도 궁금합니다.

추가적으로 passphase를 이용하여 서명이 가능한지도 궁금합니다.

안녀하세요 키스토어 생성은 encrypt 함수를 호출함으로써 생성할 수 있습니다.

이 전에 질문에서는 1.5.0 이상 버전의 코드를 사용하셔서, 최신 코드를 기준으로 설명드리겠습니다.

caver.wallet.keyring.generate는 사용할 수 있는 계정을 하나 랜덤으로 생성해 주는 것입니다.

generate를 통하여 생성된 keyring에서 사용하는 private key를 변경하고자 하는 경우 Account update 트랜잭션을 클레이튼 네트워크에 전송하여 클레이튼 네트워크에 저장된 계정의 key 정보를 업데이트 해야 합니다.

일단 Klaytn account와 Klaytn account key는 Klaytn Docs의 설명을 참고해서 읽어보시기 바랍니다.

클레이튼 계정에서 여러 개의 private key를 사용하고 싶은 경우 AccountKeyWeightedMultiSig로 계정의 키를 업데이트 해야 하는데, Getting Started에 보시면 중간 부분에 AccountKeyWeightedMutliSig로 업데이트하는 방법이 코드와 함께 설명되어 있습니다.

질문해 주신 것을 보면 A account( A private key - A public key - A address )에서 사용하는 키를 업데이트 해야 하는데, const newKeyring = caver.wallet.keyring.createWithMultipleKey(Aaddress, [APrivateKey, BPrivateKey, CPrivateKey]) 를 통해 나온 keyring에서 newKeyring.toAccount(options)를 통하여 나온 Account를 사용하면 됩니다.

자세한 내용은 Getting started에 나와 있으니 참고하시기 바랍니다.

그리고 A privateKey만 가지고도 서명이 가능하게 하려는 경우 AccountKeyWeightedMultisig의 threshold와 weight 값을 조절하면 됩니다. Klaytn Docs의 AccountKeyWeightedMultiSig에 대한 설명을 읽어보시기 바랍니다.

답변 감사합니다!

진행 해보고 추가적으로 궁금한 점 있다면 문의 드리겠습니다!

:+1:

퇴근시간이실 텐데 passphase를 이용하여 multisig가 가능한지 여쭤본 부분에 답변이 없는것같아서 한번 더 질문을 남겨요!

어디를 참조하면 좋을까요?

passphrase를 이용하여 multisig를 한다는게 어떤 의미인지 조금 더 설명해 주실 수 있으실까요?

caver.wallet.keyring.createWithMultipleKey 함수를 사용하면 여러 개의 private key를 가지는 키링을 생성할 수 있고, 이 키링에서 encrypt 를 호출하면 멀티시그 키링의 키스토어 파일을 생성할 수 있습니다.

안녕하세요!
질문 내용을 추가적으로 말씀드리겠습니다.
현재 내부적으로
키 생성 시 threshold를 설정하여 하나의 키를 여러명의 관리자를 두고 사용하고 있습니다.
이때 하나의 keystore에 대해서 JsonShare를 이용해서 설정한 비밀번호, 최소 허용 수 를 이용해서 서명을 하고 있는데 이런 기능이 있을까요?

죄송하지만 caver에서 따로 그런 기능은 제공되지 않습니다.

네 감사합니다!

직접 체크해서 만들어서 사용해야겠네요 ㅠ

1 Like

넵 감사합니다 :slight_smile: 추가적인 질문 있으시면 말씀해 주세요~

안녕하세요!

제가 keystore를 생성해서
https://baobab.wallet.klaytn.com/access 에서
keystore file로 import를 진행하면

Keystore file is invalid.
로 import가 진행 되지 않습니다.

생성한 키파일 이름은
keystore-0xf3eefbc356108dd289a1c0ffdf01917e6689956e-2021-1-6.json

내용은
{
“version”: 4,
“id”: “e40b6c2c-7d91-43e5-aa8d-d6e5380ca8c1”,
“address”: “0xf3eefbc356108dd289a1c0ffdf01917e6689956e”,
“keyring”: [
{
“ciphertext”: “d2d5f4c4b93bfdbf1975eb6593c870028af587aacb68400aa8752e556f0e5785”,
“cipherparams”: {
“iv”: “2850c4e44f7fd04c4d97c646a3298f6e”
},
“cipher”: “aes-128-ctr”,
“kdf”: “scrypt”,
“kdfparams”: {
“dklen”: 32,
“salt”: “675f9c032d4dc6257f41f7c025acf80425ce530756a155b783d6cc2ee7d22180”,
“n”: 4096,
“r”: 8,
“p”: 1
},
“mac”: “960f87c1c98a53dad9ce64d4ab199eb8b0cd1a5962e820045ad4b7b687405150”
}
]
}

입니다

왜 그런지 알수 있을까요?

안녕하세요. 현재 Klaytn Wallet에서 keystore v4를 지원하지 않습니다.

그래서 caver-js를 통하여 생성한 키스토어를 Klaytn Wallet에서 사용하기 위해서는 keystore v3를 사용해야 합니다.
keystore v3는 keyring.encryptV3 을 통해 생성할 수 있습니다.

참고로 멀티시그 계정의 경우 keystore v3는 사용될 수 없습니다.

안녕하세요!

keystore 관련 추가 문의 드립니다~

이전에 알려주신 방법으로 keystore를 생성하여 사용하고 있는데 혹시 생성시 설정한 passphrase 를 변경하는 방법이 있을까요?

docs에서 관련 문서를 못찾겠습니다…ㅠ

decrypt하여 얻은 keyring에서 새로운 passphrase로 다시 encrypt하여 새로운 keystore를 생성하는 방법밖에 없습니다.

안녕하세요, Klaytn Wallet에서 keystore v4 지원이 되도록 업데이트되었습니다.

참고 부탁드립니다.

감사합니다.