Usando bitcore para crear una transacción con dos direcciones y cambiar la dirección

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 feese calcula como:

unspent - satoshis

Un ejemplo de esta transacción que he realizado en la cadena de bloques se puede ver aquí:

Transacción de ejemplo

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);
  }
});

Respuestas (1)

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());

con esto envias 10000 Satoshis a cada una de las dos direcciones diferentes? ¿Cómo podríamos enviar una cantidad (10000 Satoshis) a un Array de direcciones?