Multisig Account 재설정 문의

안녕하세요
caver-js를 통해 MultiSig 계정으로 Update를 하였고 이를 통해 deploy가 정상적으로 이루어지는 것을 확인했습니다.

혹시 키의 분실로 인해서 기존 address의 서명이 되는 privateKey를 다시 바꿀수 있는 방법이 있을까요?

ex)

  1. 기존 주소로 인스턴스 생성 → 이부분이 맞는지 모르겠습니다.
    let account = caver.klay.accounts.createWithAccountKey(testAddress, testPrivateKey)
  2. 새로운 pirvateKeyArray와 새로운 option값을 넣어서 update key생성
    const key = caver.klay.accounts.createAccountForUpdate(account.address, newKeyArray, options)
  3. 해당 key와 account.address로 tx생성 후 기존 privateKey로 sign

const accountUpdateTx = {
type: ‘ACCOUNT_UPDATE’,
from: account.address,
key,
gas: 90000,
}

const {rawTransaction: firstTx} = await caver.klay.accounts.signTransaction(accountUpdateTx, multiSig1);
const {rawTransaction: secondTx} = await caver.klay.accounts.signTransaction(firstTx, multiSig2);
const {rawTransaction: completeTx} = await caver.klay.accounts.signTransaction(secondTx, multiSig3);

이렇게 진행하면 The send transactions “from” field must be defined! 에러가 발생합니다.

한번 update된 계정은 다른 privateKey로 update가 불가한 것인지
방법이 있다면 어떻게 해야 하는것인지 여쭤보고 싶습니다.

안녕하세요

분실된 키 말고 가지고 계신 다른 키들의 weight 의 합이 threshold 이상이 될 수 있으면 트랜잭션 서명이 유효하기 때문에 어카운트 업데이트가 가능합니다.

멀티 시그키 안에 private key1, private key2, private key3 이 있다고 하고, 모두 weight가 1이고 threshold가 2라고 예를 들어보겠습니다. private key1를 분실해도 private key2, privatekey3 만 가지고 있다면 어카운트 업데이트가 가능합니다.

const keyring = caver.wallet.keyring.createWithMultipleKey(
 sender,
 [privateKey2, privateKey3]
)
caver.wallet.add(keyring) 

//새로운 account 생성
const account = caver.klay.accounts.createWithAccountKey(senderAddress, newPrivateKey)

const updateTx = caver.transaction.accountUpdate.create({
 from: senderAddress,
 account: account,
 gas: 100000,
})
await caver.wallet.sign(senderAddress, updateTx)
const receipt = await caver.rpc.klay.sendRawTransaction(updateTx)
1 Like