Caver-js account 생성 관련 문의

caver-js 1.4.1 에서는 caver.klay.accounts.create() 함수를 사용하여 계정을 생성하였습니다.
caver-js 1.6.3 에서는 문서에 caver.klay 자체가 보이지 않습니다. 하지만 caver.klay 패키지가 없어진 것은 아닌 것 같습니다. 향후 없어지는 것인지요? 그리고 없어진다면 caver.klay.accounts.create() 함수를 대신할 것으로 무엇으로 사용하게 되는지 궁금합니다.

안녕하세요 !

먼저 v1.5.0 버전부터는 Klaytn SDK Common Architecture 가 구현되면서 caver.klay.xxx 로 사용하던 것들이, caver.rpc.klay 혹은 caver.contact, caver.wallet, caver.wallet.keyring 등으로 사용하도록 구조가 변경되었습니다.

기존에 사용하던 기능은 호환성을 위해서 그대로 나뒀으며 앞으로 기능을 삭제하지는 않을 예정이지만, 더이상의 개발은 되지 않을 예정입니다.

그래서 Common Architecture가 반영된 기능을 사용하시는 것을 권장합니다.

caver.klay.accounts에서 사용하는 Account라는 개념은 caver.wallet.keyring 에서 Keyring으로 변경되었으며, caver.klay.accounts.walletcaver.wallet에서 제공되는 KeyringContainer 로 사용하실 수 있습니다.

질문주신 caver.klay.accounts.create()는 Account를 랜덤으로 생성하는 함수로, 이와 매핑되는 함수는 caver.wallet.keyring.generate() 로 사용하시면 됩니다.

추가적으로 만들어진 주소들을 caver.rpc.klay.accountCreated 함수로 확인하면 false 값이 나타납니다.
확인한 코드는

let account = caver.wallet.keyring.generate()
console.log(account)

만들어진 주소 ‘0x5175e2a3e83f8e8a31d3e116529793db4be8a759’ 를

caver.rpc.klay.accountCreated(‘0x5175e2a3e83f8e8a31d3e116529793db4be8a759’).then(console.log)

로 확인하니 false 가 나왔습니다. caver.wallet.keyring.generate 로 계좌 생성한 것은 caver.rpc.klay.accountCreated 함수로 확인 가능한 것이 아닌가요?
궁금합니다.

caver.wallet.keyring 에서 제공하는 함수들은 SDK에서 계정 및 인메모리 지갑 기능을 편리하게 사용하기 위해서 제공되는 함수입니다.

그래서 새로운 계정을 랜덤으로 생성하여 사용하고자 할 때에는 caver.wallet.keyring.generate를 사용할 수 있는데요,
그에 반해 caver.rpc.klay.accountCreated는 Klaytn 네트워크에 klay_accountCreated RPC call을 날리는 함수입니다. 이는 Klaytn의 state에 기록되어 있는지의 여부에 따라서 true 혹은 false로 리턴하게 됩니다.

그러므로 caver.wallet.keyring.generate는 네트워크 요청 없이 랜덤으로 계정을 그냥 하나 만드는 것이지만, 이는 거래 기록이 없기 때문에 네트워크에 기록되지 않아 caver.rpc.klay.accountCreated를 해도 false로 리턴됩니다.

다시 한 번 말씀드리지만 caver.wallet.keyring.generate를 해서 계정을 만들었다고 해서 caver.rpc.klay.accountCreatedtrue를 리턴하지 않습니다. 거래 기록이 있어야 네트워크 state에 반영되며, 스테이트 트라이에 기록이 되어야만 caver.rpc.klay.accountCreated는 true를 리턴합니다.

상세한 답변 감사드립니다.

그러면 caver.rpc.klay.accountCreated 로 현재 in-memory에 있는 계정의 생성 여부가 klaytn 네트워크에서 확인이 불가능하고 거래 내역이 발생하여 네트워크에 전달된 account의 경우에는 거래 내역이 생기면서 caver.rpc.klay.accountCreated 에서 true 가 반환되는 것이군요.

답변 감사합니다.