¿Cuál es la entrada requerida para el comando python-bitcoinlib getrawtransaction?

Estoy ejecutando un nodo de bitcoin en mi máquina, totalmente sincronizado con los comandos RPC habilitados, el servidor rpc en vivo y txindex=1.

En la línea de comandos, puedo ejecutar la siguiente llamada RPC y obtener la información sobre la transacción que necesito. Estoy usando la cli porque necesito procesar 2,5 millones de transacciones.

./bitcoin-cli decoderawtransaction $(./bitcoin-cli getrawtransaction b601fc820d66b6516f89557fba9b40943df962de96b914547dec72b0f047c2f3)

Lo que devuelve una salida JSON de la transacción.

Sin embargo, cuando se ejecuta con la biblioteca python-bitcoinlib, parece dar el siguiente mensaje de error

import bitcoin, bitcoin.rpc bitcoin.SelectParams("mainnet") rpc = bitcoin.rpc.Proxy() rpc.getrawtransaction("b601fc820d66b6516f89557fba9b40943df962de96b914547dec72b0f047c2f3")

InvalidParameterError: {u'message': u'parameter 1 debe tener una longitud de 64 (no 128)', u'code': -8}

¿Qué estoy haciendo mal, no es b601 ... la identificación de la transacción?

Editar: según el comentario, lo arreglé reemplazándolo rpc=bitcoin.rpc.Proxy()con rpc=bitcoin.rpc.RawProxy(). Pero igual me gustaria saber por que falla el anterior.

Lo arreglé reemplazando rpc=bitcoin.rpc.Proxy()con rpc=bitcoin.rpc.RawProxy(). Pero igual me gustaria saber porque falla el anterior
Supongo que hay una diferencia al analizar la cadena hexadecimal cuando usa Proxy vs. RawProxy.

Respuestas (1)

getrawtransactionrequiere el formato little endian del trxid, como:

import bitcoin.rpc
from bitcoin.core import lx
p = bitcoin.rpc.Proxy(service_url='http://usr:pa@ip:port')
trxid = lx('7e195aa3de827814f172c362fcf838d92ba10e3f9fdd9c3ecaf79522b311b22d')
rawtrx = p.getrawtransaction(trxid)
print(rawtrx)

Comentarios del Sr. Peter Todd al respecto:

https://github.com/petertodd/python-bitcoinlib/blob/master/examples/spend-p2pkh-txout.py#L41