#!/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))