¿Cómo puedo crear una transacción sin procesar en formato hexadecimal con Bitcoinj?

¿Cómo puedo crear una transacción sin procesar cuando me dan las secuencias de comandos de entrada, los índices de entrada, los txid de entrada, la secuencia de comandos de salida, la dirección de salida y la cantidad de salida? El siguiente método funciona, pero requiere que el método Transaction setHash sea público, lo cual no es. ¿Puedo obtener lo que quiero sin tener que hacer ningún cambio en Bitcoinj?

    NetworkParameters params = MainNetParams.get();
    Transaction tx = new Transaction(params);
    tx.addOutput(Coin.ZERO, new Script(HEX.decode(outputScript)));
    try {
        Address addr = new Address(params, toAddress);
        tx.addOutput(Coin.valueOf(toAmount), addr);
    } catch (AddressFormatException name) {
        return null;
    }

    Script script = new Script(HEX.decode(inputScript));
    Address addr = new Address(params, script.getPubKeyHash());

    Transaction parentTx = new Transaction(params);
    for (int j = 0; j < inputIndex; j++) {
        parentTx.addOutput(new TransactionOutput(params, parentTx, Coin.ZERO, addr));
    }
    parentTx.addOutput(new TransactionOutput(params, parentTx, Coin.ZERO, addr));
    parentTx.setHash(Sha256Hash.wrap(txid)); // requires setHash method to be public
    try {
        ECKey key = new DumpedPrivateKey(params, privateKey).getKey();
        tx.addSignedInput(parentTx.getOutput(inputIndex), key);
    } catch (AddressFormatException name) {
        return null;
    }
    return HEX.encode(tx.bitcoinSerialize());
¿Qué es inputScript y txid?

Respuestas (1)

No cree la transacción principal completa, solo cree el punto de salida, que es todo lo que es relevante para codificar una transacción en hexadecimal. Utilice específicamente este constructor

EDITAR: Más específicamente, no puede recrear la transacción principal a menos que tenga TODA la información relevante para esa transacción (entradas, tiempo de bloqueo, salidas, etc.). Para usar el constructor que vinculé a continuación, también deberá proporcionar el índice de salida de la salida que está gastando en su transacción principal.