¿Alguien puede explicar este pseudocódigo para encontrar una dirección de retorno?

Estaba leyendo una respuesta popular que explica cómo encontrar la dirección de la persona que envió una transacción y el pseudocódigo en esa respuesta no tiene mucho sentido para mí.

txid = <relevant transaction id>
addresses = []
raw_tx = decoderawtransaction(getrawtransaction(txid))
for(input in raw_tx['vin']) {
  input_raw_tx = decoderawtransaction(getrawtransaction(input['txid']))
  addresses.push(input_raw_tx['vout'][input['vout']]['scriptPubKey']['addresses'][0])
}

Aquí está la parte que entendí. Una billetera creada txidpuede usar muchas entradas de diferentes direcciones para enviar esa cantidad de dinero. Es por eso que iteramos input in raw_tx['vin']y creamos una lista de direcciones addresses = [].

Aquí hay una parte que no me queda clara:

input_raw_tx['vout'][input['vout']]['scriptPubKey']['addresses'][0]

input_raw_tx['vout']devuelve la lista. Entonces input['vout']debería devolver el índice de esa lista. Pero también devuelve una lista. ¿Puede alguien explicar qué está pasando?

Además, esa respuesta se escribió en el antiguo 2013. ¿Ha cambiado algo en estos 4 años y hay una manera más fácil de encontrar la dirección de retorno a principios de 2918?

Respuestas (1)

Repita conmigo: las transacciones de Bitcoin no tienen una dirección de retorno. Las transacciones de Bitcoin no tienen una dirección de retorno.

Como dices, una transacción puede tener múltiples entradas. Cada entrada gasta una moneda que previamente estaba controlada por una dirección/clave o secuencia de comandos en particular. Sin embargo, estos "destinatarios de entrada" no son direcciones de devolución, por varias razones:

  • Las diferentes entradas pueden pertenecer a diferentes personas/entidades, por ejemplo, si usan protocolos CoinJoin o simar. No sabe cuál es el remitente de su pago (el pseudocódigo anterior solo devolverá todas las direcciones del remitente).
  • Es posible que no haya una dirección reconocible para cada entrada (por ejemplo, si se envió a través de un protocolo de alto nivel), sino solo una secuencia de comandos arbitraria (el pseudocódigo anterior fallará en este caso).
  • Incluso si hay una dirección clara, puede pertenecer a un servicio que usó el remitente, y enviarle monedas le daría crédito al servicio o a un usuario arbitrario del mismo en lugar del remitente de su transacción (el pseudocódigo daría la dirección del servicio en este caso).
  • Incluso si hay una dirección que de hecho pertenecía al remitente, es posible que no esperen un pago y quizás no hayan guardado las claves privadas para ello.

En general, si desea reembolsar algo de dinero, solo hay una solución: solicite al remitente con anticipación una dirección de reembolso.