マルチシグアカウントからの署名者の削除

このガイドでは、マルチシグアカウントから署名者を削除する方法を説明します。

 

前提条件

方法 #01: デスクトップウォレットを使用する

  1. マルチシグアカウントの署名者アカウントのいずれかにログインします。
  2. 左側のメニューの 「マルチシグ」 をクリックします。
  3. ドロップダウンメニューでマルチシグアカウントを選択します。
  4. リストされている署名者の中から、削除したい署名者アドレスを見つけます。ゴミ箱アイコンをクリックすると、削除するアカウントが強調表示されます。次に 「送信」 をクリックします。ポップアップの情報を確認し、ウォレットパスワードを入力します。最後に 「確認」 をクリックします。
../../_images/remove-signer-1.gif
  1. マルチシグアカウントの 「最小承認数」 が 1 より大きい数に設定されている場合は、別の連署者アカウントにログインし トランザクションに署名します 。最小承認数が満たされるまで、この手順を繰り返します。
  1. マルチシグ」 ページに戻って、署名者が削除されたことを確認できます。
../../_images/remove-signer-screenshot.png

方法 #02: SDK を使用する

次のコードは minRemoval を 1 に設定して 2-of-3 マルチシグアカウントから署名者を削除する方法を示しています。

 // replace with network type
const networkType = NetworkType.TEST_NET;
// replace with multisig public key
const multisigAccountPublicKey =
  '3A537D5A1AF51158C42F80A199BB58351DBF3253C4A6A1B7BD1014682FB595EA';
const multisigAccount = PublicAccount.createFromPublicKey(
  multisigAccountPublicKey,
  networkType,
);
// replace with cosignatory public key
const cosignatoryToRemovePublicKey =
  '17E42BDF5B7FF5001DC96A262A1141FFBE3F09A3A45DE7C095AAEA14F45C0DA0';
const cosignatoryToRemove = PublicAccount.createFromPublicKey(
  cosignatoryToRemovePublicKey,
  networkType,
);
// replace with cosignatory private key
const cosignatoryPrivateKey =
  '1111111111111111111111111111111111111111111111111111111111111111';
const cosignatoryAccount = Account.createFromPrivateKey(
  cosignatoryPrivateKey,
  networkType,
);
const multisigAccountModificationTransaction = MultisigAccountModificationTransaction.create(
  Deadline.create(epochAdjustment),
  0,
  0,
  [],
  [cosignatoryToRemove.address],
  networkType,
);
const aggregateTransaction = AggregateTransaction.createComplete(
  Deadline.create(epochAdjustment),
  [multisigAccountModificationTransaction.toAggregate(multisigAccount)],
  networkType,
  [],
  UInt64.fromUint(2000000),
);
// replace with meta.networkGenerationHash (nodeUrl + '/node/info')
const networkGenerationHash =
  '1DFB2FAA9E7F054168B0C5FCB84F4DEB62CC2B4D317D861F3168D161F54EA78B';
const signedTransaction = cosignatoryAccount.sign(
  aggregateTransaction,
  networkGenerationHash,
);
// replace with node endpoint
const nodeUrl = 'http://api-01.us-east-1.testnet.symboldev.network:3000';
const repositoryFactory = new RepositoryFactoryHttp(nodeUrl);
const transactionHttp = repositoryFactory.createTransactionRepository();
transactionHttp.announce(signedTransaction).subscribe(
  (x) => console.log(x),
  (err) => console.error(err),
);
 // replace with network type
const networkType = symbol_sdk_1.NetworkType.TEST_NET;
// replace with multisig public key
const multisigAccountPublicKey =
  '3A537D5A1AF51158C42F80A199BB58351DBF3253C4A6A1B7BD1014682FB595EA';
const multisigAccount = symbol_sdk_1.PublicAccount.createFromPublicKey(
  multisigAccountPublicKey,
  networkType,
);
// replace with cosignatory public key
const cosignatoryToRemovePublicKey =
  '17E42BDF5B7FF5001DC96A262A1141FFBE3F09A3A45DE7C095AAEA14F45C0DA0';
const cosignatoryToRemove = symbol_sdk_1.PublicAccount.createFromPublicKey(
  cosignatoryToRemovePublicKey,
  networkType,
);
// replace with cosignatory private key
const cosignatoryPrivateKey =
  '1111111111111111111111111111111111111111111111111111111111111111';
const cosignatoryAccount = symbol_sdk_1.Account.createFromPrivateKey(
  cosignatoryPrivateKey,
  networkType,
);
const multisigAccountModificationTransaction = symbol_sdk_1.MultisigAccountModificationTransaction.create(
  symbol_sdk_1.Deadline.create(epochAdjustment),
  0,
  0,
  [],
  [cosignatoryToRemove.address],
  networkType,
);
const aggregateTransaction = symbol_sdk_1.AggregateTransaction.createComplete(
  symbol_sdk_1.Deadline.create(epochAdjustment),
  [multisigAccountModificationTransaction.toAggregate(multisigAccount)],
  networkType,
  [],
  symbol_sdk_1.UInt64.fromUint(2000000),
);
// replace with meta.networkGenerationHash (nodeUrl + '/node/info')
const networkGenerationHash =
  '1DFB2FAA9E7F054168B0C5FCB84F4DEB62CC2B4D317D861F3168D161F54EA78B';
const signedTransaction = cosignatoryAccount.sign(
  aggregateTransaction,
  networkGenerationHash,
);
// replace with node endpoint
const nodeUrl = 'http://api-01.us-east-1.testnet.symboldev.network:3000';
const repositoryFactory = new symbol_sdk_1.RepositoryFactoryHttp(nodeUrl);
const transactionHttp = repositoryFactory.createTransactionRepository();
transactionHttp.announce(signedTransaction).subscribe(
  (x) => console.log(x),
  (err) => console.error(err),
);

minRemoval プロパティ はマルチシグからアカウントを削除するために必要な署名の数を示します。この値は minApproval プロパティ を変更するのと同じ方法で増減できます。

今回 MultisigModificationTransaction はマルチシグから他のアカウントを削除するために必要なアカウントは 1 つだけなので、 AggregateCompleteTransaction によってラップされています。

注釈

トランザクションのアナウンスに複数の署名が必要な (たとえば minRemoval が 2 に設定されている場合) 、トランザクションはアグリゲート ボンデッド として定義する必要があり、また、他のすべての必要なマルチシグ参加者は、承認のために署名する必要があります。 次のガイド に従って、マルチシグアカウントに関連する、アグリゲートボンデッドトランザクションをアナウンスします。

次のガイド に従って、マルチレベルマルチシグアカウントを作成します。