Estoy jugando con transacciones bitcore y transacciones multi-sig y me preguntaba cómo enviar una transacción a más de una dirección y conservar el cambio.
Actualmente, cuando intento enviar la transacción, se envía, pero fee
se calcula como:
unspent - satoshis
Un ejemplo de esta transacción que he realizado en la cadena de bloques se puede ver aquí:
Ad puede ver que se calcula así:
Importe original no gastado: 0,09000000
Tarifa: 0.08990000
Comerciado: 0.00010000
Suma de transacción: 0.00010000
Ahora entiendo que uno debe gastar todas las salidas no gastadas en una transacción, pero ¿cómo puedo evitar que la tarifa sea como la anterior, el saldo restante no gastado?
Básicamente, quiero dividir la transacción para dos direcciones y enviar el resto a una dirección de cambio.
Código:
var utxo = new bitcore.Transaction.UnspentOutput({
"txid" : "f42af6ab8b4dc3c636c5bfc6ce819063a55060c5619d31a6fa45a36413cb7953",
"vout" : 0,
"address" : "2MzuRYCXSHcBDEsSS4rziShvEzWSfoDe2zL",
"scriptPubKey" : "OP_HASH160 20 0x54025426880aa847ec86f4d2488bbe260bfe0fcb OP_EQUAL",
"satoshis" : 10000
});
var pubs = [
"02758b89e56bfa8da41f2c1701aa5927bc026cc3b51bbeff399c53a15f2ae52e28",
"02987ab3466118bd3fb5cb0c4fddbdd7ff8e21188314ffed4ecad83fb7689d57d7",
"037b7f8cea06cfd5a96023341441b52431e31867c6f3716e5f20be24b709d023eb"
];
var multiSigTx = new bitcore.Transaction()
.from(utxo, pubs, 2)
.to("n1fqBkX6GtUsaV3EPqjpHcTuWhAQQgKXov", 10000)
.fee(5430)
.change("2MzuRYCXSHcBDEsSS4rziShvEzWSfoDe2zL")
.sign(["083b63f9dbaa100c1714e05a04c20ab32f83f7726ba54a682013a13df6a92949" ,"5bef634cdcc7f9c2fd2b429d1ddf6cae56923433b6e8b2c5515cf87d84751e0a"]);
var txSerialized = multiSigTx.serialize(true);
// Broadcast
insight.broadcast(txSerialized, function(err, returnedTxId) {
if (err) {
console.log(err);
} else {
console.log("Sent coins, tx id is: ");
console.log(returnedTxId);
}
});
Me di cuenta de esto, el nuevo código de transacción debería verse así con la dirección generada usando el fromString()
método usando bitcore.
var address = bitcore.Address.fromString('2NEvGYDNxcVPZ2ThtmPKYoKBCEa3aJNjPL3');
var multiSigTx = new bitcore.Transaction()
.from(utxo, pubs, 2)
.to("mntnnj64W4po96m2ck4GXQJTAiKZQChpWB", 10000)
.to("msR1bBwUWjTTNYFU5UTVNCXDUnEx1y2MMQ", 10000)
.fee(5430)
.change(address)
.sign(["7e925007e09447fa6160597391d7a24f8f47e40222d6c94b06bd9cecee5eddff" ,"6b8adfd22b8dd3186ea5333602b39a59fc1c40c543dc3848ea88c6cd6b738594"]);
var txSerialized = multiSigTx.serialize(true);
Esto mostrará la salida de cambio correcta para la transacción.
console.log(multiSigTx.getChangeOutput());
suiza