¿Cómo obtener la dirección de los remitentes con bitcoinj (sin duplicado)?

Estoy usando bitcoinj (implementación de Java). He leído muchas respuestas aquí, pero ninguna responde a mi pregunta. ¿Cómo obtener la dirección de los remitentes usando bitcoinj?

Tengo la variable de transacción tx. Puedo obtener su hash, también he usado esto: https://blockchain.info/tx/myTXhash y me mostró las transacciones. El problema ni siquiera es que la web me esté mostrando el remitente.

PERO: si uso ese archivo .wallet generado y lo abro con multibit (billetera bitcoin) puedo ver allí, en transacciones, de quién se envió el dinero. Eso significa que hay una forma de obtener la dirección del remitente, pero ¿CÓMO?

EDITAR: Me equivoqué, multibit no sabe de quién vino el dinero, solo estaba confundido porque me mostró que se envió a la dirección correcta (pero eso lo configuré yo en args).

Pero, ¿existe alguna posibilidad de obtener el mensaje de alguna manera del cliente para saber si fue él quien envió el dinero?

¿Quiere decir obtener la dirección de Bitcoin que envió el dinero o de alguna manera obtener un nombre?
Sí, me refiero a la dirección de Bitcoin que envió el dinero. O de alguna otra forma como comprobar si el dinero provino de esa persona. Considérelo como una billetera que está recibiendo dinero constantemente, pero necesito verificar si proviene de los que quieren acceder en una web.

Respuestas (2)

Para referencia futura: en bitcoinJ (versión Java), las direcciones de entrada/salida de las transacciones se encuentran en los objetos TransactionInput y TransactionOutput.

Por ejemplo: para Transacción tx:

List<TransactionInput> inputs = tx.getInputs();
List<TransactionOutput> outputs = tx.getOutputs();

for(TransactionOutput out : outputs){
    System.out.println(out.getAddressFromP2PKHScript(params));
    System.out.println(out.getAddressFromP2SH(params));
}

for(TransactionInput in : inputs){
    System.out.println(in.getFromAddress());
}

Tenga en cuenta que algunas transacciones pueden no tener una dirección de entrada. Aquí está la descripción de github del método getFromAddress():

Método práctico que devuelve la dirección de origen de esta entrada analizando scriptSig. El concepto de "dirección de origen" no está bien definido en Bitcoin y no debe asumir que los remitentes de una transacción pueden recibir monedas en la misma dirección que usaron para firmar (por ejemplo, esto no es cierto para las billeteras compartidas).

Puede ver las direcciones que enviaron y recibieron dinero al mirar una transacción en la mayoría de los servicios. Por ejemplo:

https://blockchain.info/tx/c6cb02e70442275ffb7b35cc8a9416323ff7e01b5378abc20ae7f5b6e7617884

La flecha verde grande muestra la transferencia de una dirección (1B898F2tcWHX1LZWWfD21FRzqWrtXLocXN) a las otras 2. Programáticamente, podría usar una API que devuelva JSON con información equivalente:

https://api.blockcypher.com/v1/btc/main/txs/c6cb02e70442275ffb7b35cc8a9416323ff7e01b5378abc20ae7f5b6e7617884

Sin embargo, no es sencillo extraer esta información cuando se observa una transacción sin procesar, ya que las direcciones están incrustadas en el script.