Eliminación de un firmante de una cuenta multisig

Esta guía le mostrará cómo eliminar un cosignatario de una cuenta multisig.

requisitos previos

Método #01: Uso de la billetera de escritorio

  1. Inicie sesión en una de las cuentas cofirmantes de la cuenta multisig.

  2. Haga clic en “Multisig” en el menú del lado izquierdo.

  3. Seleccione la cuenta multigrado en el menú desplegable.

  4. Busque la dirección del cosignatario que desea eliminar en la lista de cosignatarios. Haga clic en el ícono de la papelera; esto debería resaltar la cuenta que desea eliminar. Luego haga clic en “Enviar”. Revise la información en la ventana emergente e ingrese la contraseña de su billetera. Finalmente, haga clic en “Confirmar”.

resources/images/screenshots/remove-signer-1.gif
  1. Si la cuenta multigrado tiene la “aprobación mínima” establecida en un número superior a 1, inicie sesión en otra cuenta cosignataria y cofirme la transacción. Repita este paso hasta que se cumpla el número mínimo de aprobación.

resources/images/screenshots/add-signer-2.gif

6.Puede comprobar que el firmante se ha eliminado volviendo a la página “multisig”.

resources/images/screenshots/remove-signer-screenshot.png

Método #02: Usando el SDK

El siguiente código muestra cómo eliminar un cosignatario de una cuenta multigrado 2 de 3 con minRemoval establecido en 1.

// 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 = 'NODE_URL';
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 = bitxor_sdk_1.NetworkType.TEST_NET;
// replace with multisig public key
const multisigAccountPublicKey =
  '3A537D5A1AF51158C42F80A199BB58351DBF3253C4A6A1B7BD1014682FB595EA';
const multisigAccount = bitxor_sdk_1.PublicAccount.createFromPublicKey(
  multisigAccountPublicKey,
  networkType,
);
// replace with cosignatory public key
const cosignatoryToRemovePublicKey =
  '17E42BDF5B7FF5001DC96A262A1141FFBE3F09A3A45DE7C095AAEA14F45C0DA0';
const cosignatoryToRemove = bitxor_sdk_1.PublicAccount.createFromPublicKey(
  cosignatoryToRemovePublicKey,
  networkType,
);
// replace with cosignatory private key
const cosignatoryPrivateKey =
  '1111111111111111111111111111111111111111111111111111111111111111';
const cosignatoryAccount = bitxor_sdk_1.Account.createFromPrivateKey(
  cosignatoryPrivateKey,
  networkType,
);
const multisigAccountModificationTransaction = bitxor_sdk_1.MultisigAccountModificationTransaction.create(
  bitxor_sdk_1.Deadline.create(epochAdjustment),
  0,
  0,
  [],
  [cosignatoryToRemove.address],
  networkType,
);
const aggregateTransaction = bitxor_sdk_1.AggregateTransaction.createComplete(
  bitxor_sdk_1.Deadline.create(epochAdjustment),
  [multisigAccountModificationTransaction.toAggregate(multisigAccount)],
  networkType,
  [],
  bitxor_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 = 'NODE_URL';
const repositoryFactory = new bitxor_sdk_1.RepositoryFactoryHttp(nodeUrl);
const transactionHttp = repositoryFactory.createTransactionRepository();
transactionHttp.announce(signedTransaction).subscribe(
  (x) => console.log(x),
  (err) => console.error(err),
);

La propiedad minRemoval indica el número de firmas requeridas para eliminar una cuenta del multisig. Este valor se puede aumentar o disminuir de la misma manera que se modifica la propiedad minApproval <modifying-a-multisig-account-min-approval>`.

Esta vez, la MultisigModificationTransaction está envuelta en una AgregateCompleteTransaction porque solo se requiere una cuenta para eliminar otras de la multisig.

Note

If more than one cosignature is required to announce the transaction (e.g., minRemoval is set to 2), the transaction must be defined as aggregate bonded, and all other required multisig participants should cosign it in order to be confirmed. Follow the next guide to announce aggregate bonded transactions involving a multisig account.

Siga la siguiente guía para crear una cuenta multisig multinivel.