publicKey 업데이트 오류

PublicKey를 가진 계정을 다시 새로운 PublicKey로 계정 업데이트를 시도했습니다.

소스 예제를 첨부합니다.

  const { items } = await caver.kas.wallet.createKeys(1);
  const key = items[0];

  const tx = {
    from: account.address, // 변경하려는 계정 address
    accountKey: {
      keyType: 2,
      key: key.publicKey,
    },
    gas: 1000000,
    submit: true,
  };

  const result = await caver.kas.wallet.requestFDAccountUpdatePaidByGlobalFeePayer(
    tx
  );

  logger.debug('account update result', result);

transaction 자체는 성공적으로 결과를 리턴합니다만, 이후에 getAccount 함수를 호출하면
다음과 같은 오류를 내고 종료하네요.

failed to get an account; account key corrupted. can not use this account

무엇이 잘못되었나요?

이 질문은 답을 주시지 않네요. 확인 부탁드립니다.

안녕하십니까 KAS 개발팀입니다.
우선 늦게 답변드려 죄송합니다.

해당 이슈가 나온 이유를 설명 드리기 전에 KAS 월렛의 계정 업데이트 문서를 한번 참고해주시면 감사하겠습니다.

일단 공개키 타입으로 업데이트를 수행하면 해당 계정은 내부적으로 사용하지 못하는 상태가 됩니다.

이렇게 설계된 배경은 공개키로부터 개인키를 알 수는 없어야 한다.라는 원칙 아래에서 설계되었기 때문입니다.

이 원칙이 KAS 또는 외부에서 생성된 모든 키에 동일하게 적용되고 있습니다.

따라서 해당 예제의 경우에는 키를 임의로 생성하고 난 이후에는 사용을 하기 위해서는 아래와 같은 과정을 거쳐야 합니다.

  1. 트랜잭션 생성
  2. 트랜잭션에 대한 hash 생성
  3. 업데이트한 키를 이용하여 hash 를 서명 (키서명 문서)
  4. 트랜잭션과 서명을 RLP 로 구성
  5. 수수료대납 또는 기본 RLP 트랜잭션 API 사용하여 트랜잭션 제출

혹시 괜찮으시다면 어떤 목적으로 legacy 계정이 아니라 KAS 에서 관리되고 있는 또 다른 키로 업데이트 했는지 알려주신다면 앞으로 월렛서비스를 고도화하는 도움이 될거 같습니다.

감사합니다.