Esta guía te mostrará cómo aumentar y disminuir el número mínimo de firmas necesarias para ejecutar una transacción multisig.
Imagina que Alice y Bob son cosignatarios de una cuenta multisig 1-de-2.
Esto significa que se requiere al menos una de las firmas de su cuenta para autorizar transacciones multisig.
En otras palabras, podemos decir que la propiedad minApproval
de la multisig está actualmente establecida en 1.
En este caso, queremos requerir ambas firmas de los cosignatarios, cambiando a una multisig 2-de-2. Para lograr esto, aumentaremos minApproval en una unidad.
Completa la guía de conversión de una cuenta a multisig.
Inicia sesión en una cuenta que sea cosignataria (Alice o Bob) de la cuenta que deseas modificar.
Haz clic en la pestaña “Multisig” en el lado izquierdo de la billetera.
Selecciona la billetera multisig que deseas modificar en el menú desplegable del campo superior. Esto convertirá el “Tipo de operación” en “Modificación de las propiedades de la cuenta multisig”.
Selecciona el nuevo número de “Aprobación mínima”. En este caso, queremos cambiarlo a “2”. Haz clic en “Enviar”. Revisa la información en el cuadro emergente. Ingresa la contraseña de tu billetera y haz clic en “Confirmar”.
Si la cuenta multisig tiene la “aprobación mínima” establecida en un número mayor que 1, inicia sesión en otra cuenta cosignataria y firma la transacción. Repite este paso hasta que se cumpla el número mínimo de aprobaciones.
Una vez que la Transacción de Agregación se confirme, puedes verificar sus nuevas propiedades en el menú “Multisig”.
Una de las cuentas cosignatarias, por ejemplo la de Alice, anunciará una transacción de modificación de cuenta multisig para aumentar minApprovalDelta
.
Abre un nuevo archivo. Luego, define la clave pública de la cuenta de Alice y la clave privada de la cuenta multisig en variables nuevas.
// replace with network type
const networkType = NetworkType.TEST_NET;
// replace with cosignatory private key
const cosignatoryPrivateKey =
'1111111111111111111111111111111111111111111111111111111111111111';
const cosignatoryAccount = Account.createFromPrivateKey(
cosignatoryPrivateKey,
networkType,
);
// replace with multisig account private key
const multisigAccountPublicKey =
'3A537D5A1AF51158C42F80A199BB58351DBF3253C4A6A1B7BD1014682FB595EA';
const multisigAccount = PublicAccount.createFromPublicKey(
multisigAccountPublicKey,
networkType,
);
// replace with network type
const networkType = bitxor_sdk_1.NetworkType.TEST_NET;
// replace with cosignatory private key
const cosignatoryPrivateKey =
'1111111111111111111111111111111111111111111111111111111111111111';
const cosignatoryAccount = bitxor_sdk_1.Account.createFromPrivateKey(
cosignatoryPrivateKey,
networkType,
);
// replace with multisig account private key
const multisigAccountPublicKey =
'3A537D5A1AF51158C42F80A199BB58351DBF3253C4A6A1B7BD1014682FB595EA';
const multisigAccount = bitxor_sdk_1.PublicAccount.createFromPublicKey(
multisigAccountPublicKey,
networkType,
);
Define una Transacción de Modificación de Cuenta Multisig para aumentar el minAprovalDelta
en una unidad.
const multisigAccountModificationTransaction = MultisigAccountModificationTransaction.create(
Deadline.create(epochAdjustment),
1,
0,
[],
[],
networkType,
);
const multisigAccountModificationTransaction = bitxor_sdk_1.MultisigAccountModificationTransaction.create(
bitxor_sdk_1.Deadline.create(epochAdjustment),
1,
0,
[],
[],
networkType,
);
Note
Si deseas disminuir la propiedad minApproval
, establece minApprovalDelta
con un valor negativo. Por ejemplo, para reducir el número de firmantes requeridos en una unidad, debes establecer minApprovalDelta
en -1
.
Envuelve la Transacción de Modificación de Cuenta Multisig en una Transacción de Agregación, adjuntando la clave pública de la cuenta multisig como firmante.
Una Transacción de Agregación está completa si, antes de anunciarla a la red, todos los cosignatarios requeridos la han firmado. Si es válida, se incluirá en un bloque. Como solo se requiere una cosignatura (1-de-2), Alice puede definir la agregación como completa, firmar la transacción y anunciarla a la red.
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),
);
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),
);
Una vez confirmada, el valor de minApproval
de la cuenta multisig se establecerá en 2, teniendo nuestra cuenta multisig 2-de-2.
Note
Si se requiere más de una cosignatura para anunciar la transacción (por ejemplo, la multisig es una cuenta 2-de-2), la transacción debe definirse como enlazada, y todos los demás participantes requeridos de la multisig deben cosignarla para confirmarla. Sigue la guía siguiente para anunciar transacciones enlazadas con una cuenta multisig.
Sigue la guía siguiente para agregar un nuevo firmante a la cuenta multisig.