¿Cuál es la diferencia entre transactioninput.getFromAddress() y transactioninput.getConnectedOutput().getAddressFromP2SH(networkparameter))?

Esperaba que, en el caso de que getFromAddress() devuelva una dirección, transactioninput.getConnectedOutput().getAddressFromP2SH(networkparameter)) debería devolver la misma dirección. Pero, a veces, transactioninput.getConnectedOutput() devuelve un valor nulo, a pesar de que getFromAddress() devuelve una dirección adecuada. ¿Cuál es la razón?

Si estos dos métodos son diferentes, ¿cómo podría devolver el valor del campo "addr" del objeto "prev_out" de los elementos de la matriz "input" en el objeto JSON devuelto sin el uso de blockchain.info-api? (por ejemplo, para este https://blockchain.info/address/1LoD9DeUeCfnZueSVPzFaFkfFcx8mG1Add?format=json ).

Lo he intentado con input.getOutpoint().getConnectedOutput() , que no hace la diferencia.
¿Qué biblioteca estás usando?
Estoy usando bitconj.

Respuestas (2)

Después de revisar la documentación de la API de bitcoinj con respecto a los métodos sobre los que ha preguntado, la forma en que hace que funcione el segundo método, se supone que debe conectar la transacción de entrada para obtener el resultado de ese tx en particular. Puede ir a través del enlace que he dado arriba e informar si es necesario.

Ya revisé el enlace con respecto a mis propósitos y creo que conecté la transacción de entrada para obtener la salida de ese tx en particular con el código que se muestra. ¿Qué hice mal?

La respuesta de Shabahat es buena, pero así es como funciona cada método para obtener una dirección:

  1. getFromAddress()toma el último elemento de scriptSig y lo procesa para encontrar la dirección P2SH. Si la transacción es válida y P2SH, esta siempre será correcta. Puede hacer algo similar para P2PKH, pero no puede hacer esto para P2PK. (P2PK no incluye la clave pública en scriptSig).
  2. transactioninput.getConnectedOutput().getAddressFromP2SH()mira el scriptPubKey de la transacción anterior e intenta convertirlo en una dirección. No todas las scriptPubKey válidas se pueden representar con un formato de dirección estándar, por lo que no siempre funcionará. (Sin embargo, funcionará para los casos comunes de P2PKH, P2SH y P2PK).

Ya revisé el enlace con respecto a mis propósitos y creo que conecté la transacción de entrada para obtener la salida de ese tx en particular con el código que se muestra.

¿Está comprobando el valor de retorno de connect?

¿"conectar" aquí significa "getConnectedOutput"? Solo por asegurar.
@Aqqqq No, esta conexión: bitcoinj.github.io/javadoc/0.12/org/bitcoinj/core/… (por cierto, no estoy seguro de qué versión está usando).