#!/usr/bin/env python
import sys
import yaml
from ethereum.transactions import Transaction
from ethereum.utils import encode_hex, decode_hex
import rlp


def geth_tx_to_raw(tx):
  for field in ['blockHash', 'blockNumber', 'hash', 'transactionIndex', 'from']:
    tx.pop(field)

  tx['gasprice'] = tx.pop('gasPrice')
  tx['startgas'] = tx.pop('gas')
  tx['data'] = decode_hex(tx.pop('input')[2:])
  for f in ['v', 's', 'r']:
    tx[f] = int(tx.pop(f), 0)

  return '0x' + encode_hex(
      rlp.encode(
          Transaction.serialize(
              Transaction(**tx)
          )
      )
  )


if __name__ == '__main__':
    if not len(sys.argv) > 1:
        print(
            'convert geth pendingTransactions format to raw signed hex format\n\n'
            'Usage:\n\t'
            './geth_pending_to_raw.py <geth pending tx>\n\t'
            '''./geth_pending_to_raw.py "$(geth attach geth.ipc --exec 'eth.pendingTransactions')"'''

        )
        sys.exit(0)
    data = yaml.load(
        sys.argv[1]
    )
    if isinstance(data, dict):
        data = [data]
    for tx in data:
        print(tx)
        print(geth_tx_to_raw(tx))