안녕하세요. 문의주셔서 감사합니다.
x, y 값이 출력되지 않는 이유와 관련된 정보 전달드립니다.
또한, caver-js를 이용하여 local machine에서 x, y 값을 구하는 방법도 추가로 전달드립니다.
x, y값이 출력되지 않는 이유
EOA 계정이 처음 생성되었을 때는 블록체인에 x, y 값이 저장되어 있지 않기에 출력되지 않습니다. account update transaction을 통해서 x, y 값을 포함한 “key” 필드의 값을 업데이트 할 수 있습니다.
EOA 계정이 처음 생성되었을 때 x, y 값이 저장되지 않는 이유
x, y 값은 public key를 좌표형태로 표현한 값이며, Klaytn key 체계에서 public key를 구하기 위해서는 private key 또는 private key로 서명한 signature가 필요합니다. 그런데, private key는 블록체인에 기록되면 안되는 값이고 EOA 계정이 생성되는 시점에는 그 계정의 signature 또한 블록체인에 존재하지 않습니다. 따라서, 처음 생성된 계정은 x, y 값이 없는 기본 키 형태을 가지며 이를 AccountKeyLegacy 라고 부릅니다.
AccountKey란 public key의 확장된 개념으로 x, y값과 key type을 포함하여 부르는 명칭입니다. 계정이 account key가 AccountKeyPublic 등 특정 type으로 변경된 경우 klay.getAccount 에서 x, y 값을 확인하실 수 있습니다.
Klaytn이 각 계정의 account key를 저장하는 이유
Klaytn은 계정 주소에 매칭된 private key를 변경할 수 있는 Account Update 기능을 제공합니다. 이 때 새로운 private key에 대응되는 public key 값을 (account key의 형태로) 블록체인에 저정함으로서 새로운 private key를 사용 가능하게 합니다.
local machine에서 x, y 값 구하는 방법
Account update를 수행하지 않는 내 계정의 x, y 값을 알고 싶은 경우에는 private key로부터 x, y 값을 구하면 됩니다. 아래는 caver-js를 이용하여 x, y 값을 구하는 내용입니다.
const Caver = require('caver-js')
const caver = new Caver()
const prvKey = [0xPrivateKey] // 사용자의 private key
const keyring = caver.wallet.keyring.createFromPrivateKey(prvKey)
const pubKey = keyring.getPublicKey() // public key의 hex string
const pubKeyXY = caver.utils.xyPointFromPublicKey(pubKey) // public key의 x, y 좌표형태