¿Existe alguna biblioteca para decodificar/codificar transacciones sin procesar?

Quiero analizar la transacción sin procesar en JSON, luego cambiar algunos valores y volver a codificar en hexadecimal. JSON así:

{
"addresses": [
    "346vcZZ6QV4nr68fybMEuA7qxxQeyKWoPS"
], 
"block_height": -1, 
"block_index": -1, 
"confirmations": 0, 
"double_spend": false, 
"fees": 0, 
"hash": "e09c37cca11208a8c372a1e397dcff0382b4d78cdde157ce8824d028dc185a80", 
"inputs": [
    {
        "age": 0, 
        "output_index": 1, 
        "prev_hash": "c15bb773cdd5bb63a65766f5680684ce991c126698db0aa020e3058081742874", 
        "script_type": "empty", 
        "sequence": 4294967295
    }
], 
"outputs": [
    {
        "addresses": [
            "346vcZZ6QV4nr68fybMEuA7qxxQeyKWoPS"
        ], 
        "script": "a9141a75cd53e9740caadbf83cbefdd087cdceb978a487", 
        "script_type": "pay-to-script-hash", 
        "value": 14000000
    }
], 
"preference": "low", 
"received": "2018-08-21T08:05:02.841875145Z", 
"relayed_by": "54.160.159.32", 
"size": 83, 
"total": 14000000, 
"ver": 2, 
"vin_sz": 1, 
"vout_sz": 1
}

Intenté usar bitcoinj pero devuelve un objeto muy simple sin muchos campos.

¿Qué estás tratando de cambiar? La mayoría de los campos en json en realidad no existen en una transacción

Respuestas (1)

Pruebe esta biblioteca de Python (Descargo de responsabilidad: lo escribí)

from btctools import Transaction

>>> tx = Transaction.from_hex('0100000000010153159b2a077d8dfbe4dca4b6b3a9e0ccedb4962ca73280526e6a1eeb1e8e9adc2a00000000ffffffff04a08f3e00000000001976a914de755835002260891962f1e671a2bf7605788d0f88ac0046c3230000000017a914c7c9b5f51244f39f81ec01146eb0d1d98d4bbd4c872052a6000000000017a91469f376599f0ffcaacd6a79854b1ee99513bb7b35870006f21600000000220020701a8d401c84fb13e6baf169d59684e17abd9fa216c8cc5b9fc63d622ff8c58d04004830450221009360af3ec3f9d4ae8acc3ab2213f3f9344cb322b4ea447490bb297a9a4c1d207022067027b032e54b3efb9e885604349ec4f1b6446eed8ed208c6fe6eeae9ace921a0148304502210097cf932eb37513c201b577472d70f1553f338d6439e9181607ec75f2e83fa148022052368c88085838521efc64cf509b95dd53d8c825089acd3ff681e74d3a2b4959016952210266edd4ef2953675faf0662c088a7f620935807d200d65387290b31648e51e253210372ce38027ee95c98cdc54172964fa3aecf9f24b85c139d3d203365d6b691d0502103c96d495bfdd5ba4145e3e046fee45e84a8a48ad05bd8dbb395c011a32cf9f88053ae00000000')
>>> tx
Transaction(inputs=1, outputs=4)

>>> tx.json()
{'locktime': 0,
 'size': 448,
 'txid': '0f6787fe25b631c73db598769eff70d616645eb61ad8c6f7408bc4341917aca5',
 'version': 1,
 'vin': [{'scriptSig': {'hex': ''},
   'sequence': 4294967295,
   'txid': 'dc9a8e1eeb1e6a6e528032a72c96b4edcce0a9b3b6a4dce4fb8d7d072a9b1553',
   'vout': 42,
   'witness': ['',
    '30450221009360af3ec3f9d4ae8acc3ab2213f3f9344cb322b4ea447490bb297a9a4c1d207022067027b032e54b3efb9e885604349ec4f1b6446eed8ed208c6fe6eeae9ace921a01',
    '304502210097cf932eb37513c201b577472d70f1553f338d6439e9181607ec75f2e83fa148022052368c88085838521efc64cf509b95dd53d8c825089acd3ff681e74d3a2b495901',
    '52210266edd4ef2953675faf0662c088a7f620935807d200d65387290b31648e51e253210372ce38027ee95c98cdc54172964fa3aecf9f24b85c139d3d203365d6b691d0502103c96d495bfdd5ba4145e3e046fee45e84a8a48ad05bd8dbb395c011a32cf9f88053ae']}],
 'vout': [{'scriptPubKey': {'asm': 'OP_DUP OP_HASH160 de755835002260891962f1e671a2bf7605788d0f OP_EQUALVERIFY OP_CHECKSIG',
    'hex': '76a914de755835002260891962f1e671a2bf7605788d0f88ac'},
   'value': 0.041},
  {'n': 1,
   'scriptPubKey': {'asm': 'OP_HASH160 c7c9b5f51244f39f81ec01146eb0d1d98d4bbd4c OP_EQUAL',
    'hex': 'a914c7c9b5f51244f39f81ec01146eb0d1d98d4bbd4c87'},
   'value': 6.0},
  {'n': 2,
   'scriptPubKey': {'asm': 'OP_HASH160 69f376599f0ffcaacd6a79854b1ee99513bb7b35 OP_EQUAL',
    'hex': 'a91469f376599f0ffcaacd6a79854b1ee99513bb7b3587'},
   'value': 0.109},
  {'n': 3,
   'scriptPubKey': {'asm': 'OP_0 701a8d401c84fb13e6baf169d59684e17abd9fa216c8cc5b9fc63d622ff8c58d',
    'hex': '0020701a8d401c84fb13e6baf169d59684e17abd9fa216c8cc5b9fc63d622ff8c58d'},
   'value': 3.8496}]}